276a5092f628c09962c1b75d8a2c8ebb7042a857
[oota-llvm.git] / lib / CodeGen / SimpleRegisterCoalescing.cpp
1 //===-- SimpleRegisterCoalescing.cpp - Register Coalescing ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements a simple register coalescing pass that attempts to
11 // aggressively coalesce every register copy that it can.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #define DEBUG_TYPE "regcoalescing"
16 #include "llvm/CodeGen/SimpleRegisterCoalescing.h"
17 #include "llvm/CodeGen/LiveIntervalAnalysis.h"
18 #include "VirtRegMap.h"
19 #include "llvm/Value.h"
20 #include "llvm/Analysis/LoopInfo.h"
21 #include "llvm/CodeGen/LiveVariables.h"
22 #include "llvm/CodeGen/MachineFrameInfo.h"
23 #include "llvm/CodeGen/MachineInstr.h"
24 #include "llvm/CodeGen/Passes.h"
25 #include "llvm/CodeGen/SSARegMap.h"
26 #include "llvm/Target/MRegisterInfo.h"
27 #include "llvm/Target/TargetInstrInfo.h"
28 #include "llvm/Target/TargetMachine.h"
29 #include "llvm/Support/CommandLine.h"
30 #include "llvm/Support/Debug.h"
31 #include "llvm/ADT/SmallSet.h"
32 #include "llvm/ADT/Statistic.h"
33 #include "llvm/ADT/STLExtras.h"
34 #include <algorithm>
35 #include <cmath>
36 using namespace llvm;
37
38 STATISTIC(numJoins    , "Number of interval joins performed");
39 STATISTIC(numPeep     , "Number of identity moves eliminated after coalescing");
40 STATISTIC(numAborts   , "Number of times interval joining aborted");
41
42 char SimpleRegisterCoalescing::ID = 0;
43 namespace {
44   static cl::opt<bool>
45   EnableJoining("join-liveintervals",
46                 cl::desc("Coalesce copies (default=true)"),
47                 cl::init(true));
48
49   RegisterPass<SimpleRegisterCoalescing> 
50   X("simple-register-coalescing", "Simple Register Coalescing");
51 }
52
53 const PassInfo *llvm::SimpleRegisterCoalescingID = X.getPassInfo();
54
55 void SimpleRegisterCoalescing::getAnalysisUsage(AnalysisUsage &AU) const {
56    //AU.addPreserved<LiveVariables>();
57   AU.addPreserved<LiveIntervals>();
58   AU.addPreservedID(PHIEliminationID);
59   AU.addPreservedID(TwoAddressInstructionPassID);
60   AU.addRequired<LiveVariables>();
61   AU.addRequired<LiveIntervals>();
62   AU.addRequired<LoopInfo>();
63   MachineFunctionPass::getAnalysisUsage(AU);
64 }
65
66 /// AdjustCopiesBackFrom - We found a non-trivially-coalescable copy with IntA
67 /// being the source and IntB being the dest, thus this defines a value number
68 /// in IntB.  If the source value number (in IntA) is defined by a copy from B,
69 /// see if we can merge these two pieces of B into a single value number,
70 /// eliminating a copy.  For example:
71 ///
72 ///  A3 = B0
73 ///    ...
74 ///  B1 = A3      <- this copy
75 ///
76 /// In this case, B0 can be extended to where the B1 copy lives, allowing the B1
77 /// value number to be replaced with B0 (which simplifies the B liveinterval).
78 ///
79 /// This returns true if an interval was modified.
80 ///
81 bool SimpleRegisterCoalescing::AdjustCopiesBackFrom(LiveInterval &IntA, LiveInterval &IntB,
82                                          MachineInstr *CopyMI) {
83   unsigned CopyIdx = li_->getDefIndex(li_->getInstructionIndex(CopyMI));
84
85   // BValNo is a value number in B that is defined by a copy from A.  'B3' in
86   // the example above.
87   LiveInterval::iterator BLR = IntB.FindLiveRangeContaining(CopyIdx);
88   unsigned BValNo = BLR->ValId;
89   
90   // Get the location that B is defined at.  Two options: either this value has
91   // an unknown definition point or it is defined at CopyIdx.  If unknown, we 
92   // can't process it.
93   unsigned BValNoDefIdx = IntB.getDefForValNum(BValNo);
94   if (!IntB.getSrcRegForValNum(BValNo)) return false;
95   assert(BValNoDefIdx == CopyIdx &&
96          "Copy doesn't define the value?");
97   
98   // AValNo is the value number in A that defines the copy, A0 in the example.
99   LiveInterval::iterator AValLR = IntA.FindLiveRangeContaining(CopyIdx-1);
100   unsigned AValNo = AValLR->ValId;
101   
102   // If AValNo is defined as a copy from IntB, we can potentially process this.
103   
104   // Get the instruction that defines this value number.
105   unsigned SrcReg = IntA.getSrcRegForValNum(AValNo);
106   if (!SrcReg) return false;  // Not defined by a copy.
107     
108   // If the value number is not defined by a copy instruction, ignore it.
109     
110   // If the source register comes from an interval other than IntB, we can't
111   // handle this.
112   if (rep(SrcReg) != IntB.reg) return false;
113   
114   // Get the LiveRange in IntB that this value number starts with.
115   unsigned AValNoInstIdx = IntA.getDefForValNum(AValNo);
116   LiveInterval::iterator ValLR = IntB.FindLiveRangeContaining(AValNoInstIdx-1);
117   
118   // Make sure that the end of the live range is inside the same block as
119   // CopyMI.
120   MachineInstr *ValLREndInst = li_->getInstructionFromIndex(ValLR->end-1);
121   if (!ValLREndInst || 
122       ValLREndInst->getParent() != CopyMI->getParent()) return false;
123
124   // Okay, we now know that ValLR ends in the same block that the CopyMI
125   // live-range starts.  If there are no intervening live ranges between them in
126   // IntB, we can merge them.
127   if (ValLR+1 != BLR) return false;
128
129   // If a live interval is a physical register, conservatively check if any
130   // of its sub-registers is overlapping the live interval of the virtual
131   // register. If so, do not coalesce.
132   if (MRegisterInfo::isPhysicalRegister(IntB.reg) &&
133       *mri_->getSubRegisters(IntB.reg)) {
134     for (const unsigned* SR = mri_->getSubRegisters(IntB.reg); *SR; ++SR)
135       if (li_->hasInterval(*SR) && IntA.overlaps(li_->getInterval(*SR))) {
136         DOUT << "Interfere with sub-register ";
137         DEBUG(li_->getInterval(*SR).print(DOUT, mri_));
138         return false;
139       }
140   }
141   
142   DOUT << "\nExtending: "; IntB.print(DOUT, mri_);
143   
144   unsigned FillerStart = ValLR->end, FillerEnd = BLR->start;
145   // We are about to delete CopyMI, so need to remove it as the 'instruction
146   // that defines this value #'. Update the the valnum with the new defining
147   // instruction #.
148   IntB.setDefForValNum(BValNo, FillerStart);
149   IntB.setSrcRegForValNum(BValNo, 0);
150   
151   // Okay, we can merge them.  We need to insert a new liverange:
152   // [ValLR.end, BLR.begin) of either value number, then we merge the
153   // two value numbers.
154   IntB.addRange(LiveRange(FillerStart, FillerEnd, BValNo));
155
156   // If the IntB live range is assigned to a physical register, and if that
157   // physreg has aliases, 
158   if (MRegisterInfo::isPhysicalRegister(IntB.reg)) {
159     // Update the liveintervals of sub-registers.
160     for (const unsigned *AS = mri_->getSubRegisters(IntB.reg); *AS; ++AS) {
161       LiveInterval &AliasLI = li_->getInterval(*AS);
162       AliasLI.addRange(LiveRange(FillerStart, FillerEnd,
163                                  AliasLI.getNextValue(FillerStart, 0)));
164     }
165   }
166
167   // Okay, merge "B1" into the same value number as "B0".
168   if (BValNo != ValLR->ValId)
169     IntB.MergeValueNumberInto(BValNo, ValLR->ValId);
170   DOUT << "   result = "; IntB.print(DOUT, mri_);
171   DOUT << "\n";
172
173   // If the source instruction was killing the source register before the
174   // merge, unset the isKill marker given the live range has been extended.
175   int UIdx = ValLREndInst->findRegisterUseOperandIdx(IntB.reg, true);
176   if (UIdx != -1)
177     ValLREndInst->getOperand(UIdx).unsetIsKill();
178   
179   // Finally, delete the copy instruction.
180   li_->RemoveMachineInstrFromMaps(CopyMI);
181   CopyMI->eraseFromParent();
182   ++numPeep;
183   return true;
184 }
185
186 /// JoinCopy - Attempt to join intervals corresponding to SrcReg/DstReg,
187 /// which are the src/dst of the copy instruction CopyMI.  This returns true
188 /// if the copy was successfully coalesced away, or if it is never possible
189 /// to coalesce this copy, due to register constraints.  It returns
190 /// false if it is not currently possible to coalesce this interval, but
191 /// it may be possible if other things get coalesced.
192 bool SimpleRegisterCoalescing::JoinCopy(MachineInstr *CopyMI,
193                              unsigned SrcReg, unsigned DstReg, bool PhysOnly) {
194   DOUT << li_->getInstructionIndex(CopyMI) << '\t' << *CopyMI;
195
196   // Get representative registers.
197   unsigned repSrcReg = rep(SrcReg);
198   unsigned repDstReg = rep(DstReg);
199   
200   // If they are already joined we continue.
201   if (repSrcReg == repDstReg) {
202     DOUT << "\tCopy already coalesced.\n";
203     return true;  // Not coalescable.
204   }
205   
206   bool SrcIsPhys = MRegisterInfo::isPhysicalRegister(repSrcReg);
207   bool DstIsPhys = MRegisterInfo::isPhysicalRegister(repDstReg);
208   if (PhysOnly && !SrcIsPhys && !DstIsPhys)
209     // Only joining physical registers with virtual registers in this round.
210     return true;
211
212   // If they are both physical registers, we cannot join them.
213   if (SrcIsPhys && DstIsPhys) {
214     DOUT << "\tCan not coalesce physregs.\n";
215     return true;  // Not coalescable.
216   }
217   
218   // We only join virtual registers with allocatable physical registers.
219   if (SrcIsPhys && !allocatableRegs_[repSrcReg]) {
220     DOUT << "\tSrc reg is unallocatable physreg.\n";
221     return true;  // Not coalescable.
222   }
223   if (DstIsPhys && !allocatableRegs_[repDstReg]) {
224     DOUT << "\tDst reg is unallocatable physreg.\n";
225     return true;  // Not coalescable.
226   }
227   
228   // If they are not of the same register class, we cannot join them.
229   if (differingRegisterClasses(repSrcReg, repDstReg)) {
230     DOUT << "\tSrc/Dest are different register classes.\n";
231     return true;  // Not coalescable.
232   }
233   
234   LiveInterval &SrcInt = li_->getInterval(repSrcReg);
235   LiveInterval &DstInt = li_->getInterval(repDstReg);
236   assert(SrcInt.reg == repSrcReg && DstInt.reg == repDstReg &&
237          "Register mapping is horribly broken!");
238
239   DOUT << "\t\tInspecting "; SrcInt.print(DOUT, mri_);
240   DOUT << " and "; DstInt.print(DOUT, mri_);
241   DOUT << ": ";
242
243   // Check if it is necessary to propagate "isDead" property before intervals
244   // are joined.
245   MachineOperand *mopd = CopyMI->findRegisterDefOperand(DstReg);
246   bool isDead = mopd->isDead();
247   bool isShorten = false;
248   unsigned SrcStart = 0, RemoveStart = 0;
249   unsigned SrcEnd = 0, RemoveEnd = 0;
250   if (isDead) {
251     unsigned CopyIdx = li_->getInstructionIndex(CopyMI);
252     LiveInterval::iterator SrcLR =
253       SrcInt.FindLiveRangeContaining(li_->getUseIndex(CopyIdx));
254     RemoveStart = SrcStart = SrcLR->start;
255     RemoveEnd   = SrcEnd   = SrcLR->end;
256     // The instruction which defines the src is only truly dead if there are
257     // no intermediate uses and there isn't a use beyond the copy.
258     // FIXME: find the last use, mark is kill and shorten the live range.
259     if (SrcEnd > li_->getDefIndex(CopyIdx)) {
260       isDead = false;
261     } else {
262       MachineOperand *MOU;
263       MachineInstr *LastUse= lastRegisterUse(SrcStart, CopyIdx, repSrcReg, MOU);
264       if (LastUse) {
265         // Shorten the liveinterval to the end of last use.
266         MOU->setIsKill();
267         isDead = false;
268         isShorten = true;
269         RemoveStart = li_->getDefIndex(li_->getInstructionIndex(LastUse));
270         RemoveEnd   = SrcEnd;
271       } else {
272         MachineInstr *SrcMI = li_->getInstructionFromIndex(SrcStart);
273         if (SrcMI) {
274           MachineOperand *mops = findDefOperand(SrcMI, repSrcReg);
275           if (mops)
276             // A dead def should have a single cycle interval.
277             ++RemoveStart;
278         }
279       }
280     }
281   }
282
283   // We need to be careful about coalescing a source physical register with a
284   // virtual register. Once the coalescing is done, it cannot be broken and
285   // these are not spillable! If the destination interval uses are far away,
286   // think twice about coalescing them!
287   if (!mopd->isDead() && (SrcIsPhys || DstIsPhys)) {
288     LiveInterval &JoinVInt = SrcIsPhys ? DstInt : SrcInt;
289     unsigned JoinVReg = SrcIsPhys ? repDstReg : repSrcReg;
290     unsigned JoinPReg = SrcIsPhys ? repSrcReg : repDstReg;
291     const TargetRegisterClass *RC = mf_->getSSARegMap()->getRegClass(JoinVReg);
292     unsigned Threshold = allocatableRCRegs_[RC].count();
293
294     // If the virtual register live interval is long has it has low use desity,
295     // do not join them, instead mark the physical register as its allocation
296     // preference.
297     unsigned Length = JoinVInt.getSize() / InstrSlots::NUM;
298     LiveVariables::VarInfo &vi = lv_->getVarInfo(JoinVReg);
299     if (Length > Threshold &&
300         (((float)vi.NumUses / Length) < (1.0 / Threshold))) {
301       JoinVInt.preference = JoinPReg;
302       ++numAborts;
303       DOUT << "\tMay tie down a physical register, abort!\n";
304       return false;
305     }
306   }
307
308   // Okay, attempt to join these two intervals.  On failure, this returns false.
309   // Otherwise, if one of the intervals being joined is a physreg, this method
310   // always canonicalizes DstInt to be it.  The output "SrcInt" will not have
311   // been modified, so we can use this information below to update aliases.
312   if (JoinIntervals(DstInt, SrcInt)) {
313     if (isDead) {
314       // Result of the copy is dead. Propagate this property.
315       if (SrcStart == 0) {
316         assert(MRegisterInfo::isPhysicalRegister(repSrcReg) &&
317                "Live-in must be a physical register!");
318         // Live-in to the function but dead. Remove it from entry live-in set.
319         // JoinIntervals may end up swapping the two intervals.
320         mf_->begin()->removeLiveIn(repSrcReg);
321       } else {
322         MachineInstr *SrcMI = li_->getInstructionFromIndex(SrcStart);
323         if (SrcMI) {
324           MachineOperand *mops = findDefOperand(SrcMI, repSrcReg);
325           if (mops)
326             mops->setIsDead();
327         }
328       }
329     }
330
331     if (isShorten || isDead) {
332       // Shorten the destination live interval.
333       if (repSrcReg == DstInt.reg)
334         DstInt.removeRange(RemoveStart, RemoveEnd);
335     }
336   } else {
337     // Coalescing failed.
338     
339     // If we can eliminate the copy without merging the live ranges, do so now.
340     if (AdjustCopiesBackFrom(SrcInt, DstInt, CopyMI))
341       return true;
342
343     // Otherwise, we are unable to join the intervals.
344     DOUT << "Interference!\n";
345     return false;
346   }
347
348   bool Swapped = repSrcReg == DstInt.reg;
349   if (Swapped)
350     std::swap(repSrcReg, repDstReg);
351   assert(MRegisterInfo::isVirtualRegister(repSrcReg) &&
352          "LiveInterval::join didn't work right!");
353                                
354   // If we're about to merge live ranges into a physical register live range,
355   // we have to update any aliased register's live ranges to indicate that they
356   // have clobbered values for this range.
357   if (MRegisterInfo::isPhysicalRegister(repDstReg)) {
358     // Unset unnecessary kills.
359     if (!DstInt.containsOneValue()) {
360       for (LiveInterval::Ranges::const_iterator I = SrcInt.begin(),
361              E = SrcInt.end(); I != E; ++I)
362         unsetRegisterKills(I->start, I->end, repDstReg);
363     }
364
365     // Update the liveintervals of sub-registers.
366     for (const unsigned *AS = mri_->getSubRegisters(repDstReg); *AS; ++AS)
367       li_->getInterval(*AS).MergeInClobberRanges(SrcInt);
368   } else {
369     // Merge use info if the destination is a virtual register.
370     LiveVariables::VarInfo& dVI = lv_->getVarInfo(repDstReg);
371     LiveVariables::VarInfo& sVI = lv_->getVarInfo(repSrcReg);
372     dVI.NumUses += sVI.NumUses;
373   }
374
375   DOUT << "\n\t\tJoined.  Result = "; DstInt.print(DOUT, mri_);
376   DOUT << "\n";
377
378   // Remember these liveintervals have been joined.
379   JoinedLIs.set(repSrcReg - MRegisterInfo::FirstVirtualRegister);
380   if (MRegisterInfo::isVirtualRegister(repDstReg))
381     JoinedLIs.set(repDstReg - MRegisterInfo::FirstVirtualRegister);
382
383   // If the intervals were swapped by Join, swap them back so that the register
384   // mapping (in the r2i map) is correct.
385   if (Swapped) SrcInt.swap(DstInt);
386
387   // repSrcReg is guarateed to be the register whose live interval that is
388   // being merged.
389   li_->removeInterval(repSrcReg);
390   r2rMap_[repSrcReg] = repDstReg;
391
392   // Finally, delete the copy instruction.
393   li_->RemoveMachineInstrFromMaps(CopyMI);
394   CopyMI->eraseFromParent();
395   ++numPeep;
396   ++numJoins;
397   return true;
398 }
399
400 /// ComputeUltimateVN - Assuming we are going to join two live intervals,
401 /// compute what the resultant value numbers for each value in the input two
402 /// ranges will be.  This is complicated by copies between the two which can
403 /// and will commonly cause multiple value numbers to be merged into one.
404 ///
405 /// VN is the value number that we're trying to resolve.  InstDefiningValue
406 /// keeps track of the new InstDefiningValue assignment for the result
407 /// LiveInterval.  ThisFromOther/OtherFromThis are sets that keep track of
408 /// whether a value in this or other is a copy from the opposite set.
409 /// ThisValNoAssignments/OtherValNoAssignments keep track of value #'s that have
410 /// already been assigned.
411 ///
412 /// ThisFromOther[x] - If x is defined as a copy from the other interval, this
413 /// contains the value number the copy is from.
414 ///
415 static unsigned ComputeUltimateVN(unsigned VN,
416                         SmallVector<LiveInterval::VNInfo, 16> &ValueNumberInfo,
417                                   SmallVector<int, 16> &ThisFromOther,
418                                   SmallVector<int, 16> &OtherFromThis,
419                                   SmallVector<int, 16> &ThisValNoAssignments,
420                                   SmallVector<int, 16> &OtherValNoAssignments,
421                                   LiveInterval &ThisLI, LiveInterval &OtherLI) {
422   // If the VN has already been computed, just return it.
423   if (ThisValNoAssignments[VN] >= 0)
424     return ThisValNoAssignments[VN];
425 //  assert(ThisValNoAssignments[VN] != -2 && "Cyclic case?");
426   
427   // If this val is not a copy from the other val, then it must be a new value
428   // number in the destination.
429   int OtherValNo = ThisFromOther[VN];
430   if (OtherValNo == -1) {
431     ValueNumberInfo.push_back(ThisLI.getValNumInfo(VN));
432     return ThisValNoAssignments[VN] = ValueNumberInfo.size()-1;
433   }
434
435   // Otherwise, this *is* a copy from the RHS.  If the other side has already
436   // been computed, return it.
437   if (OtherValNoAssignments[OtherValNo] >= 0)
438     return ThisValNoAssignments[VN] = OtherValNoAssignments[OtherValNo];
439   
440   // Mark this value number as currently being computed, then ask what the
441   // ultimate value # of the other value is.
442   ThisValNoAssignments[VN] = -2;
443   unsigned UltimateVN =
444     ComputeUltimateVN(OtherValNo, ValueNumberInfo,
445                       OtherFromThis, ThisFromOther,
446                       OtherValNoAssignments, ThisValNoAssignments,
447                       OtherLI, ThisLI);
448   return ThisValNoAssignments[VN] = UltimateVN;
449 }
450
451 static bool InVector(unsigned Val, const SmallVector<unsigned, 8> &V) {
452   return std::find(V.begin(), V.end(), Val) != V.end();
453 }
454
455 /// SimpleJoin - Attempt to joint the specified interval into this one. The
456 /// caller of this method must guarantee that the RHS only contains a single
457 /// value number and that the RHS is not defined by a copy from this
458 /// interval.  This returns false if the intervals are not joinable, or it
459 /// joins them and returns true.
460 bool SimpleRegisterCoalescing::SimpleJoin(LiveInterval &LHS, LiveInterval &RHS) {
461   assert(RHS.containsOneValue());
462   
463   // Some number (potentially more than one) value numbers in the current
464   // interval may be defined as copies from the RHS.  Scan the overlapping
465   // portions of the LHS and RHS, keeping track of this and looking for
466   // overlapping live ranges that are NOT defined as copies.  If these exist, we
467   // cannot coalesce.
468   
469   LiveInterval::iterator LHSIt = LHS.begin(), LHSEnd = LHS.end();
470   LiveInterval::iterator RHSIt = RHS.begin(), RHSEnd = RHS.end();
471   
472   if (LHSIt->start < RHSIt->start) {
473     LHSIt = std::upper_bound(LHSIt, LHSEnd, RHSIt->start);
474     if (LHSIt != LHS.begin()) --LHSIt;
475   } else if (RHSIt->start < LHSIt->start) {
476     RHSIt = std::upper_bound(RHSIt, RHSEnd, LHSIt->start);
477     if (RHSIt != RHS.begin()) --RHSIt;
478   }
479   
480   SmallVector<unsigned, 8> EliminatedLHSVals;
481   
482   while (1) {
483     // Determine if these live intervals overlap.
484     bool Overlaps = false;
485     if (LHSIt->start <= RHSIt->start)
486       Overlaps = LHSIt->end > RHSIt->start;
487     else
488       Overlaps = RHSIt->end > LHSIt->start;
489     
490     // If the live intervals overlap, there are two interesting cases: if the
491     // LHS interval is defined by a copy from the RHS, it's ok and we record
492     // that the LHS value # is the same as the RHS.  If it's not, then we cannot
493     // coalesce these live ranges and we bail out.
494     if (Overlaps) {
495       // If we haven't already recorded that this value # is safe, check it.
496       if (!InVector(LHSIt->ValId, EliminatedLHSVals)) {
497         // Copy from the RHS?
498         unsigned SrcReg = LHS.getSrcRegForValNum(LHSIt->ValId);
499         if (rep(SrcReg) != RHS.reg)
500           return false;    // Nope, bail out.
501         
502         EliminatedLHSVals.push_back(LHSIt->ValId);
503       }
504       
505       // We know this entire LHS live range is okay, so skip it now.
506       if (++LHSIt == LHSEnd) break;
507       continue;
508     }
509     
510     if (LHSIt->end < RHSIt->end) {
511       if (++LHSIt == LHSEnd) break;
512     } else {
513       // One interesting case to check here.  It's possible that we have
514       // something like "X3 = Y" which defines a new value number in the LHS,
515       // and is the last use of this liverange of the RHS.  In this case, we
516       // want to notice this copy (so that it gets coalesced away) even though
517       // the live ranges don't actually overlap.
518       if (LHSIt->start == RHSIt->end) {
519         if (InVector(LHSIt->ValId, EliminatedLHSVals)) {
520           // We already know that this value number is going to be merged in
521           // if coalescing succeeds.  Just skip the liverange.
522           if (++LHSIt == LHSEnd) break;
523         } else {
524           // Otherwise, if this is a copy from the RHS, mark it as being merged
525           // in.
526           if (rep(LHS.getSrcRegForValNum(LHSIt->ValId)) == RHS.reg) {
527             EliminatedLHSVals.push_back(LHSIt->ValId);
528
529             // We know this entire LHS live range is okay, so skip it now.
530             if (++LHSIt == LHSEnd) break;
531           }
532         }
533       }
534       
535       if (++RHSIt == RHSEnd) break;
536     }
537   }
538   
539   // If we got here, we know that the coalescing will be successful and that
540   // the value numbers in EliminatedLHSVals will all be merged together.  Since
541   // the most common case is that EliminatedLHSVals has a single number, we
542   // optimize for it: if there is more than one value, we merge them all into
543   // the lowest numbered one, then handle the interval as if we were merging
544   // with one value number.
545   unsigned LHSValNo;
546   if (EliminatedLHSVals.size() > 1) {
547     // Loop through all the equal value numbers merging them into the smallest
548     // one.
549     unsigned Smallest = EliminatedLHSVals[0];
550     for (unsigned i = 1, e = EliminatedLHSVals.size(); i != e; ++i) {
551       if (EliminatedLHSVals[i] < Smallest) {
552         // Merge the current notion of the smallest into the smaller one.
553         LHS.MergeValueNumberInto(Smallest, EliminatedLHSVals[i]);
554         Smallest = EliminatedLHSVals[i];
555       } else {
556         // Merge into the smallest.
557         LHS.MergeValueNumberInto(EliminatedLHSVals[i], Smallest);
558       }
559     }
560     LHSValNo = Smallest;
561   } else {
562     assert(!EliminatedLHSVals.empty() && "No copies from the RHS?");
563     LHSValNo = EliminatedLHSVals[0];
564   }
565   
566   // Okay, now that there is a single LHS value number that we're merging the
567   // RHS into, update the value number info for the LHS to indicate that the
568   // value number is defined where the RHS value number was.
569   const LiveInterval::VNInfo VNI = RHS.getValNumInfo(0);
570   LHS.setDefForValNum(LHSValNo, VNI.def);
571   LHS.setSrcRegForValNum(LHSValNo, VNI.reg);
572   
573   // Okay, the final step is to loop over the RHS live intervals, adding them to
574   // the LHS.
575   LHS.addKillsForValNum(LHSValNo, VNI.kills);
576   LHS.MergeRangesInAsValue(RHS, LHSValNo);
577   LHS.weight += RHS.weight;
578   if (RHS.preference && !LHS.preference)
579     LHS.preference = RHS.preference;
580   
581   return true;
582 }
583
584 /// JoinIntervals - Attempt to join these two intervals.  On failure, this
585 /// returns false.  Otherwise, if one of the intervals being joined is a
586 /// physreg, this method always canonicalizes LHS to be it.  The output
587 /// "RHS" will not have been modified, so we can use this information
588 /// below to update aliases.
589 bool SimpleRegisterCoalescing::JoinIntervals(LiveInterval &LHS, LiveInterval &RHS) {
590   // Compute the final value assignment, assuming that the live ranges can be
591   // coalesced.
592   SmallVector<int, 16> LHSValNoAssignments;
593   SmallVector<int, 16> RHSValNoAssignments;
594   SmallVector<int, 16> LHSValsDefinedFromRHS;
595   SmallVector<int, 16> RHSValsDefinedFromLHS;
596   SmallVector<LiveInterval::VNInfo, 16> ValueNumberInfo;
597                           
598   // If a live interval is a physical register, conservatively check if any
599   // of its sub-registers is overlapping the live interval of the virtual
600   // register. If so, do not coalesce.
601   if (MRegisterInfo::isPhysicalRegister(LHS.reg) &&
602       *mri_->getSubRegisters(LHS.reg)) {
603     for (const unsigned* SR = mri_->getSubRegisters(LHS.reg); *SR; ++SR)
604       if (li_->hasInterval(*SR) && RHS.overlaps(li_->getInterval(*SR))) {
605         DOUT << "Interfere with sub-register ";
606         DEBUG(li_->getInterval(*SR).print(DOUT, mri_));
607         return false;
608       }
609   } else if (MRegisterInfo::isPhysicalRegister(RHS.reg) &&
610              *mri_->getSubRegisters(RHS.reg)) {
611     for (const unsigned* SR = mri_->getSubRegisters(RHS.reg); *SR; ++SR)
612       if (li_->hasInterval(*SR) && LHS.overlaps(li_->getInterval(*SR))) {
613         DOUT << "Interfere with sub-register ";
614         DEBUG(li_->getInterval(*SR).print(DOUT, mri_));
615         return false;
616       }
617   }
618                           
619   // Compute ultimate value numbers for the LHS and RHS values.
620   if (RHS.containsOneValue()) {
621     // Copies from a liveinterval with a single value are simple to handle and
622     // very common, handle the special case here.  This is important, because
623     // often RHS is small and LHS is large (e.g. a physreg).
624     
625     // Find out if the RHS is defined as a copy from some value in the LHS.
626     int RHSVal0DefinedFromLHS = -1;
627     int RHSValID = -1;
628     LiveInterval::VNInfo RHSValNoInfo;
629     unsigned RHSSrcReg = RHS.getSrcRegForValNum(0);
630     if ((RHSSrcReg == 0 || rep(RHSSrcReg) != LHS.reg)) {
631       // If RHS is not defined as a copy from the LHS, we can use simpler and
632       // faster checks to see if the live ranges are coalescable.  This joiner
633       // can't swap the LHS/RHS intervals though.
634       if (!MRegisterInfo::isPhysicalRegister(RHS.reg)) {
635         return SimpleJoin(LHS, RHS);
636       } else {
637         RHSValNoInfo = RHS.getValNumInfo(0);
638       }
639     } else {
640       // It was defined as a copy from the LHS, find out what value # it is.
641       unsigned ValInst = RHS.getDefForValNum(0);
642       RHSValID = LHS.getLiveRangeContaining(ValInst-1)->ValId;
643       RHSValNoInfo = LHS.getValNumInfo(RHSValID);
644       RHSVal0DefinedFromLHS = RHSValID;
645     }
646     
647     LHSValNoAssignments.resize(LHS.getNumValNums(), -1);
648     RHSValNoAssignments.resize(RHS.getNumValNums(), -1);
649     ValueNumberInfo.resize(LHS.getNumValNums());
650     
651     // Okay, *all* of the values in LHS that are defined as a copy from RHS
652     // should now get updated.
653     for (unsigned VN = 0, e = LHS.getNumValNums(); VN != e; ++VN) {
654       if (unsigned LHSSrcReg = LHS.getSrcRegForValNum(VN)) {
655         if (rep(LHSSrcReg) != RHS.reg) {
656           // If this is not a copy from the RHS, its value number will be
657           // unmodified by the coalescing.
658           ValueNumberInfo[VN] = LHS.getValNumInfo(VN);
659           LHSValNoAssignments[VN] = VN;
660         } else if (RHSValID == -1) {
661           // Otherwise, it is a copy from the RHS, and we don't already have a
662           // value# for it.  Keep the current value number, but remember it.
663           LHSValNoAssignments[VN] = RHSValID = VN;
664           ValueNumberInfo[VN] = RHSValNoInfo;
665           RHS.addKills(ValueNumberInfo[VN], LHS.getKillsForValNum(VN));
666         } else {
667           // Otherwise, use the specified value #.
668           LHSValNoAssignments[VN] = RHSValID;
669           if (VN != (unsigned)RHSValID)
670             ValueNumberInfo[VN].def = ~1U;  // Now this val# is dead.
671           else {
672             ValueNumberInfo[VN] = RHSValNoInfo;
673             RHS.addKills(ValueNumberInfo[VN], LHS.getKillsForValNum(VN));
674           }
675         }
676       } else {
677         ValueNumberInfo[VN] = LHS.getValNumInfo(VN);
678         LHSValNoAssignments[VN] = VN;
679       }
680     }
681     
682     assert(RHSValID != -1 && "Didn't find value #?");
683     RHSValNoAssignments[0] = RHSValID;
684     if (RHSVal0DefinedFromLHS != -1) {
685       int LHSValId = LHSValNoAssignments[RHSVal0DefinedFromLHS];
686       unsigned DefIdx = RHS.getDefForValNum(0);
687       LiveInterval::removeKill(ValueNumberInfo[LHSValId], DefIdx);
688       LHS.addKills(ValueNumberInfo[LHSValId], RHS.getKillsForValNum(0));
689     }
690   } else {
691     // Loop over the value numbers of the LHS, seeing if any are defined from
692     // the RHS.
693     LHSValsDefinedFromRHS.resize(LHS.getNumValNums(), -1);
694     for (unsigned VN = 0, e = LHS.getNumValNums(); VN != e; ++VN) {
695       unsigned ValSrcReg = LHS.getSrcRegForValNum(VN);
696       if (ValSrcReg == 0)  // Src not defined by a copy?
697         continue;
698       
699       // DstReg is known to be a register in the LHS interval.  If the src is
700       // from the RHS interval, we can use its value #.
701       if (rep(ValSrcReg) != RHS.reg)
702         continue;
703       
704       // Figure out the value # from the RHS.
705       unsigned ValInst = LHS.getDefForValNum(VN);
706       LHSValsDefinedFromRHS[VN] = RHS.getLiveRangeContaining(ValInst-1)->ValId;
707     }
708     
709     // Loop over the value numbers of the RHS, seeing if any are defined from
710     // the LHS.
711     RHSValsDefinedFromLHS.resize(RHS.getNumValNums(), -1);
712     for (unsigned VN = 0, e = RHS.getNumValNums(); VN != e; ++VN) {
713       unsigned ValSrcReg = RHS.getSrcRegForValNum(VN);
714       if (ValSrcReg == 0)  // Src not defined by a copy?
715         continue;
716       
717       // DstReg is known to be a register in the RHS interval.  If the src is
718       // from the LHS interval, we can use its value #.
719       if (rep(ValSrcReg) != LHS.reg)
720         continue;
721       
722       // Figure out the value # from the LHS.
723       unsigned ValInst = RHS.getDefForValNum(VN);
724       RHSValsDefinedFromLHS[VN] = LHS.getLiveRangeContaining(ValInst-1)->ValId;
725     }
726     
727     LHSValNoAssignments.resize(LHS.getNumValNums(), -1);
728     RHSValNoAssignments.resize(RHS.getNumValNums(), -1);
729     ValueNumberInfo.reserve(LHS.getNumValNums() + RHS.getNumValNums());
730     
731     for (unsigned VN = 0, e = LHS.getNumValNums(); VN != e; ++VN) {
732       if (LHSValNoAssignments[VN] >= 0 || LHS.getDefForValNum(VN) == ~1U) 
733         continue;
734       ComputeUltimateVN(VN, ValueNumberInfo,
735                         LHSValsDefinedFromRHS, RHSValsDefinedFromLHS,
736                         LHSValNoAssignments, RHSValNoAssignments, LHS, RHS);
737     }
738     for (unsigned VN = 0, e = RHS.getNumValNums(); VN != e; ++VN) {
739       if (RHSValNoAssignments[VN] >= 0 || RHS.getDefForValNum(VN) == ~1U)
740         continue;
741       // If this value number isn't a copy from the LHS, it's a new number.
742       if (RHSValsDefinedFromLHS[VN] == -1) {
743         ValueNumberInfo.push_back(RHS.getValNumInfo(VN));
744         RHSValNoAssignments[VN] = ValueNumberInfo.size()-1;
745         continue;
746       }
747       
748       ComputeUltimateVN(VN, ValueNumberInfo,
749                         RHSValsDefinedFromLHS, LHSValsDefinedFromRHS,
750                         RHSValNoAssignments, LHSValNoAssignments, RHS, LHS);
751     }
752   }
753   
754   // Armed with the mappings of LHS/RHS values to ultimate values, walk the
755   // interval lists to see if these intervals are coalescable.
756   LiveInterval::const_iterator I = LHS.begin();
757   LiveInterval::const_iterator IE = LHS.end();
758   LiveInterval::const_iterator J = RHS.begin();
759   LiveInterval::const_iterator JE = RHS.end();
760   
761   // Skip ahead until the first place of potential sharing.
762   if (I->start < J->start) {
763     I = std::upper_bound(I, IE, J->start);
764     if (I != LHS.begin()) --I;
765   } else if (J->start < I->start) {
766     J = std::upper_bound(J, JE, I->start);
767     if (J != RHS.begin()) --J;
768   }
769   
770   while (1) {
771     // Determine if these two live ranges overlap.
772     bool Overlaps;
773     if (I->start < J->start) {
774       Overlaps = I->end > J->start;
775     } else {
776       Overlaps = J->end > I->start;
777     }
778
779     // If so, check value # info to determine if they are really different.
780     if (Overlaps) {
781       // If the live range overlap will map to the same value number in the
782       // result liverange, we can still coalesce them.  If not, we can't.
783       if (LHSValNoAssignments[I->ValId] != RHSValNoAssignments[J->ValId])
784         return false;
785     }
786     
787     if (I->end < J->end) {
788       ++I;
789       if (I == IE) break;
790     } else {
791       ++J;
792       if (J == JE) break;
793     }
794   }
795
796   // Update kill info. Some live ranges are extended due to copy coalescing.
797   for (unsigned i = 0, e = RHSValsDefinedFromLHS.size(); i != e; ++i) {
798     int LHSValId = RHSValsDefinedFromLHS[i];
799     if (LHSValId == -1)
800       continue;
801     unsigned RHSValId = RHSValNoAssignments[i];
802     unsigned DefIdx = RHS.getDefForValNum(i);
803     LiveInterval::removeKill(ValueNumberInfo[RHSValId], DefIdx);
804     LHS.addKills(ValueNumberInfo[RHSValId], RHS.getKillsForValNum(i));
805   }
806   for (unsigned i = 0, e = LHSValsDefinedFromRHS.size(); i != e; ++i) {
807     int RHSValId = LHSValsDefinedFromRHS[i];
808     if (RHSValId == -1)
809       continue;
810     unsigned LHSValId = LHSValNoAssignments[i];
811     unsigned DefIdx = LHS.getDefForValNum(i);
812     LiveInterval::removeKill(ValueNumberInfo[LHSValId], DefIdx);
813     RHS.addKills(ValueNumberInfo[LHSValId], LHS.getKillsForValNum(i));
814   }
815
816   // If we get here, we know that we can coalesce the live ranges.  Ask the
817   // intervals to coalesce themselves now.
818   LHS.join(RHS, &LHSValNoAssignments[0], &RHSValNoAssignments[0],
819            ValueNumberInfo);
820   return true;
821 }
822
823 namespace {
824   // DepthMBBCompare - Comparison predicate that sort first based on the loop
825   // depth of the basic block (the unsigned), and then on the MBB number.
826   struct DepthMBBCompare {
827     typedef std::pair<unsigned, MachineBasicBlock*> DepthMBBPair;
828     bool operator()(const DepthMBBPair &LHS, const DepthMBBPair &RHS) const {
829       if (LHS.first > RHS.first) return true;   // Deeper loops first
830       return LHS.first == RHS.first &&
831         LHS.second->getNumber() < RHS.second->getNumber();
832     }
833   };
834 }
835
836 void SimpleRegisterCoalescing::CopyCoalesceInMBB(MachineBasicBlock *MBB,
837                                 std::vector<CopyRec> *TryAgain, bool PhysOnly) {
838   DOUT << ((Value*)MBB->getBasicBlock())->getName() << ":\n";
839   
840   for (MachineBasicBlock::iterator MII = MBB->begin(), E = MBB->end();
841        MII != E;) {
842     MachineInstr *Inst = MII++;
843     
844     // If this isn't a copy, we can't join intervals.
845     unsigned SrcReg, DstReg;
846     if (!tii_->isMoveInstr(*Inst, SrcReg, DstReg)) continue;
847     
848     if (TryAgain && !JoinCopy(Inst, SrcReg, DstReg, PhysOnly))
849       TryAgain->push_back(getCopyRec(Inst, SrcReg, DstReg));
850   }
851 }
852
853 void SimpleRegisterCoalescing::joinIntervals() {
854   DOUT << "********** JOINING INTERVALS ***********\n";
855
856   JoinedLIs.resize(li_->getNumIntervals());
857   JoinedLIs.reset();
858
859   std::vector<CopyRec> TryAgainList;
860   const LoopInfo &LI = getAnalysis<LoopInfo>();
861   if (LI.begin() == LI.end()) {
862     // If there are no loops in the function, join intervals in function order.
863     for (MachineFunction::iterator I = mf_->begin(), E = mf_->end();
864          I != E; ++I)
865       CopyCoalesceInMBB(I, &TryAgainList);
866   } else {
867     // Otherwise, join intervals in inner loops before other intervals.
868     // Unfortunately we can't just iterate over loop hierarchy here because
869     // there may be more MBB's than BB's.  Collect MBB's for sorting.
870
871     // Join intervals in the function prolog first. We want to join physical
872     // registers with virtual registers before the intervals got too long.
873     std::vector<std::pair<unsigned, MachineBasicBlock*> > MBBs;
874     for (MachineFunction::iterator I = mf_->begin(), E = mf_->end(); I != E;++I)
875       MBBs.push_back(std::make_pair(LI.getLoopDepth(I->getBasicBlock()), I));
876
877     // Sort by loop depth.
878     std::sort(MBBs.begin(), MBBs.end(), DepthMBBCompare());
879
880     // Finally, join intervals in loop nest order.
881     for (unsigned i = 0, e = MBBs.size(); i != e; ++i)
882       CopyCoalesceInMBB(MBBs[i].second, NULL, true);
883     for (unsigned i = 0, e = MBBs.size(); i != e; ++i)
884       CopyCoalesceInMBB(MBBs[i].second, &TryAgainList, false);
885   }
886   
887   // Joining intervals can allow other intervals to be joined.  Iteratively join
888   // until we make no progress.
889   bool ProgressMade = true;
890   while (ProgressMade) {
891     ProgressMade = false;
892
893     for (unsigned i = 0, e = TryAgainList.size(); i != e; ++i) {
894       CopyRec &TheCopy = TryAgainList[i];
895       if (TheCopy.MI &&
896           JoinCopy(TheCopy.MI, TheCopy.SrcReg, TheCopy.DstReg)) {
897         TheCopy.MI = 0;   // Mark this one as done.
898         ProgressMade = true;
899       }
900     }
901   }
902
903   // Some live range has been lengthened due to colaescing, eliminate the
904   // unnecessary kills.
905   int RegNum = JoinedLIs.find_first();
906   while (RegNum != -1) {
907     unsigned Reg = RegNum + MRegisterInfo::FirstVirtualRegister;
908     unsigned repReg = rep(Reg);
909     LiveInterval &LI = li_->getInterval(repReg);
910     LiveVariables::VarInfo& svi = lv_->getVarInfo(Reg);
911     for (unsigned i = 0, e = svi.Kills.size(); i != e; ++i) {
912       MachineInstr *Kill = svi.Kills[i];
913       // Suppose vr1 = op vr2, x
914       // and vr1 and vr2 are coalesced. vr2 should still be marked kill
915       // unless it is a two-address operand.
916       if (li_->isRemoved(Kill) || hasRegisterDef(Kill, repReg))
917         continue;
918       if (LI.liveAt(li_->getInstructionIndex(Kill) + InstrSlots::NUM))
919         unsetRegisterKill(Kill, repReg);
920     }
921     RegNum = JoinedLIs.find_next(RegNum);
922   }
923   
924   DOUT << "*** Register mapping ***\n";
925   for (int i = 0, e = r2rMap_.size(); i != e; ++i)
926     if (r2rMap_[i]) {
927       DOUT << "  reg " << i << " -> ";
928       DEBUG(printRegName(r2rMap_[i]));
929       DOUT << "\n";
930     }
931 }
932
933 /// Return true if the two specified registers belong to different register
934 /// classes.  The registers may be either phys or virt regs.
935 bool SimpleRegisterCoalescing::differingRegisterClasses(unsigned RegA,
936                                              unsigned RegB) const {
937
938   // Get the register classes for the first reg.
939   if (MRegisterInfo::isPhysicalRegister(RegA)) {
940     assert(MRegisterInfo::isVirtualRegister(RegB) &&
941            "Shouldn't consider two physregs!");
942     return !mf_->getSSARegMap()->getRegClass(RegB)->contains(RegA);
943   }
944
945   // Compare against the regclass for the second reg.
946   const TargetRegisterClass *RegClass = mf_->getSSARegMap()->getRegClass(RegA);
947   if (MRegisterInfo::isVirtualRegister(RegB))
948     return RegClass != mf_->getSSARegMap()->getRegClass(RegB);
949   else
950     return !RegClass->contains(RegB);
951 }
952
953 /// lastRegisterUse - Returns the last use of the specific register between
954 /// cycles Start and End. It also returns the use operand by reference. It
955 /// returns NULL if there are no uses.
956 MachineInstr *
957 SimpleRegisterCoalescing::lastRegisterUse(unsigned Start, unsigned End, unsigned Reg,
958                                MachineOperand *&MOU) {
959   int e = (End-1) / InstrSlots::NUM * InstrSlots::NUM;
960   int s = Start;
961   while (e >= s) {
962     // Skip deleted instructions
963     MachineInstr *MI = li_->getInstructionFromIndex(e);
964     while ((e - InstrSlots::NUM) >= s && !MI) {
965       e -= InstrSlots::NUM;
966       MI = li_->getInstructionFromIndex(e);
967     }
968     if (e < s || MI == NULL)
969       return NULL;
970
971     for (unsigned i = 0, NumOps = MI->getNumOperands(); i != NumOps; ++i) {
972       MachineOperand &MO = MI->getOperand(i);
973       if (MO.isReg() && MO.isUse() && MO.getReg() &&
974           mri_->regsOverlap(rep(MO.getReg()), Reg)) {
975         MOU = &MO;
976         return MI;
977       }
978     }
979
980     e -= InstrSlots::NUM;
981   }
982
983   return NULL;
984 }
985
986
987 /// findDefOperand - Returns the MachineOperand that is a def of the specific
988 /// register. It returns NULL if the def is not found.
989 MachineOperand *SimpleRegisterCoalescing::findDefOperand(MachineInstr *MI, unsigned Reg) {
990   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
991     MachineOperand &MO = MI->getOperand(i);
992     if (MO.isReg() && MO.isDef() &&
993         mri_->regsOverlap(rep(MO.getReg()), Reg))
994       return &MO;
995   }
996   return NULL;
997 }
998
999 /// unsetRegisterKill - Unset IsKill property of all uses of specific register
1000 /// of the specific instruction.
1001 void SimpleRegisterCoalescing::unsetRegisterKill(MachineInstr *MI, unsigned Reg) {
1002   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1003     MachineOperand &MO = MI->getOperand(i);
1004     if (MO.isReg() && MO.isKill() && MO.getReg() &&
1005         mri_->regsOverlap(rep(MO.getReg()), Reg))
1006       MO.unsetIsKill();
1007   }
1008 }
1009
1010 /// unsetRegisterKills - Unset IsKill property of all uses of specific register
1011 /// between cycles Start and End.
1012 void SimpleRegisterCoalescing::unsetRegisterKills(unsigned Start, unsigned End,
1013                                        unsigned Reg) {
1014   int e = (End-1) / InstrSlots::NUM * InstrSlots::NUM;
1015   int s = Start;
1016   while (e >= s) {
1017     // Skip deleted instructions
1018     MachineInstr *MI = li_->getInstructionFromIndex(e);
1019     while ((e - InstrSlots::NUM) >= s && !MI) {
1020       e -= InstrSlots::NUM;
1021       MI = li_->getInstructionFromIndex(e);
1022     }
1023     if (e < s || MI == NULL)
1024       return;
1025
1026     for (unsigned i = 0, NumOps = MI->getNumOperands(); i != NumOps; ++i) {
1027       MachineOperand &MO = MI->getOperand(i);
1028       if (MO.isReg() && MO.isKill() && MO.getReg() &&
1029           mri_->regsOverlap(rep(MO.getReg()), Reg)) {
1030         MO.unsetIsKill();
1031       }
1032     }
1033
1034     e -= InstrSlots::NUM;
1035   }
1036 }
1037
1038 /// hasRegisterDef - True if the instruction defines the specific register.
1039 ///
1040 bool SimpleRegisterCoalescing::hasRegisterDef(MachineInstr *MI, unsigned Reg) {
1041   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1042     MachineOperand &MO = MI->getOperand(i);
1043     if (MO.isReg() && MO.isDef() &&
1044         mri_->regsOverlap(rep(MO.getReg()), Reg))
1045       return true;
1046   }
1047   return false;
1048 }
1049
1050 void SimpleRegisterCoalescing::printRegName(unsigned reg) const {
1051   if (MRegisterInfo::isPhysicalRegister(reg))
1052     cerr << mri_->getName(reg);
1053   else
1054     cerr << "%reg" << reg;
1055 }
1056
1057 void SimpleRegisterCoalescing::releaseMemory() {
1058    r2rMap_.clear();
1059    JoinedLIs.clear();
1060 }
1061
1062 static bool isZeroLengthInterval(LiveInterval *li) {
1063   for (LiveInterval::Ranges::const_iterator
1064          i = li->ranges.begin(), e = li->ranges.end(); i != e; ++i)
1065     if (i->end - i->start > LiveIntervals::InstrSlots::NUM)
1066       return false;
1067   return true;
1068 }
1069
1070 bool SimpleRegisterCoalescing::runOnMachineFunction(MachineFunction &fn) {
1071   mf_ = &fn;
1072   tm_ = &fn.getTarget();
1073   mri_ = tm_->getRegisterInfo();
1074   tii_ = tm_->getInstrInfo();
1075   li_ = &getAnalysis<LiveIntervals>();
1076   lv_ = &getAnalysis<LiveVariables>();
1077
1078   DOUT << "********** SIMPLE REGISTER COALESCING **********\n"
1079        << "********** Function: "
1080        << ((Value*)mf_->getFunction())->getName() << '\n';
1081
1082   allocatableRegs_ = mri_->getAllocatableSet(fn);
1083   for (MRegisterInfo::regclass_iterator I = mri_->regclass_begin(),
1084          E = mri_->regclass_end(); I != E; ++I)
1085     allocatableRCRegs_.insert(std::make_pair(*I,mri_->getAllocatableSet(fn, *I)));
1086
1087   r2rMap_.grow(mf_->getSSARegMap()->getLastVirtReg());
1088
1089   // Join (coalesce) intervals if requested.
1090   if (EnableJoining) {
1091     joinIntervals();
1092     DOUT << "********** INTERVALS POST JOINING **********\n";
1093     for (LiveIntervals::iterator I = li_->begin(), E = li_->end(); I != E; ++I) {
1094       I->second.print(DOUT, mri_);
1095       DOUT << "\n";
1096     }
1097   }
1098
1099   // perform a final pass over the instructions and compute spill
1100   // weights, coalesce virtual registers and remove identity moves.
1101   const LoopInfo &loopInfo = getAnalysis<LoopInfo>();
1102
1103   for (MachineFunction::iterator mbbi = mf_->begin(), mbbe = mf_->end();
1104        mbbi != mbbe; ++mbbi) {
1105     MachineBasicBlock* mbb = mbbi;
1106     unsigned loopDepth = loopInfo.getLoopDepth(mbb->getBasicBlock());
1107
1108     for (MachineBasicBlock::iterator mii = mbb->begin(), mie = mbb->end();
1109          mii != mie; ) {
1110       // if the move will be an identity move delete it
1111       unsigned srcReg, dstReg, RegRep;
1112       if (tii_->isMoveInstr(*mii, srcReg, dstReg) &&
1113           (RegRep = rep(srcReg)) == rep(dstReg)) {
1114         // remove from def list
1115         LiveInterval &RegInt = li_->getOrCreateInterval(RegRep);
1116         MachineOperand *MO = mii->findRegisterDefOperand(dstReg);
1117         // If def of this move instruction is dead, remove its live range from
1118         // the dstination register's live interval.
1119         if (MO->isDead()) {
1120           unsigned MoveIdx = li_->getDefIndex(li_->getInstructionIndex(mii));
1121           LiveInterval::iterator MLR = RegInt.FindLiveRangeContaining(MoveIdx);
1122           RegInt.removeRange(MLR->start, MoveIdx+1);
1123           if (RegInt.empty())
1124             li_->removeInterval(RegRep);
1125         }
1126         li_->RemoveMachineInstrFromMaps(mii);
1127         mii = mbbi->erase(mii);
1128         ++numPeep;
1129       } else {
1130         SmallSet<unsigned, 4> UniqueUses;
1131         for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) {
1132           const MachineOperand &mop = mii->getOperand(i);
1133           if (mop.isRegister() && mop.getReg() &&
1134               MRegisterInfo::isVirtualRegister(mop.getReg())) {
1135             // replace register with representative register
1136             unsigned reg = rep(mop.getReg());
1137             mii->getOperand(i).setReg(reg);
1138
1139             // Multiple uses of reg by the same instruction. It should not
1140             // contribute to spill weight again.
1141             if (UniqueUses.count(reg) != 0)
1142               continue;
1143             LiveInterval &RegInt = li_->getInterval(reg);
1144             float w = (mop.isUse()+mop.isDef()) * powf(10.0F, (float)loopDepth);
1145             RegInt.weight += w;
1146             UniqueUses.insert(reg);
1147           }
1148         }
1149         ++mii;
1150       }
1151     }
1152   }
1153
1154   for (LiveIntervals::iterator I = li_->begin(), E = li_->end(); I != E; ++I) {
1155     LiveInterval &LI = I->second;
1156     if (MRegisterInfo::isVirtualRegister(LI.reg)) {
1157       // If the live interval length is essentially zero, i.e. in every live
1158       // range the use follows def immediately, it doesn't make sense to spill
1159       // it and hope it will be easier to allocate for this li.
1160       if (isZeroLengthInterval(&LI))
1161         LI.weight = HUGE_VALF;
1162
1163       // Slightly prefer live interval that has been assigned a preferred reg.
1164       if (LI.preference)
1165         LI.weight *= 1.01F;
1166
1167       // Divide the weight of the interval by its size.  This encourages 
1168       // spilling of intervals that are large and have few uses, and
1169       // discourages spilling of small intervals with many uses.
1170       LI.weight /= LI.getSize();
1171     }
1172   }
1173
1174   DEBUG(dump());
1175   return true;
1176 }
1177
1178 /// print - Implement the dump method.
1179 void SimpleRegisterCoalescing::print(std::ostream &O, const Module* m) const {
1180    li_->print(O, m);
1181 }