Use MachineInstr::readsWritesVirtualRegister to determine if a register is read.
[oota-llvm.git] / lib / CodeGen / LiveIntervalAnalysis.cpp
1 //===-- LiveIntervalAnalysis.cpp - Live Interval Analysis -----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the LiveInterval analysis pass which is used
11 // by the Linear Scan Register allocator. This pass linearizes the
12 // basic blocks of the function in DFS order and uses the
13 // LiveVariables pass to conservatively compute live intervals for
14 // each virtual and physical register.
15 //
16 //===----------------------------------------------------------------------===//
17
18 #define DEBUG_TYPE "liveintervals"
19 #include "llvm/CodeGen/LiveIntervalAnalysis.h"
20 #include "VirtRegMap.h"
21 #include "llvm/Value.h"
22 #include "llvm/Analysis/AliasAnalysis.h"
23 #include "llvm/CodeGen/LiveVariables.h"
24 #include "llvm/CodeGen/MachineFrameInfo.h"
25 #include "llvm/CodeGen/MachineInstr.h"
26 #include "llvm/CodeGen/MachineInstrBuilder.h"
27 #include "llvm/CodeGen/MachineLoopInfo.h"
28 #include "llvm/CodeGen/MachineMemOperand.h"
29 #include "llvm/CodeGen/MachineRegisterInfo.h"
30 #include "llvm/CodeGen/Passes.h"
31 #include "llvm/CodeGen/ProcessImplicitDefs.h"
32 #include "llvm/Target/TargetRegisterInfo.h"
33 #include "llvm/Target/TargetInstrInfo.h"
34 #include "llvm/Target/TargetMachine.h"
35 #include "llvm/Target/TargetOptions.h"
36 #include "llvm/Support/CommandLine.h"
37 #include "llvm/Support/Debug.h"
38 #include "llvm/Support/ErrorHandling.h"
39 #include "llvm/Support/raw_ostream.h"
40 #include "llvm/ADT/DepthFirstIterator.h"
41 #include "llvm/ADT/SmallSet.h"
42 #include "llvm/ADT/Statistic.h"
43 #include "llvm/ADT/STLExtras.h"
44 #include <algorithm>
45 #include <limits>
46 #include <cmath>
47 using namespace llvm;
48
49 // Hidden options for help debugging.
50 static cl::opt<bool> DisableReMat("disable-rematerialization", 
51                                   cl::init(false), cl::Hidden);
52
53 static cl::opt<bool> EnableFastSpilling("fast-spill",
54                                         cl::init(false), cl::Hidden);
55
56 STATISTIC(numIntervals , "Number of original intervals");
57 STATISTIC(numFolds     , "Number of loads/stores folded into instructions");
58 STATISTIC(numSplits    , "Number of intervals split");
59
60 char LiveIntervals::ID = 0;
61 static RegisterPass<LiveIntervals> X("liveintervals", "Live Interval Analysis");
62
63 void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {
64   AU.setPreservesCFG();
65   AU.addRequired<AliasAnalysis>();
66   AU.addPreserved<AliasAnalysis>();
67   AU.addPreserved<LiveVariables>();
68   AU.addRequired<LiveVariables>();
69   AU.addPreservedID(MachineLoopInfoID);
70   AU.addPreservedID(MachineDominatorsID);
71   
72   if (!StrongPHIElim) {
73     AU.addPreservedID(PHIEliminationID);
74     AU.addRequiredID(PHIEliminationID);
75   }
76   
77   AU.addRequiredID(TwoAddressInstructionPassID);
78   AU.addPreserved<ProcessImplicitDefs>();
79   AU.addRequired<ProcessImplicitDefs>();
80   AU.addPreserved<SlotIndexes>();
81   AU.addRequiredTransitive<SlotIndexes>();
82   MachineFunctionPass::getAnalysisUsage(AU);
83 }
84
85 void LiveIntervals::releaseMemory() {
86   // Free the live intervals themselves.
87   for (DenseMap<unsigned, LiveInterval*>::iterator I = r2iMap_.begin(),
88        E = r2iMap_.end(); I != E; ++I)
89     delete I->second;
90   
91   r2iMap_.clear();
92
93   // Release VNInfo memroy regions after all VNInfo objects are dtor'd.
94   VNInfoAllocator.DestroyAll();
95   while (!CloneMIs.empty()) {
96     MachineInstr *MI = CloneMIs.back();
97     CloneMIs.pop_back();
98     mf_->DeleteMachineInstr(MI);
99   }
100 }
101
102 /// runOnMachineFunction - Register allocate the whole function
103 ///
104 bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
105   mf_ = &fn;
106   mri_ = &mf_->getRegInfo();
107   tm_ = &fn.getTarget();
108   tri_ = tm_->getRegisterInfo();
109   tii_ = tm_->getInstrInfo();
110   aa_ = &getAnalysis<AliasAnalysis>();
111   lv_ = &getAnalysis<LiveVariables>();
112   indexes_ = &getAnalysis<SlotIndexes>();
113   allocatableRegs_ = tri_->getAllocatableSet(fn);
114
115   computeIntervals();
116
117   numIntervals += getNumIntervals();
118
119   DEBUG(dump());
120   return true;
121 }
122
123 /// print - Implement the dump method.
124 void LiveIntervals::print(raw_ostream &OS, const Module* ) const {
125   OS << "********** INTERVALS **********\n";
126   for (const_iterator I = begin(), E = end(); I != E; ++I) {
127     I->second->print(OS, tri_);
128     OS << "\n";
129   }
130
131   printInstrs(OS);
132 }
133
134 void LiveIntervals::printInstrs(raw_ostream &OS) const {
135   OS << "********** MACHINEINSTRS **********\n";
136
137   for (MachineFunction::iterator mbbi = mf_->begin(), mbbe = mf_->end();
138        mbbi != mbbe; ++mbbi) {
139     OS << "BB#" << mbbi->getNumber()
140        << ":\t\t# derived from " << mbbi->getName() << "\n";
141     for (MachineBasicBlock::iterator mii = mbbi->begin(),
142            mie = mbbi->end(); mii != mie; ++mii) {
143       if (mii->isDebugValue())
144         OS << "    \t" << *mii;
145       else
146         OS << getInstructionIndex(mii) << '\t' << *mii;
147     }
148   }
149 }
150
151 void LiveIntervals::dumpInstrs() const {
152   printInstrs(dbgs());
153 }
154
155 bool LiveIntervals::conflictsWithPhysReg(const LiveInterval &li,
156                                          VirtRegMap &vrm, unsigned reg) {
157   // We don't handle fancy stuff crossing basic block boundaries
158   if (li.ranges.size() != 1)
159     return true;
160   const LiveRange &range = li.ranges.front();
161   SlotIndex idx = range.start.getBaseIndex();
162   SlotIndex end = range.end.getPrevSlot().getBaseIndex().getNextIndex();
163
164   // Skip deleted instructions
165   MachineInstr *firstMI = getInstructionFromIndex(idx);
166   while (!firstMI && idx != end) {
167     idx = idx.getNextIndex();
168     firstMI = getInstructionFromIndex(idx);
169   }
170   if (!firstMI)
171     return false;
172
173   // Find last instruction in range
174   SlotIndex lastIdx = end.getPrevIndex();
175   MachineInstr *lastMI = getInstructionFromIndex(lastIdx);
176   while (!lastMI && lastIdx != idx) {
177     lastIdx = lastIdx.getPrevIndex();
178     lastMI = getInstructionFromIndex(lastIdx);
179   }
180   if (!lastMI)
181     return false;
182
183   // Range cannot cross basic block boundaries or terminators
184   MachineBasicBlock *MBB = firstMI->getParent();
185   if (MBB != lastMI->getParent() || lastMI->getDesc().isTerminator())
186     return true;
187
188   MachineBasicBlock::const_iterator E = lastMI;
189   ++E;
190   for (MachineBasicBlock::const_iterator I = firstMI; I != E; ++I) {
191     const MachineInstr &MI = *I;
192
193     // Allow copies to and from li.reg
194     unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
195     if (tii_->isMoveInstr(MI, SrcReg, DstReg, SrcSubReg, DstSubReg))
196       if (SrcReg == li.reg || DstReg == li.reg)
197         continue;
198
199     // Check for operands using reg
200     for (unsigned i = 0, e = MI.getNumOperands(); i != e;  ++i) {
201       const MachineOperand& mop = MI.getOperand(i);
202       if (!mop.isReg())
203         continue;
204       unsigned PhysReg = mop.getReg();
205       if (PhysReg == 0 || PhysReg == li.reg)
206         continue;
207       if (TargetRegisterInfo::isVirtualRegister(PhysReg)) {
208         if (!vrm.hasPhys(PhysReg))
209           continue;
210         PhysReg = vrm.getPhys(PhysReg);
211       }
212       if (PhysReg && tri_->regsOverlap(PhysReg, reg))
213         return true;
214     }
215   }
216
217   // No conflicts found.
218   return false;
219 }
220
221 /// conflictsWithSubPhysRegRef - Similar to conflictsWithPhysRegRef except
222 /// it checks for sub-register reference and it can check use as well.
223 bool LiveIntervals::conflictsWithSubPhysRegRef(LiveInterval &li,
224                                             unsigned Reg, bool CheckUse,
225                                   SmallPtrSet<MachineInstr*,32> &JoinedCopies) {
226   for (LiveInterval::Ranges::const_iterator
227          I = li.ranges.begin(), E = li.ranges.end(); I != E; ++I) {
228     for (SlotIndex index = I->start.getBaseIndex(),
229            end = I->end.getPrevSlot().getBaseIndex().getNextIndex();
230            index != end;
231            index = index.getNextIndex()) {
232       MachineInstr *MI = getInstructionFromIndex(index);
233       if (!MI)
234         continue;               // skip deleted instructions
235
236       if (JoinedCopies.count(MI))
237         continue;
238       for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
239         MachineOperand& MO = MI->getOperand(i);
240         if (!MO.isReg())
241           continue;
242         if (MO.isUse() && !CheckUse)
243           continue;
244         unsigned PhysReg = MO.getReg();
245         if (PhysReg == 0 || TargetRegisterInfo::isVirtualRegister(PhysReg))
246           continue;
247         if (tri_->isSubRegister(Reg, PhysReg))
248           return true;
249       }
250     }
251   }
252
253   return false;
254 }
255
256 #ifndef NDEBUG
257 static void printRegName(unsigned reg, const TargetRegisterInfo* tri_) {
258   if (TargetRegisterInfo::isPhysicalRegister(reg))
259     dbgs() << tri_->getName(reg);
260   else
261     dbgs() << "%reg" << reg;
262 }
263 #endif
264
265 static
266 bool MultipleDefsBySameMI(const MachineInstr &MI, unsigned MOIdx) {
267   unsigned Reg = MI.getOperand(MOIdx).getReg();
268   for (unsigned i = MOIdx+1, e = MI.getNumOperands(); i < e; ++i) {
269     const MachineOperand &MO = MI.getOperand(i);
270     if (!MO.isReg())
271       continue;
272     if (MO.getReg() == Reg && MO.isDef()) {
273       assert(MI.getOperand(MOIdx).getSubReg() != MO.getSubReg() &&
274              MI.getOperand(MOIdx).getSubReg() &&
275              MO.getSubReg());
276       return true;
277     }
278   }
279   return false;
280 }
281
282 /// isPartialRedef - Return true if the specified def at the specific index is
283 /// partially re-defining the specified live interval. A common case of this is
284 /// a definition of the sub-register. 
285 bool LiveIntervals::isPartialRedef(SlotIndex MIIdx, MachineOperand &MO,
286                                    LiveInterval &interval) {
287   if (!MO.getSubReg() || MO.isEarlyClobber())
288     return false;
289
290   SlotIndex RedefIndex = MIIdx.getDefIndex();
291   const LiveRange *OldLR =
292     interval.getLiveRangeContaining(RedefIndex.getUseIndex());
293   if (OldLR->valno->isDefAccurate()) {
294     MachineInstr *DefMI = getInstructionFromIndex(OldLR->valno->def);
295     return DefMI->findRegisterDefOperandIdx(interval.reg) != -1;
296   }
297   return false;
298 }
299
300 void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock *mbb,
301                                              MachineBasicBlock::iterator mi,
302                                              SlotIndex MIIdx,
303                                              MachineOperand& MO,
304                                              unsigned MOIdx,
305                                              LiveInterval &interval) {
306   DEBUG({
307       dbgs() << "\t\tregister: ";
308       printRegName(interval.reg, tri_);
309     });
310
311   // Virtual registers may be defined multiple times (due to phi
312   // elimination and 2-addr elimination).  Much of what we do only has to be
313   // done once for the vreg.  We use an empty interval to detect the first
314   // time we see a vreg.
315   LiveVariables::VarInfo& vi = lv_->getVarInfo(interval.reg);
316   if (interval.empty()) {
317     // Get the Idx of the defining instructions.
318     SlotIndex defIndex = MIIdx.getDefIndex();
319     // Earlyclobbers move back one, so that they overlap the live range
320     // of inputs.
321     if (MO.isEarlyClobber())
322       defIndex = MIIdx.getUseIndex();
323
324     // Make sure the first definition is not a partial redefinition. Add an
325     // <imp-def> of the full register.
326     if (MO.getSubReg())
327       mi->addRegisterDefined(interval.reg);
328
329     MachineInstr *CopyMI = NULL;
330     unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
331     if (mi->isExtractSubreg() || mi->isInsertSubreg() || mi->isSubregToReg() ||
332         tii_->isMoveInstr(*mi, SrcReg, DstReg, SrcSubReg, DstSubReg))
333       CopyMI = mi;
334
335     VNInfo *ValNo = interval.getNextValue(defIndex, CopyMI, true,
336                                           VNInfoAllocator);
337     assert(ValNo->id == 0 && "First value in interval is not 0?");
338
339     // Loop over all of the blocks that the vreg is defined in.  There are
340     // two cases we have to handle here.  The most common case is a vreg
341     // whose lifetime is contained within a basic block.  In this case there
342     // will be a single kill, in MBB, which comes after the definition.
343     if (vi.Kills.size() == 1 && vi.Kills[0]->getParent() == mbb) {
344       // FIXME: what about dead vars?
345       SlotIndex killIdx;
346       if (vi.Kills[0] != mi)
347         killIdx = getInstructionIndex(vi.Kills[0]).getDefIndex();
348       else
349         killIdx = defIndex.getStoreIndex();
350
351       // If the kill happens after the definition, we have an intra-block
352       // live range.
353       if (killIdx > defIndex) {
354         assert(vi.AliveBlocks.empty() &&
355                "Shouldn't be alive across any blocks!");
356         LiveRange LR(defIndex, killIdx, ValNo);
357         interval.addRange(LR);
358         DEBUG(dbgs() << " +" << LR << "\n");
359         ValNo->addKill(killIdx);
360         return;
361       }
362     }
363
364     // The other case we handle is when a virtual register lives to the end
365     // of the defining block, potentially live across some blocks, then is
366     // live into some number of blocks, but gets killed.  Start by adding a
367     // range that goes from this definition to the end of the defining block.
368     LiveRange NewLR(defIndex, getMBBEndIdx(mbb), ValNo);
369     DEBUG(dbgs() << " +" << NewLR);
370     interval.addRange(NewLR);
371
372     bool PHIJoin = lv_->isPHIJoin(interval.reg);
373
374     if (PHIJoin) {
375       // A phi join register is killed at the end of the MBB and revived as a new
376       // valno in the killing blocks.
377       assert(vi.AliveBlocks.empty() && "Phi join can't pass through blocks");
378       DEBUG(dbgs() << " phi-join");
379       ValNo->addKill(indexes_->getTerminatorGap(mbb));
380       ValNo->setHasPHIKill(true);
381     } else {
382       // Iterate over all of the blocks that the variable is completely
383       // live in, adding [insrtIndex(begin), instrIndex(end)+4) to the
384       // live interval.
385       for (SparseBitVector<>::iterator I = vi.AliveBlocks.begin(),
386                E = vi.AliveBlocks.end(); I != E; ++I) {
387         MachineBasicBlock *aliveBlock = mf_->getBlockNumbered(*I);
388         LiveRange LR(getMBBStartIdx(aliveBlock), getMBBEndIdx(aliveBlock), ValNo);
389         interval.addRange(LR);
390         DEBUG(dbgs() << " +" << LR);
391       }
392     }
393
394     // Finally, this virtual register is live from the start of any killing
395     // block to the 'use' slot of the killing instruction.
396     for (unsigned i = 0, e = vi.Kills.size(); i != e; ++i) {
397       MachineInstr *Kill = vi.Kills[i];
398       SlotIndex Start = getMBBStartIdx(Kill->getParent());
399       SlotIndex killIdx = getInstructionIndex(Kill).getDefIndex();
400
401       // Create interval with one of a NEW value number.  Note that this value
402       // number isn't actually defined by an instruction, weird huh? :)
403       if (PHIJoin) {
404         ValNo = interval.getNextValue(SlotIndex(Start, true), 0, false,
405                                       VNInfoAllocator);
406         ValNo->setIsPHIDef(true);
407       }
408       LiveRange LR(Start, killIdx, ValNo);
409       interval.addRange(LR);
410       ValNo->addKill(killIdx);
411       DEBUG(dbgs() << " +" << LR);
412     }
413
414   } else {
415     if (MultipleDefsBySameMI(*mi, MOIdx))
416       // Multiple defs of the same virtual register by the same instruction.
417       // e.g. %reg1031:5<def>, %reg1031:6<def> = VLD1q16 %reg1024<kill>, ...
418       // This is likely due to elimination of REG_SEQUENCE instructions. Return
419       // here since there is nothing to do.
420       return;
421
422     // If this is the second time we see a virtual register definition, it
423     // must be due to phi elimination or two addr elimination.  If this is
424     // the result of two address elimination, then the vreg is one of the
425     // def-and-use register operand.
426
427     // It may also be partial redef like this:
428     // 80       %reg1041:6<def> = VSHRNv4i16 %reg1034<kill>, 12, pred:14, pred:%reg0
429     // 120      %reg1041:5<def> = VSHRNv4i16 %reg1039<kill>, 12, pred:14, pred:%reg0
430     bool PartReDef = isPartialRedef(MIIdx, MO, interval);
431     if (PartReDef || mi->isRegTiedToUseOperand(MOIdx)) {
432       // If this is a two-address definition, then we have already processed
433       // the live range.  The only problem is that we didn't realize there
434       // are actually two values in the live interval.  Because of this we
435       // need to take the LiveRegion that defines this register and split it
436       // into two values.
437       // Two-address vregs should always only be redefined once.  This means
438       // that at this point, there should be exactly one value number in it.
439       assert((PartReDef || interval.containsOneValue()) &&
440              "Unexpected 2-addr liveint!");
441       SlotIndex DefIndex = interval.getValNumInfo(0)->def.getDefIndex();
442       SlotIndex RedefIndex = MIIdx.getDefIndex();
443       if (MO.isEarlyClobber())
444         RedefIndex = MIIdx.getUseIndex();
445
446       const LiveRange *OldLR =
447         interval.getLiveRangeContaining(RedefIndex.getUseIndex());
448       VNInfo *OldValNo = OldLR->valno;
449
450       // Delete the initial value, which should be short and continuous,
451       // because the 2-addr copy must be in the same MBB as the redef.
452       interval.removeRange(DefIndex, RedefIndex);
453
454       // The new value number (#1) is defined by the instruction we claimed
455       // defined value #0.
456       VNInfo *ValNo = interval.getNextValue(OldValNo->def, OldValNo->getCopy(),
457                                             false, // update at *
458                                             VNInfoAllocator);
459       ValNo->setFlags(OldValNo->getFlags()); // * <- updating here
460
461       // Value#0 is now defined by the 2-addr instruction.
462       OldValNo->def  = RedefIndex;
463       OldValNo->setCopy(0);
464
465       // A re-def may be a copy. e.g. %reg1030:6<def> = VMOVD %reg1026, ...
466       unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
467       if (PartReDef &&
468           tii_->isMoveInstr(*mi, SrcReg, DstReg, SrcSubReg, DstSubReg))
469         OldValNo->setCopy(&*mi);
470       
471       // Add the new live interval which replaces the range for the input copy.
472       LiveRange LR(DefIndex, RedefIndex, ValNo);
473       DEBUG(dbgs() << " replace range with " << LR);
474       interval.addRange(LR);
475       ValNo->addKill(RedefIndex);
476
477       // If this redefinition is dead, we need to add a dummy unit live
478       // range covering the def slot.
479       if (MO.isDead())
480         interval.addRange(LiveRange(RedefIndex, RedefIndex.getStoreIndex(),
481                                     OldValNo));
482
483       DEBUG({
484           dbgs() << " RESULT: ";
485           interval.print(dbgs(), tri_);
486         });
487     } else if (lv_->isPHIJoin(interval.reg)) {
488       // In the case of PHI elimination, each variable definition is only
489       // live until the end of the block.  We've already taken care of the
490       // rest of the live range.
491
492       SlotIndex defIndex = MIIdx.getDefIndex();
493       if (MO.isEarlyClobber())
494         defIndex = MIIdx.getUseIndex();
495
496       VNInfo *ValNo;
497       MachineInstr *CopyMI = NULL;
498       unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
499       if (mi->isExtractSubreg() || mi->isInsertSubreg() || mi->isSubregToReg()||
500           tii_->isMoveInstr(*mi, SrcReg, DstReg, SrcSubReg, DstSubReg))
501         CopyMI = mi;
502       ValNo = interval.getNextValue(defIndex, CopyMI, true, VNInfoAllocator);
503       
504       SlotIndex killIndex = getMBBEndIdx(mbb);
505       LiveRange LR(defIndex, killIndex, ValNo);
506       interval.addRange(LR);
507       ValNo->addKill(indexes_->getTerminatorGap(mbb));
508       ValNo->setHasPHIKill(true);
509       DEBUG(dbgs() << " phi-join +" << LR);
510     } else {
511       llvm_unreachable("Multiply defined register");
512     }
513   }
514
515   DEBUG(dbgs() << '\n');
516 }
517
518 void LiveIntervals::handlePhysicalRegisterDef(MachineBasicBlock *MBB,
519                                               MachineBasicBlock::iterator mi,
520                                               SlotIndex MIIdx,
521                                               MachineOperand& MO,
522                                               LiveInterval &interval,
523                                               MachineInstr *CopyMI) {
524   // A physical register cannot be live across basic block, so its
525   // lifetime must end somewhere in its defining basic block.
526   DEBUG({
527       dbgs() << "\t\tregister: ";
528       printRegName(interval.reg, tri_);
529     });
530
531   SlotIndex baseIndex = MIIdx;
532   SlotIndex start = baseIndex.getDefIndex();
533   // Earlyclobbers move back one.
534   if (MO.isEarlyClobber())
535     start = MIIdx.getUseIndex();
536   SlotIndex end = start;
537
538   // If it is not used after definition, it is considered dead at
539   // the instruction defining it. Hence its interval is:
540   // [defSlot(def), defSlot(def)+1)
541   // For earlyclobbers, the defSlot was pushed back one; the extra
542   // advance below compensates.
543   if (MO.isDead()) {
544     DEBUG(dbgs() << " dead");
545     end = start.getStoreIndex();
546     goto exit;
547   }
548
549   // If it is not dead on definition, it must be killed by a
550   // subsequent instruction. Hence its interval is:
551   // [defSlot(def), useSlot(kill)+1)
552   baseIndex = baseIndex.getNextIndex();
553   while (++mi != MBB->end()) {
554
555     if (mi->isDebugValue())
556       continue;
557     if (getInstructionFromIndex(baseIndex) == 0)
558       baseIndex = indexes_->getNextNonNullIndex(baseIndex);
559
560     if (mi->killsRegister(interval.reg, tri_)) {
561       DEBUG(dbgs() << " killed");
562       end = baseIndex.getDefIndex();
563       goto exit;
564     } else {
565       int DefIdx = mi->findRegisterDefOperandIdx(interval.reg, false, tri_);
566       if (DefIdx != -1) {
567         if (mi->isRegTiedToUseOperand(DefIdx)) {
568           // Two-address instruction.
569           end = baseIndex.getDefIndex();
570         } else {
571           // Another instruction redefines the register before it is ever read.
572           // Then the register is essentially dead at the instruction that
573           // defines it. Hence its interval is:
574           // [defSlot(def), defSlot(def)+1)
575           DEBUG(dbgs() << " dead");
576           end = start.getStoreIndex();
577         }
578         goto exit;
579       }
580     }
581     
582     baseIndex = baseIndex.getNextIndex();
583   }
584   
585   // The only case we should have a dead physreg here without a killing or
586   // instruction where we know it's dead is if it is live-in to the function
587   // and never used. Another possible case is the implicit use of the
588   // physical register has been deleted by two-address pass.
589   end = start.getStoreIndex();
590
591 exit:
592   assert(start < end && "did not find end of interval?");
593
594   // Already exists? Extend old live interval.
595   LiveInterval::iterator OldLR = interval.FindLiveRangeContaining(start);
596   bool Extend = OldLR != interval.end();
597   VNInfo *ValNo = Extend
598     ? OldLR->valno : interval.getNextValue(start, CopyMI, true, VNInfoAllocator);
599   if (MO.isEarlyClobber() && Extend)
600     ValNo->setHasRedefByEC(true);
601   LiveRange LR(start, end, ValNo);
602   interval.addRange(LR);
603   LR.valno->addKill(end);
604   DEBUG(dbgs() << " +" << LR << '\n');
605 }
606
607 void LiveIntervals::handleRegisterDef(MachineBasicBlock *MBB,
608                                       MachineBasicBlock::iterator MI,
609                                       SlotIndex MIIdx,
610                                       MachineOperand& MO,
611                                       unsigned MOIdx) {
612   if (TargetRegisterInfo::isVirtualRegister(MO.getReg()))
613     handleVirtualRegisterDef(MBB, MI, MIIdx, MO, MOIdx,
614                              getOrCreateInterval(MO.getReg()));
615   else if (allocatableRegs_[MO.getReg()]) {
616     MachineInstr *CopyMI = NULL;
617     unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
618     if (MI->isExtractSubreg() || MI->isInsertSubreg() || MI->isSubregToReg() ||
619         tii_->isMoveInstr(*MI, SrcReg, DstReg, SrcSubReg, DstSubReg))
620       CopyMI = MI;
621     handlePhysicalRegisterDef(MBB, MI, MIIdx, MO,
622                               getOrCreateInterval(MO.getReg()), CopyMI);
623     // Def of a register also defines its sub-registers.
624     for (const unsigned* AS = tri_->getSubRegisters(MO.getReg()); *AS; ++AS)
625       // If MI also modifies the sub-register explicitly, avoid processing it
626       // more than once. Do not pass in TRI here so it checks for exact match.
627       if (!MI->modifiesRegister(*AS))
628         handlePhysicalRegisterDef(MBB, MI, MIIdx, MO,
629                                   getOrCreateInterval(*AS), 0);
630   }
631 }
632
633 void LiveIntervals::handleLiveInRegister(MachineBasicBlock *MBB,
634                                          SlotIndex MIIdx,
635                                          LiveInterval &interval, bool isAlias) {
636   DEBUG({
637       dbgs() << "\t\tlivein register: ";
638       printRegName(interval.reg, tri_);
639     });
640
641   // Look for kills, if it reaches a def before it's killed, then it shouldn't
642   // be considered a livein.
643   MachineBasicBlock::iterator mi = MBB->begin();
644   MachineBasicBlock::iterator E = MBB->end();
645   // Skip over DBG_VALUE at the start of the MBB.
646   if (mi != E && mi->isDebugValue()) {
647     while (++mi != E && mi->isDebugValue())
648       ;
649     if (mi == E)
650       // MBB is empty except for DBG_VALUE's.
651       return;
652   }
653
654   SlotIndex baseIndex = MIIdx;
655   SlotIndex start = baseIndex;
656   if (getInstructionFromIndex(baseIndex) == 0)
657     baseIndex = indexes_->getNextNonNullIndex(baseIndex);
658
659   SlotIndex end = baseIndex;
660   bool SeenDefUse = false;
661
662   while (mi != E) {
663     if (mi->killsRegister(interval.reg, tri_)) {
664       DEBUG(dbgs() << " killed");
665       end = baseIndex.getDefIndex();
666       SeenDefUse = true;
667       break;
668     } else if (mi->modifiesRegister(interval.reg, tri_)) {
669       // Another instruction redefines the register before it is ever read.
670       // Then the register is essentially dead at the instruction that defines
671       // it. Hence its interval is:
672       // [defSlot(def), defSlot(def)+1)
673       DEBUG(dbgs() << " dead");
674       end = start.getStoreIndex();
675       SeenDefUse = true;
676       break;
677     }
678
679     while (++mi != E && mi->isDebugValue())
680       // Skip over DBG_VALUE.
681       ;
682     if (mi != E)
683       baseIndex = indexes_->getNextNonNullIndex(baseIndex);
684   }
685
686   // Live-in register might not be used at all.
687   if (!SeenDefUse) {
688     if (isAlias) {
689       DEBUG(dbgs() << " dead");
690       end = MIIdx.getStoreIndex();
691     } else {
692       DEBUG(dbgs() << " live through");
693       end = baseIndex;
694     }
695   }
696
697   VNInfo *vni =
698     interval.getNextValue(SlotIndex(getMBBStartIdx(MBB), true),
699                           0, false, VNInfoAllocator);
700   vni->setIsPHIDef(true);
701   LiveRange LR(start, end, vni);
702
703   interval.addRange(LR);
704   LR.valno->addKill(end);
705   DEBUG(dbgs() << " +" << LR << '\n');
706 }
707
708 /// computeIntervals - computes the live intervals for virtual
709 /// registers. for some ordering of the machine instructions [1,N] a
710 /// live interval is an interval [i, j) where 1 <= i <= j < N for
711 /// which a variable is live
712 void LiveIntervals::computeIntervals() { 
713   DEBUG(dbgs() << "********** COMPUTING LIVE INTERVALS **********\n"
714                << "********** Function: "
715                << ((Value*)mf_->getFunction())->getName() << '\n');
716
717   SmallVector<unsigned, 8> UndefUses;
718   for (MachineFunction::iterator MBBI = mf_->begin(), E = mf_->end();
719        MBBI != E; ++MBBI) {
720     MachineBasicBlock *MBB = MBBI;
721     if (MBB->empty())
722       continue;
723
724     // Track the index of the current machine instr.
725     SlotIndex MIIndex = getMBBStartIdx(MBB);
726     DEBUG(dbgs() << "BB#" << MBB->getNumber()
727           << ":\t\t# derived from " << MBB->getName() << "\n");
728
729     // Create intervals for live-ins to this BB first.
730     for (MachineBasicBlock::livein_iterator LI = MBB->livein_begin(),
731            LE = MBB->livein_end(); LI != LE; ++LI) {
732       handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*LI));
733       // Multiple live-ins can alias the same register.
734       for (const unsigned* AS = tri_->getSubRegisters(*LI); *AS; ++AS)
735         if (!hasInterval(*AS))
736           handleLiveInRegister(MBB, MIIndex, getOrCreateInterval(*AS),
737                                true);
738     }
739     
740     // Skip over empty initial indices.
741     if (getInstructionFromIndex(MIIndex) == 0)
742       MIIndex = indexes_->getNextNonNullIndex(MIIndex);
743     
744     for (MachineBasicBlock::iterator MI = MBB->begin(), miEnd = MBB->end();
745          MI != miEnd; ++MI) {
746       DEBUG(dbgs() << MIIndex << "\t" << *MI);
747       if (MI->isDebugValue())
748         continue;
749
750       // Handle defs.
751       for (int i = MI->getNumOperands() - 1; i >= 0; --i) {
752         MachineOperand &MO = MI->getOperand(i);
753         if (!MO.isReg() || !MO.getReg())
754           continue;
755
756         // handle register defs - build intervals
757         if (MO.isDef())
758           handleRegisterDef(MBB, MI, MIIndex, MO, i);
759         else if (MO.isUndef())
760           UndefUses.push_back(MO.getReg());
761       }
762       
763       // Move to the next instr slot.
764       MIIndex = indexes_->getNextNonNullIndex(MIIndex);
765     }
766   }
767
768   // Create empty intervals for registers defined by implicit_def's (except
769   // for those implicit_def that define values which are liveout of their
770   // blocks.
771   for (unsigned i = 0, e = UndefUses.size(); i != e; ++i) {
772     unsigned UndefReg = UndefUses[i];
773     (void)getOrCreateInterval(UndefReg);
774   }
775 }
776
777 LiveInterval* LiveIntervals::createInterval(unsigned reg) {
778   float Weight = TargetRegisterInfo::isPhysicalRegister(reg) ? HUGE_VALF : 0.0F;
779   return new LiveInterval(reg, Weight);
780 }
781
782 /// dupInterval - Duplicate a live interval. The caller is responsible for
783 /// managing the allocated memory.
784 LiveInterval* LiveIntervals::dupInterval(LiveInterval *li) {
785   LiveInterval *NewLI = createInterval(li->reg);
786   NewLI->Copy(*li, mri_, getVNInfoAllocator());
787   return NewLI;
788 }
789
790 /// getVNInfoSourceReg - Helper function that parses the specified VNInfo
791 /// copy field and returns the source register that defines it.
792 unsigned LiveIntervals::getVNInfoSourceReg(const VNInfo *VNI) const {
793   if (!VNI->getCopy())
794     return 0;
795
796   if (VNI->getCopy()->isExtractSubreg()) {
797     // If it's extracting out of a physical register, return the sub-register.
798     unsigned Reg = VNI->getCopy()->getOperand(1).getReg();
799     if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
800       unsigned SrcSubReg = VNI->getCopy()->getOperand(2).getImm();
801       unsigned DstSubReg = VNI->getCopy()->getOperand(0).getSubReg();
802       if (SrcSubReg == DstSubReg)
803         // %reg1034:3<def> = EXTRACT_SUBREG %EDX, 3
804         // reg1034 can still be coalesced to EDX.
805         return Reg;
806       assert(DstSubReg == 0);
807       Reg = tri_->getSubReg(Reg, VNI->getCopy()->getOperand(2).getImm());
808     }
809     return Reg;
810   } else if (VNI->getCopy()->isInsertSubreg() ||
811              VNI->getCopy()->isSubregToReg())
812     return VNI->getCopy()->getOperand(2).getReg();
813
814   unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
815   if (tii_->isMoveInstr(*VNI->getCopy(), SrcReg, DstReg, SrcSubReg, DstSubReg))
816     return SrcReg;
817   llvm_unreachable("Unrecognized copy instruction!");
818   return 0;
819 }
820
821 //===----------------------------------------------------------------------===//
822 // Register allocator hooks.
823 //
824
825 /// getReMatImplicitUse - If the remat definition MI has one (for now, we only
826 /// allow one) virtual register operand, then its uses are implicitly using
827 /// the register. Returns the virtual register.
828 unsigned LiveIntervals::getReMatImplicitUse(const LiveInterval &li,
829                                             MachineInstr *MI) const {
830   unsigned RegOp = 0;
831   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
832     MachineOperand &MO = MI->getOperand(i);
833     if (!MO.isReg() || !MO.isUse())
834       continue;
835     unsigned Reg = MO.getReg();
836     if (Reg == 0 || Reg == li.reg)
837       continue;
838     
839     if (TargetRegisterInfo::isPhysicalRegister(Reg) &&
840         !allocatableRegs_[Reg])
841       continue;
842     // FIXME: For now, only remat MI with at most one register operand.
843     assert(!RegOp &&
844            "Can't rematerialize instruction with multiple register operand!");
845     RegOp = MO.getReg();
846 #ifndef NDEBUG
847     break;
848 #endif
849   }
850   return RegOp;
851 }
852
853 /// isValNoAvailableAt - Return true if the val# of the specified interval
854 /// which reaches the given instruction also reaches the specified use index.
855 bool LiveIntervals::isValNoAvailableAt(const LiveInterval &li, MachineInstr *MI,
856                                        SlotIndex UseIdx) const {
857   SlotIndex Index = getInstructionIndex(MI);  
858   VNInfo *ValNo = li.FindLiveRangeContaining(Index)->valno;
859   LiveInterval::const_iterator UI = li.FindLiveRangeContaining(UseIdx);
860   return UI != li.end() && UI->valno == ValNo;
861 }
862
863 /// isReMaterializable - Returns true if the definition MI of the specified
864 /// val# of the specified interval is re-materializable.
865 bool LiveIntervals::isReMaterializable(const LiveInterval &li,
866                                        const VNInfo *ValNo, MachineInstr *MI,
867                                        SmallVectorImpl<LiveInterval*> &SpillIs,
868                                        bool &isLoad) {
869   if (DisableReMat)
870     return false;
871
872   if (!tii_->isTriviallyReMaterializable(MI, aa_))
873     return false;
874
875   // Target-specific code can mark an instruction as being rematerializable
876   // if it has one virtual reg use, though it had better be something like
877   // a PIC base register which is likely to be live everywhere.
878   unsigned ImpUse = getReMatImplicitUse(li, MI);
879   if (ImpUse) {
880     const LiveInterval &ImpLi = getInterval(ImpUse);
881     for (MachineRegisterInfo::use_nodbg_iterator
882            ri = mri_->use_nodbg_begin(li.reg), re = mri_->use_nodbg_end();
883          ri != re; ++ri) {
884       MachineInstr *UseMI = &*ri;
885       SlotIndex UseIdx = getInstructionIndex(UseMI);
886       if (li.FindLiveRangeContaining(UseIdx)->valno != ValNo)
887         continue;
888       if (!isValNoAvailableAt(ImpLi, MI, UseIdx))
889         return false;
890     }
891
892     // If a register operand of the re-materialized instruction is going to
893     // be spilled next, then it's not legal to re-materialize this instruction.
894     for (unsigned i = 0, e = SpillIs.size(); i != e; ++i)
895       if (ImpUse == SpillIs[i]->reg)
896         return false;
897   }
898   return true;
899 }
900
901 /// isReMaterializable - Returns true if the definition MI of the specified
902 /// val# of the specified interval is re-materializable.
903 bool LiveIntervals::isReMaterializable(const LiveInterval &li,
904                                        const VNInfo *ValNo, MachineInstr *MI) {
905   SmallVector<LiveInterval*, 4> Dummy1;
906   bool Dummy2;
907   return isReMaterializable(li, ValNo, MI, Dummy1, Dummy2);
908 }
909
910 /// isReMaterializable - Returns true if every definition of MI of every
911 /// val# of the specified interval is re-materializable.
912 bool LiveIntervals::isReMaterializable(const LiveInterval &li,
913                                        SmallVectorImpl<LiveInterval*> &SpillIs,
914                                        bool &isLoad) {
915   isLoad = false;
916   for (LiveInterval::const_vni_iterator i = li.vni_begin(), e = li.vni_end();
917        i != e; ++i) {
918     const VNInfo *VNI = *i;
919     if (VNI->isUnused())
920       continue; // Dead val#.
921     // Is the def for the val# rematerializable?
922     if (!VNI->isDefAccurate())
923       return false;
924     MachineInstr *ReMatDefMI = getInstructionFromIndex(VNI->def);
925     bool DefIsLoad = false;
926     if (!ReMatDefMI ||
927         !isReMaterializable(li, VNI, ReMatDefMI, SpillIs, DefIsLoad))
928       return false;
929     isLoad |= DefIsLoad;
930   }
931   return true;
932 }
933
934 /// FilterFoldedOps - Filter out two-address use operands. Return
935 /// true if it finds any issue with the operands that ought to prevent
936 /// folding.
937 static bool FilterFoldedOps(MachineInstr *MI,
938                             SmallVector<unsigned, 2> &Ops,
939                             unsigned &MRInfo,
940                             SmallVector<unsigned, 2> &FoldOps) {
941   MRInfo = 0;
942   for (unsigned i = 0, e = Ops.size(); i != e; ++i) {
943     unsigned OpIdx = Ops[i];
944     MachineOperand &MO = MI->getOperand(OpIdx);
945     // FIXME: fold subreg use.
946     if (MO.getSubReg())
947       return true;
948     if (MO.isDef())
949       MRInfo |= (unsigned)VirtRegMap::isMod;
950     else {
951       // Filter out two-address use operand(s).
952       if (MI->isRegTiedToDefOperand(OpIdx)) {
953         MRInfo = VirtRegMap::isModRef;
954         continue;
955       }
956       MRInfo |= (unsigned)VirtRegMap::isRef;
957     }
958     FoldOps.push_back(OpIdx);
959   }
960   return false;
961 }
962                            
963
964 /// tryFoldMemoryOperand - Attempts to fold either a spill / restore from
965 /// slot / to reg or any rematerialized load into ith operand of specified
966 /// MI. If it is successul, MI is updated with the newly created MI and
967 /// returns true.
968 bool LiveIntervals::tryFoldMemoryOperand(MachineInstr* &MI,
969                                          VirtRegMap &vrm, MachineInstr *DefMI,
970                                          SlotIndex InstrIdx,
971                                          SmallVector<unsigned, 2> &Ops,
972                                          bool isSS, int Slot, unsigned Reg) {
973   // If it is an implicit def instruction, just delete it.
974   if (MI->isImplicitDef()) {
975     RemoveMachineInstrFromMaps(MI);
976     vrm.RemoveMachineInstrFromMaps(MI);
977     MI->eraseFromParent();
978     ++numFolds;
979     return true;
980   }
981
982   // Filter the list of operand indexes that are to be folded. Abort if
983   // any operand will prevent folding.
984   unsigned MRInfo = 0;
985   SmallVector<unsigned, 2> FoldOps;
986   if (FilterFoldedOps(MI, Ops, MRInfo, FoldOps))
987     return false;
988
989   // The only time it's safe to fold into a two address instruction is when
990   // it's folding reload and spill from / into a spill stack slot.
991   if (DefMI && (MRInfo & VirtRegMap::isMod))
992     return false;
993
994   MachineInstr *fmi = isSS ? tii_->foldMemoryOperand(*mf_, MI, FoldOps, Slot)
995                            : tii_->foldMemoryOperand(*mf_, MI, FoldOps, DefMI);
996   if (fmi) {
997     // Remember this instruction uses the spill slot.
998     if (isSS) vrm.addSpillSlotUse(Slot, fmi);
999
1000     // Attempt to fold the memory reference into the instruction. If
1001     // we can do this, we don't need to insert spill code.
1002     MachineBasicBlock &MBB = *MI->getParent();
1003     if (isSS && !mf_->getFrameInfo()->isImmutableObjectIndex(Slot))
1004       vrm.virtFolded(Reg, MI, fmi, (VirtRegMap::ModRef)MRInfo);
1005     vrm.transferSpillPts(MI, fmi);
1006     vrm.transferRestorePts(MI, fmi);
1007     vrm.transferEmergencySpills(MI, fmi);
1008     ReplaceMachineInstrInMaps(MI, fmi);
1009     MI = MBB.insert(MBB.erase(MI), fmi);
1010     ++numFolds;
1011     return true;
1012   }
1013   return false;
1014 }
1015
1016 /// canFoldMemoryOperand - Returns true if the specified load / store
1017 /// folding is possible.
1018 bool LiveIntervals::canFoldMemoryOperand(MachineInstr *MI,
1019                                          SmallVector<unsigned, 2> &Ops,
1020                                          bool ReMat) const {
1021   // Filter the list of operand indexes that are to be folded. Abort if
1022   // any operand will prevent folding.
1023   unsigned MRInfo = 0;
1024   SmallVector<unsigned, 2> FoldOps;
1025   if (FilterFoldedOps(MI, Ops, MRInfo, FoldOps))
1026     return false;
1027
1028   // It's only legal to remat for a use, not a def.
1029   if (ReMat && (MRInfo & VirtRegMap::isMod))
1030     return false;
1031
1032   return tii_->canFoldMemoryOperand(MI, FoldOps);
1033 }
1034
1035 bool LiveIntervals::intervalIsInOneMBB(const LiveInterval &li) const {
1036   LiveInterval::Ranges::const_iterator itr = li.ranges.begin();
1037
1038   MachineBasicBlock *mbb =  indexes_->getMBBCoveringRange(itr->start, itr->end);
1039
1040   if (mbb == 0)
1041     return false;
1042
1043   for (++itr; itr != li.ranges.end(); ++itr) {
1044     MachineBasicBlock *mbb2 =
1045       indexes_->getMBBCoveringRange(itr->start, itr->end);
1046
1047     if (mbb2 != mbb)
1048       return false;
1049   }
1050
1051   return true;
1052 }
1053
1054 /// rewriteImplicitOps - Rewrite implicit use operands of MI (i.e. uses of
1055 /// interval on to-be re-materialized operands of MI) with new register.
1056 void LiveIntervals::rewriteImplicitOps(const LiveInterval &li,
1057                                        MachineInstr *MI, unsigned NewVReg,
1058                                        VirtRegMap &vrm) {
1059   // There is an implicit use. That means one of the other operand is
1060   // being remat'ed and the remat'ed instruction has li.reg as an
1061   // use operand. Make sure we rewrite that as well.
1062   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1063     MachineOperand &MO = MI->getOperand(i);
1064     if (!MO.isReg())
1065       continue;
1066     unsigned Reg = MO.getReg();
1067     if (Reg == 0 || TargetRegisterInfo::isPhysicalRegister(Reg))
1068       continue;
1069     if (!vrm.isReMaterialized(Reg))
1070       continue;
1071     MachineInstr *ReMatMI = vrm.getReMaterializedMI(Reg);
1072     MachineOperand *UseMO = ReMatMI->findRegisterUseOperand(li.reg);
1073     if (UseMO)
1074       UseMO->setReg(NewVReg);
1075   }
1076 }
1077
1078 /// rewriteInstructionForSpills, rewriteInstructionsForSpills - Helper functions
1079 /// for addIntervalsForSpills to rewrite uses / defs for the given live range.
1080 bool LiveIntervals::
1081 rewriteInstructionForSpills(const LiveInterval &li, const VNInfo *VNI,
1082                  bool TrySplit, SlotIndex index, SlotIndex end, 
1083                  MachineInstr *MI,
1084                  MachineInstr *ReMatOrigDefMI, MachineInstr *ReMatDefMI,
1085                  unsigned Slot, int LdSlot,
1086                  bool isLoad, bool isLoadSS, bool DefIsReMat, bool CanDelete,
1087                  VirtRegMap &vrm,
1088                  const TargetRegisterClass* rc,
1089                  SmallVector<int, 4> &ReMatIds,
1090                  const MachineLoopInfo *loopInfo,
1091                  unsigned &NewVReg, unsigned ImpUse, bool &HasDef, bool &HasUse,
1092                  DenseMap<unsigned,unsigned> &MBBVRegsMap,
1093                  std::vector<LiveInterval*> &NewLIs) {
1094   bool CanFold = false;
1095  RestartInstruction:
1096   for (unsigned i = 0; i != MI->getNumOperands(); ++i) {
1097     MachineOperand& mop = MI->getOperand(i);
1098     if (!mop.isReg())
1099       continue;
1100     unsigned Reg = mop.getReg();
1101     if (Reg == 0 || TargetRegisterInfo::isPhysicalRegister(Reg))
1102       continue;
1103     if (Reg != li.reg)
1104       continue;
1105
1106     bool TryFold = !DefIsReMat;
1107     bool FoldSS = true; // Default behavior unless it's a remat.
1108     int FoldSlot = Slot;
1109     if (DefIsReMat) {
1110       // If this is the rematerializable definition MI itself and
1111       // all of its uses are rematerialized, simply delete it.
1112       if (MI == ReMatOrigDefMI && CanDelete) {
1113         DEBUG(dbgs() << "\t\t\t\tErasing re-materializable def: "
1114                      << *MI << '\n');
1115         RemoveMachineInstrFromMaps(MI);
1116         vrm.RemoveMachineInstrFromMaps(MI);
1117         MI->eraseFromParent();
1118         break;
1119       }
1120
1121       // If def for this use can't be rematerialized, then try folding.
1122       // If def is rematerializable and it's a load, also try folding.
1123       TryFold = !ReMatDefMI || (ReMatDefMI && (MI == ReMatOrigDefMI || isLoad));
1124       if (isLoad) {
1125         // Try fold loads (from stack slot, constant pool, etc.) into uses.
1126         FoldSS = isLoadSS;
1127         FoldSlot = LdSlot;
1128       }
1129     }
1130
1131     // Scan all of the operands of this instruction rewriting operands
1132     // to use NewVReg instead of li.reg as appropriate.  We do this for
1133     // two reasons:
1134     //
1135     //   1. If the instr reads the same spilled vreg multiple times, we
1136     //      want to reuse the NewVReg.
1137     //   2. If the instr is a two-addr instruction, we are required to
1138     //      keep the src/dst regs pinned.
1139     //
1140     // Keep track of whether we replace a use and/or def so that we can
1141     // create the spill interval with the appropriate range. 
1142     SmallVector<unsigned, 2> Ops;
1143     tie(HasUse, HasDef) = MI->readsWritesVirtualRegister(Reg, &Ops);
1144
1145     // Create a new virtual register for the spill interval.
1146     // Create the new register now so we can map the fold instruction
1147     // to the new register so when it is unfolded we get the correct
1148     // answer.
1149     bool CreatedNewVReg = false;
1150     if (NewVReg == 0) {
1151       NewVReg = mri_->createVirtualRegister(rc);
1152       vrm.grow();
1153       CreatedNewVReg = true;
1154
1155       // The new virtual register should get the same allocation hints as the
1156       // old one.
1157       std::pair<unsigned, unsigned> Hint = mri_->getRegAllocationHint(Reg);
1158       if (Hint.first || Hint.second)
1159         mri_->setRegAllocationHint(NewVReg, Hint.first, Hint.second);
1160     }
1161
1162     if (!TryFold)
1163       CanFold = false;
1164     else {
1165       // Do not fold load / store here if we are splitting. We'll find an
1166       // optimal point to insert a load / store later.
1167       if (!TrySplit) {
1168         if (tryFoldMemoryOperand(MI, vrm, ReMatDefMI, index,
1169                                  Ops, FoldSS, FoldSlot, NewVReg)) {
1170           // Folding the load/store can completely change the instruction in
1171           // unpredictable ways, rescan it from the beginning.
1172
1173           if (FoldSS) {
1174             // We need to give the new vreg the same stack slot as the
1175             // spilled interval.
1176             vrm.assignVirt2StackSlot(NewVReg, FoldSlot);
1177           }
1178
1179           HasUse = false;
1180           HasDef = false;
1181           CanFold = false;
1182           if (isNotInMIMap(MI))
1183             break;
1184           goto RestartInstruction;
1185         }
1186       } else {
1187         // We'll try to fold it later if it's profitable.
1188         CanFold = canFoldMemoryOperand(MI, Ops, DefIsReMat);
1189       }
1190     }
1191
1192     mop.setReg(NewVReg);
1193     if (mop.isImplicit())
1194       rewriteImplicitOps(li, MI, NewVReg, vrm);
1195
1196     // Reuse NewVReg for other reads.
1197     for (unsigned j = 0, e = Ops.size(); j != e; ++j) {
1198       MachineOperand &mopj = MI->getOperand(Ops[j]);
1199       mopj.setReg(NewVReg);
1200       if (mopj.isImplicit())
1201         rewriteImplicitOps(li, MI, NewVReg, vrm);
1202     }
1203             
1204     if (CreatedNewVReg) {
1205       if (DefIsReMat) {
1206         vrm.setVirtIsReMaterialized(NewVReg, ReMatDefMI);
1207         if (ReMatIds[VNI->id] == VirtRegMap::MAX_STACK_SLOT) {
1208           // Each valnum may have its own remat id.
1209           ReMatIds[VNI->id] = vrm.assignVirtReMatId(NewVReg);
1210         } else {
1211           vrm.assignVirtReMatId(NewVReg, ReMatIds[VNI->id]);
1212         }
1213         if (!CanDelete || (HasUse && HasDef)) {
1214           // If this is a two-addr instruction then its use operands are
1215           // rematerializable but its def is not. It should be assigned a
1216           // stack slot.
1217           vrm.assignVirt2StackSlot(NewVReg, Slot);
1218         }
1219       } else {
1220         vrm.assignVirt2StackSlot(NewVReg, Slot);
1221       }
1222     } else if (HasUse && HasDef &&
1223                vrm.getStackSlot(NewVReg) == VirtRegMap::NO_STACK_SLOT) {
1224       // If this interval hasn't been assigned a stack slot (because earlier
1225       // def is a deleted remat def), do it now.
1226       assert(Slot != VirtRegMap::NO_STACK_SLOT);
1227       vrm.assignVirt2StackSlot(NewVReg, Slot);
1228     }
1229
1230     // Re-matting an instruction with virtual register use. Add the
1231     // register as an implicit use on the use MI.
1232     if (DefIsReMat && ImpUse)
1233       MI->addOperand(MachineOperand::CreateReg(ImpUse, false, true));
1234
1235     // Create a new register interval for this spill / remat.
1236     LiveInterval &nI = getOrCreateInterval(NewVReg);
1237     if (CreatedNewVReg) {
1238       NewLIs.push_back(&nI);
1239       MBBVRegsMap.insert(std::make_pair(MI->getParent()->getNumber(), NewVReg));
1240       if (TrySplit)
1241         vrm.setIsSplitFromReg(NewVReg, li.reg);
1242     }
1243
1244     if (HasUse) {
1245       if (CreatedNewVReg) {
1246         LiveRange LR(index.getLoadIndex(), index.getDefIndex(),
1247                      nI.getNextValue(SlotIndex(), 0, false, VNInfoAllocator));
1248         DEBUG(dbgs() << " +" << LR);
1249         nI.addRange(LR);
1250       } else {
1251         // Extend the split live interval to this def / use.
1252         SlotIndex End = index.getDefIndex();
1253         LiveRange LR(nI.ranges[nI.ranges.size()-1].end, End,
1254                      nI.getValNumInfo(nI.getNumValNums()-1));
1255         DEBUG(dbgs() << " +" << LR);
1256         nI.addRange(LR);
1257       }
1258     }
1259     if (HasDef) {
1260       LiveRange LR(index.getDefIndex(), index.getStoreIndex(),
1261                    nI.getNextValue(SlotIndex(), 0, false, VNInfoAllocator));
1262       DEBUG(dbgs() << " +" << LR);
1263       nI.addRange(LR);
1264     }
1265
1266     DEBUG({
1267         dbgs() << "\t\t\t\tAdded new interval: ";
1268         nI.print(dbgs(), tri_);
1269         dbgs() << '\n';
1270       });
1271   }
1272   return CanFold;
1273 }
1274 bool LiveIntervals::anyKillInMBBAfterIdx(const LiveInterval &li,
1275                                    const VNInfo *VNI,
1276                                    MachineBasicBlock *MBB,
1277                                    SlotIndex Idx) const {
1278   SlotIndex End = getMBBEndIdx(MBB);
1279   for (unsigned j = 0, ee = VNI->kills.size(); j != ee; ++j) {
1280     if (VNI->kills[j].isPHI())
1281       continue;
1282
1283     SlotIndex KillIdx = VNI->kills[j];
1284     if (KillIdx > Idx && KillIdx <= End)
1285       return true;
1286   }
1287   return false;
1288 }
1289
1290 /// RewriteInfo - Keep track of machine instrs that will be rewritten
1291 /// during spilling.
1292 namespace {
1293   struct RewriteInfo {
1294     SlotIndex Index;
1295     MachineInstr *MI;
1296     RewriteInfo(SlotIndex i, MachineInstr *mi) : Index(i), MI(mi) {}
1297   };
1298
1299   struct RewriteInfoCompare {
1300     bool operator()(const RewriteInfo &LHS, const RewriteInfo &RHS) const {
1301       return LHS.Index < RHS.Index;
1302     }
1303   };
1304 }
1305
1306 void LiveIntervals::
1307 rewriteInstructionsForSpills(const LiveInterval &li, bool TrySplit,
1308                     LiveInterval::Ranges::const_iterator &I,
1309                     MachineInstr *ReMatOrigDefMI, MachineInstr *ReMatDefMI,
1310                     unsigned Slot, int LdSlot,
1311                     bool isLoad, bool isLoadSS, bool DefIsReMat, bool CanDelete,
1312                     VirtRegMap &vrm,
1313                     const TargetRegisterClass* rc,
1314                     SmallVector<int, 4> &ReMatIds,
1315                     const MachineLoopInfo *loopInfo,
1316                     BitVector &SpillMBBs,
1317                     DenseMap<unsigned, std::vector<SRInfo> > &SpillIdxes,
1318                     BitVector &RestoreMBBs,
1319                     DenseMap<unsigned, std::vector<SRInfo> > &RestoreIdxes,
1320                     DenseMap<unsigned,unsigned> &MBBVRegsMap,
1321                     std::vector<LiveInterval*> &NewLIs) {
1322   bool AllCanFold = true;
1323   unsigned NewVReg = 0;
1324   SlotIndex start = I->start.getBaseIndex();
1325   SlotIndex end = I->end.getPrevSlot().getBaseIndex().getNextIndex();
1326
1327   // First collect all the def / use in this live range that will be rewritten.
1328   // Make sure they are sorted according to instruction index.
1329   std::vector<RewriteInfo> RewriteMIs;
1330   for (MachineRegisterInfo::reg_iterator ri = mri_->reg_begin(li.reg),
1331          re = mri_->reg_end(); ri != re; ) {
1332     MachineInstr *MI = &*ri;
1333     MachineOperand &O = ri.getOperand();
1334     ++ri;
1335     if (MI->isDebugValue()) {
1336       // Modify DBG_VALUE now that the value is in a spill slot.
1337       if (Slot != VirtRegMap::MAX_STACK_SLOT || isLoadSS) {
1338         uint64_t Offset = MI->getOperand(1).getImm();
1339         const MDNode *MDPtr = MI->getOperand(2).getMetadata();
1340         DebugLoc DL = MI->getDebugLoc();
1341         int FI = isLoadSS ? LdSlot : (int)Slot;
1342         if (MachineInstr *NewDV = tii_->emitFrameIndexDebugValue(*mf_, FI,
1343                                                            Offset, MDPtr, DL)) {
1344           DEBUG(dbgs() << "Modifying debug info due to spill:" << "\t" << *MI);
1345           ReplaceMachineInstrInMaps(MI, NewDV);
1346           MachineBasicBlock *MBB = MI->getParent();
1347           MBB->insert(MBB->erase(MI), NewDV);
1348           continue;
1349         }
1350       }
1351
1352       DEBUG(dbgs() << "Removing debug info due to spill:" << "\t" << *MI);
1353       RemoveMachineInstrFromMaps(MI);
1354       vrm.RemoveMachineInstrFromMaps(MI);
1355       MI->eraseFromParent();
1356       continue;
1357     }
1358     assert(!(O.isImplicit() && O.isUse()) &&
1359            "Spilling register that's used as implicit use?");
1360     SlotIndex index = getInstructionIndex(MI);
1361     if (index < start || index >= end)
1362       continue;
1363
1364     if (O.isUndef())
1365       // Must be defined by an implicit def. It should not be spilled. Note,
1366       // this is for correctness reason. e.g.
1367       // 8   %reg1024<def> = IMPLICIT_DEF
1368       // 12  %reg1024<def> = INSERT_SUBREG %reg1024<kill>, %reg1025, 2
1369       // The live range [12, 14) are not part of the r1024 live interval since
1370       // it's defined by an implicit def. It will not conflicts with live
1371       // interval of r1025. Now suppose both registers are spilled, you can
1372       // easily see a situation where both registers are reloaded before
1373       // the INSERT_SUBREG and both target registers that would overlap.
1374       continue;
1375     RewriteMIs.push_back(RewriteInfo(index, MI));
1376   }
1377   std::sort(RewriteMIs.begin(), RewriteMIs.end(), RewriteInfoCompare());
1378
1379   unsigned ImpUse = DefIsReMat ? getReMatImplicitUse(li, ReMatDefMI) : 0;
1380   // Now rewrite the defs and uses.
1381   for (unsigned i = 0, e = RewriteMIs.size(); i != e; ) {
1382     RewriteInfo &rwi = RewriteMIs[i];
1383     ++i;
1384     SlotIndex index = rwi.Index;
1385     MachineInstr *MI = rwi.MI;
1386     // If MI def and/or use the same register multiple times, then there
1387     // are multiple entries.
1388     while (i != e && RewriteMIs[i].MI == MI) {
1389       assert(RewriteMIs[i].Index == index);
1390       ++i;
1391     }
1392     MachineBasicBlock *MBB = MI->getParent();
1393
1394     if (ImpUse && MI != ReMatDefMI) {
1395       // Re-matting an instruction with virtual register use. Prevent interval
1396       // from being spilled.
1397       getInterval(ImpUse).markNotSpillable();
1398     }
1399
1400     unsigned MBBId = MBB->getNumber();
1401     unsigned ThisVReg = 0;
1402     if (TrySplit) {
1403       DenseMap<unsigned,unsigned>::iterator NVI = MBBVRegsMap.find(MBBId);
1404       if (NVI != MBBVRegsMap.end()) {
1405         ThisVReg = NVI->second;
1406         // One common case:
1407         // x = use
1408         // ...
1409         // ...
1410         // def = ...
1411         //     = use
1412         // It's better to start a new interval to avoid artifically
1413         // extend the new interval.
1414         if (MI->readsWritesVirtualRegister(li.reg) ==
1415             std::make_pair(false,true)) {
1416           MBBVRegsMap.erase(MBB->getNumber());
1417           ThisVReg = 0;
1418         }
1419       }
1420     }
1421
1422     bool IsNew = ThisVReg == 0;
1423     if (IsNew) {
1424       // This ends the previous live interval. If all of its def / use
1425       // can be folded, give it a low spill weight.
1426       if (NewVReg && TrySplit && AllCanFold) {
1427         LiveInterval &nI = getOrCreateInterval(NewVReg);
1428         nI.weight /= 10.0F;
1429       }
1430       AllCanFold = true;
1431     }
1432     NewVReg = ThisVReg;
1433
1434     bool HasDef = false;
1435     bool HasUse = false;
1436     bool CanFold = rewriteInstructionForSpills(li, I->valno, TrySplit,
1437                          index, end, MI, ReMatOrigDefMI, ReMatDefMI,
1438                          Slot, LdSlot, isLoad, isLoadSS, DefIsReMat,
1439                          CanDelete, vrm, rc, ReMatIds, loopInfo, NewVReg,
1440                          ImpUse, HasDef, HasUse, MBBVRegsMap, NewLIs);
1441     if (!HasDef && !HasUse)
1442       continue;
1443
1444     AllCanFold &= CanFold;
1445
1446     // Update weight of spill interval.
1447     LiveInterval &nI = getOrCreateInterval(NewVReg);
1448     if (!TrySplit) {
1449       // The spill weight is now infinity as it cannot be spilled again.
1450       nI.markNotSpillable();
1451       continue;
1452     }
1453
1454     // Keep track of the last def and first use in each MBB.
1455     if (HasDef) {
1456       if (MI != ReMatOrigDefMI || !CanDelete) {
1457         bool HasKill = false;
1458         if (!HasUse)
1459           HasKill = anyKillInMBBAfterIdx(li, I->valno, MBB, index.getDefIndex());
1460         else {
1461           // If this is a two-address code, then this index starts a new VNInfo.
1462           const VNInfo *VNI = li.findDefinedVNInfoForRegInt(index.getDefIndex());
1463           if (VNI)
1464             HasKill = anyKillInMBBAfterIdx(li, VNI, MBB, index.getDefIndex());
1465         }
1466         DenseMap<unsigned, std::vector<SRInfo> >::iterator SII =
1467           SpillIdxes.find(MBBId);
1468         if (!HasKill) {
1469           if (SII == SpillIdxes.end()) {
1470             std::vector<SRInfo> S;
1471             S.push_back(SRInfo(index, NewVReg, true));
1472             SpillIdxes.insert(std::make_pair(MBBId, S));
1473           } else if (SII->second.back().vreg != NewVReg) {
1474             SII->second.push_back(SRInfo(index, NewVReg, true));
1475           } else if (index > SII->second.back().index) {
1476             // If there is an earlier def and this is a two-address
1477             // instruction, then it's not possible to fold the store (which
1478             // would also fold the load).
1479             SRInfo &Info = SII->second.back();
1480             Info.index = index;
1481             Info.canFold = !HasUse;
1482           }
1483           SpillMBBs.set(MBBId);
1484         } else if (SII != SpillIdxes.end() &&
1485                    SII->second.back().vreg == NewVReg &&
1486                    index > SII->second.back().index) {
1487           // There is an earlier def that's not killed (must be two-address).
1488           // The spill is no longer needed.
1489           SII->second.pop_back();
1490           if (SII->second.empty()) {
1491             SpillIdxes.erase(MBBId);
1492             SpillMBBs.reset(MBBId);
1493           }
1494         }
1495       }
1496     }
1497
1498     if (HasUse) {
1499       DenseMap<unsigned, std::vector<SRInfo> >::iterator SII =
1500         SpillIdxes.find(MBBId);
1501       if (SII != SpillIdxes.end() &&
1502           SII->second.back().vreg == NewVReg &&
1503           index > SII->second.back().index)
1504         // Use(s) following the last def, it's not safe to fold the spill.
1505         SII->second.back().canFold = false;
1506       DenseMap<unsigned, std::vector<SRInfo> >::iterator RII =
1507         RestoreIdxes.find(MBBId);
1508       if (RII != RestoreIdxes.end() && RII->second.back().vreg == NewVReg)
1509         // If we are splitting live intervals, only fold if it's the first
1510         // use and there isn't another use later in the MBB.
1511         RII->second.back().canFold = false;
1512       else if (IsNew) {
1513         // Only need a reload if there isn't an earlier def / use.
1514         if (RII == RestoreIdxes.end()) {
1515           std::vector<SRInfo> Infos;
1516           Infos.push_back(SRInfo(index, NewVReg, true));
1517           RestoreIdxes.insert(std::make_pair(MBBId, Infos));
1518         } else {
1519           RII->second.push_back(SRInfo(index, NewVReg, true));
1520         }
1521         RestoreMBBs.set(MBBId);
1522       }
1523     }
1524
1525     // Update spill weight.
1526     unsigned loopDepth = loopInfo->getLoopDepth(MBB);
1527     nI.weight += getSpillWeight(HasDef, HasUse, loopDepth);
1528   }
1529
1530   if (NewVReg && TrySplit && AllCanFold) {
1531     // If all of its def / use can be folded, give it a low spill weight.
1532     LiveInterval &nI = getOrCreateInterval(NewVReg);
1533     nI.weight /= 10.0F;
1534   }
1535 }
1536
1537 bool LiveIntervals::alsoFoldARestore(int Id, SlotIndex index,
1538                         unsigned vr, BitVector &RestoreMBBs,
1539                         DenseMap<unsigned,std::vector<SRInfo> > &RestoreIdxes) {
1540   if (!RestoreMBBs[Id])
1541     return false;
1542   std::vector<SRInfo> &Restores = RestoreIdxes[Id];
1543   for (unsigned i = 0, e = Restores.size(); i != e; ++i)
1544     if (Restores[i].index == index &&
1545         Restores[i].vreg == vr &&
1546         Restores[i].canFold)
1547       return true;
1548   return false;
1549 }
1550
1551 void LiveIntervals::eraseRestoreInfo(int Id, SlotIndex index,
1552                         unsigned vr, BitVector &RestoreMBBs,
1553                         DenseMap<unsigned,std::vector<SRInfo> > &RestoreIdxes) {
1554   if (!RestoreMBBs[Id])
1555     return;
1556   std::vector<SRInfo> &Restores = RestoreIdxes[Id];
1557   for (unsigned i = 0, e = Restores.size(); i != e; ++i)
1558     if (Restores[i].index == index && Restores[i].vreg)
1559       Restores[i].index = SlotIndex();
1560 }
1561
1562 /// handleSpilledImpDefs - Remove IMPLICIT_DEF instructions which are being
1563 /// spilled and create empty intervals for their uses.
1564 void
1565 LiveIntervals::handleSpilledImpDefs(const LiveInterval &li, VirtRegMap &vrm,
1566                                     const TargetRegisterClass* rc,
1567                                     std::vector<LiveInterval*> &NewLIs) {
1568   for (MachineRegisterInfo::reg_iterator ri = mri_->reg_begin(li.reg),
1569          re = mri_->reg_end(); ri != re; ) {
1570     MachineOperand &O = ri.getOperand();
1571     MachineInstr *MI = &*ri;
1572     ++ri;
1573     if (MI->isDebugValue()) {
1574       // Remove debug info for now.
1575       O.setReg(0U);
1576       DEBUG(dbgs() << "Removing debug info due to spill:" << "\t" << *MI);
1577       continue;
1578     }
1579     if (O.isDef()) {
1580       assert(MI->isImplicitDef() &&
1581              "Register def was not rewritten?");
1582       RemoveMachineInstrFromMaps(MI);
1583       vrm.RemoveMachineInstrFromMaps(MI);
1584       MI->eraseFromParent();
1585     } else {
1586       // This must be an use of an implicit_def so it's not part of the live
1587       // interval. Create a new empty live interval for it.
1588       // FIXME: Can we simply erase some of the instructions? e.g. Stores?
1589       unsigned NewVReg = mri_->createVirtualRegister(rc);
1590       vrm.grow();
1591       vrm.setIsImplicitlyDefined(NewVReg);
1592       NewLIs.push_back(&getOrCreateInterval(NewVReg));
1593       for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1594         MachineOperand &MO = MI->getOperand(i);
1595         if (MO.isReg() && MO.getReg() == li.reg) {
1596           MO.setReg(NewVReg);
1597           MO.setIsUndef();
1598         }
1599       }
1600     }
1601   }
1602 }
1603
1604 float
1605 LiveIntervals::getSpillWeight(bool isDef, bool isUse, unsigned loopDepth) {
1606   // Limit the loop depth ridiculousness.
1607   if (loopDepth > 200)
1608     loopDepth = 200;
1609
1610   // The loop depth is used to roughly estimate the number of times the
1611   // instruction is executed. Something like 10^d is simple, but will quickly
1612   // overflow a float. This expression behaves like 10^d for small d, but is
1613   // more tempered for large d. At d=200 we get 6.7e33 which leaves a bit of
1614   // headroom before overflow.
1615   float lc = std::pow(1 + (100.0f / (loopDepth+10)), (float)loopDepth);
1616
1617   return (isDef + isUse) * lc;
1618 }
1619
1620 void
1621 LiveIntervals::normalizeSpillWeights(std::vector<LiveInterval*> &NewLIs) {
1622   for (unsigned i = 0, e = NewLIs.size(); i != e; ++i)
1623     normalizeSpillWeight(*NewLIs[i]);
1624 }
1625
1626 std::vector<LiveInterval*> LiveIntervals::
1627 addIntervalsForSpillsFast(const LiveInterval &li,
1628                           const MachineLoopInfo *loopInfo,
1629                           VirtRegMap &vrm) {
1630   unsigned slot = vrm.assignVirt2StackSlot(li.reg);
1631
1632   std::vector<LiveInterval*> added;
1633
1634   assert(li.isSpillable() && "attempt to spill already spilled interval!");
1635
1636   DEBUG({
1637       dbgs() << "\t\t\t\tadding intervals for spills for interval: ";
1638       li.dump();
1639       dbgs() << '\n';
1640     });
1641
1642   const TargetRegisterClass* rc = mri_->getRegClass(li.reg);
1643
1644   MachineRegisterInfo::reg_iterator RI = mri_->reg_begin(li.reg);
1645   while (RI != mri_->reg_end()) {
1646     MachineInstr* MI = &*RI;
1647     
1648     SmallVector<unsigned, 2> Indices;
1649     bool HasUse, HasDef;
1650     tie(HasUse, HasDef) = MI->readsWritesVirtualRegister(li.reg, &Indices);
1651
1652     if (!tryFoldMemoryOperand(MI, vrm, NULL, getInstructionIndex(MI),
1653                               Indices, true, slot, li.reg)) {
1654       unsigned NewVReg = mri_->createVirtualRegister(rc);
1655       vrm.grow();
1656       vrm.assignVirt2StackSlot(NewVReg, slot);
1657       
1658       // create a new register for this spill
1659       LiveInterval &nI = getOrCreateInterval(NewVReg);
1660       nI.markNotSpillable();
1661       
1662       // Rewrite register operands to use the new vreg.
1663       for (SmallVectorImpl<unsigned>::iterator I = Indices.begin(),
1664            E = Indices.end(); I != E; ++I) {
1665         MI->getOperand(*I).setReg(NewVReg);
1666         
1667         if (MI->getOperand(*I).isUse())
1668           MI->getOperand(*I).setIsKill(true);
1669       }
1670       
1671       // Fill in  the new live interval.
1672       SlotIndex index = getInstructionIndex(MI);
1673       if (HasUse) {
1674         LiveRange LR(index.getLoadIndex(), index.getUseIndex(),
1675                      nI.getNextValue(SlotIndex(), 0, false,
1676                                      getVNInfoAllocator()));
1677         DEBUG(dbgs() << " +" << LR);
1678         nI.addRange(LR);
1679         vrm.addRestorePoint(NewVReg, MI);
1680       }
1681       if (HasDef) {
1682         LiveRange LR(index.getDefIndex(), index.getStoreIndex(),
1683                      nI.getNextValue(SlotIndex(), 0, false,
1684                                      getVNInfoAllocator()));
1685         DEBUG(dbgs() << " +" << LR);
1686         nI.addRange(LR);
1687         vrm.addSpillPoint(NewVReg, true, MI);
1688       }
1689       
1690       added.push_back(&nI);
1691         
1692       DEBUG({
1693           dbgs() << "\t\t\t\tadded new interval: ";
1694           nI.dump();
1695           dbgs() << '\n';
1696         });
1697     }
1698     
1699     
1700     RI = mri_->reg_begin(li.reg);
1701   }
1702
1703   return added;
1704 }
1705
1706 std::vector<LiveInterval*> LiveIntervals::
1707 addIntervalsForSpills(const LiveInterval &li,
1708                       SmallVectorImpl<LiveInterval*> &SpillIs,
1709                       const MachineLoopInfo *loopInfo, VirtRegMap &vrm) {
1710   
1711   if (EnableFastSpilling)
1712     return addIntervalsForSpillsFast(li, loopInfo, vrm);
1713   
1714   assert(li.isSpillable() && "attempt to spill already spilled interval!");
1715
1716   DEBUG({
1717       dbgs() << "\t\t\t\tadding intervals for spills for interval: ";
1718       li.print(dbgs(), tri_);
1719       dbgs() << '\n';
1720     });
1721
1722   // Each bit specify whether a spill is required in the MBB.
1723   BitVector SpillMBBs(mf_->getNumBlockIDs());
1724   DenseMap<unsigned, std::vector<SRInfo> > SpillIdxes;
1725   BitVector RestoreMBBs(mf_->getNumBlockIDs());
1726   DenseMap<unsigned, std::vector<SRInfo> > RestoreIdxes;
1727   DenseMap<unsigned,unsigned> MBBVRegsMap;
1728   std::vector<LiveInterval*> NewLIs;
1729   const TargetRegisterClass* rc = mri_->getRegClass(li.reg);
1730
1731   unsigned NumValNums = li.getNumValNums();
1732   SmallVector<MachineInstr*, 4> ReMatDefs;
1733   ReMatDefs.resize(NumValNums, NULL);
1734   SmallVector<MachineInstr*, 4> ReMatOrigDefs;
1735   ReMatOrigDefs.resize(NumValNums, NULL);
1736   SmallVector<int, 4> ReMatIds;
1737   ReMatIds.resize(NumValNums, VirtRegMap::MAX_STACK_SLOT);
1738   BitVector ReMatDelete(NumValNums);
1739   unsigned Slot = VirtRegMap::MAX_STACK_SLOT;
1740
1741   // Spilling a split live interval. It cannot be split any further. Also,
1742   // it's also guaranteed to be a single val# / range interval.
1743   if (vrm.getPreSplitReg(li.reg)) {
1744     vrm.setIsSplitFromReg(li.reg, 0);
1745     // Unset the split kill marker on the last use.
1746     SlotIndex KillIdx = vrm.getKillPoint(li.reg);
1747     if (KillIdx != SlotIndex()) {
1748       MachineInstr *KillMI = getInstructionFromIndex(KillIdx);
1749       assert(KillMI && "Last use disappeared?");
1750       int KillOp = KillMI->findRegisterUseOperandIdx(li.reg, true);
1751       assert(KillOp != -1 && "Last use disappeared?");
1752       KillMI->getOperand(KillOp).setIsKill(false);
1753     }
1754     vrm.removeKillPoint(li.reg);
1755     bool DefIsReMat = vrm.isReMaterialized(li.reg);
1756     Slot = vrm.getStackSlot(li.reg);
1757     assert(Slot != VirtRegMap::MAX_STACK_SLOT);
1758     MachineInstr *ReMatDefMI = DefIsReMat ?
1759       vrm.getReMaterializedMI(li.reg) : NULL;
1760     int LdSlot = 0;
1761     bool isLoadSS = DefIsReMat && tii_->isLoadFromStackSlot(ReMatDefMI, LdSlot);
1762     bool isLoad = isLoadSS ||
1763       (DefIsReMat && (ReMatDefMI->getDesc().canFoldAsLoad()));
1764     bool IsFirstRange = true;
1765     for (LiveInterval::Ranges::const_iterator
1766            I = li.ranges.begin(), E = li.ranges.end(); I != E; ++I) {
1767       // If this is a split live interval with multiple ranges, it means there
1768       // are two-address instructions that re-defined the value. Only the
1769       // first def can be rematerialized!
1770       if (IsFirstRange) {
1771         // Note ReMatOrigDefMI has already been deleted.
1772         rewriteInstructionsForSpills(li, false, I, NULL, ReMatDefMI,
1773                              Slot, LdSlot, isLoad, isLoadSS, DefIsReMat,
1774                              false, vrm, rc, ReMatIds, loopInfo,
1775                              SpillMBBs, SpillIdxes, RestoreMBBs, RestoreIdxes,
1776                              MBBVRegsMap, NewLIs);
1777       } else {
1778         rewriteInstructionsForSpills(li, false, I, NULL, 0,
1779                              Slot, 0, false, false, false,
1780                              false, vrm, rc, ReMatIds, loopInfo,
1781                              SpillMBBs, SpillIdxes, RestoreMBBs, RestoreIdxes,
1782                              MBBVRegsMap, NewLIs);
1783       }
1784       IsFirstRange = false;
1785     }
1786
1787     handleSpilledImpDefs(li, vrm, rc, NewLIs);
1788     normalizeSpillWeights(NewLIs);
1789     return NewLIs;
1790   }
1791
1792   bool TrySplit = !intervalIsInOneMBB(li);
1793   if (TrySplit)
1794     ++numSplits;
1795   bool NeedStackSlot = false;
1796   for (LiveInterval::const_vni_iterator i = li.vni_begin(), e = li.vni_end();
1797        i != e; ++i) {
1798     const VNInfo *VNI = *i;
1799     unsigned VN = VNI->id;
1800     if (VNI->isUnused())
1801       continue; // Dead val#.
1802     // Is the def for the val# rematerializable?
1803     MachineInstr *ReMatDefMI = VNI->isDefAccurate()
1804       ? getInstructionFromIndex(VNI->def) : 0;
1805     bool dummy;
1806     if (ReMatDefMI && isReMaterializable(li, VNI, ReMatDefMI, SpillIs, dummy)) {
1807       // Remember how to remat the def of this val#.
1808       ReMatOrigDefs[VN] = ReMatDefMI;
1809       // Original def may be modified so we have to make a copy here.
1810       MachineInstr *Clone = mf_->CloneMachineInstr(ReMatDefMI);
1811       CloneMIs.push_back(Clone);
1812       ReMatDefs[VN] = Clone;
1813
1814       bool CanDelete = true;
1815       if (VNI->hasPHIKill()) {
1816         // A kill is a phi node, not all of its uses can be rematerialized.
1817         // It must not be deleted.
1818         CanDelete = false;
1819         // Need a stack slot if there is any live range where uses cannot be
1820         // rematerialized.
1821         NeedStackSlot = true;
1822       }
1823       if (CanDelete)
1824         ReMatDelete.set(VN);
1825     } else {
1826       // Need a stack slot if there is any live range where uses cannot be
1827       // rematerialized.
1828       NeedStackSlot = true;
1829     }
1830   }
1831
1832   // One stack slot per live interval.
1833   if (NeedStackSlot && vrm.getPreSplitReg(li.reg) == 0) {
1834     if (vrm.getStackSlot(li.reg) == VirtRegMap::NO_STACK_SLOT)
1835       Slot = vrm.assignVirt2StackSlot(li.reg);
1836     
1837     // This case only occurs when the prealloc splitter has already assigned
1838     // a stack slot to this vreg.
1839     else
1840       Slot = vrm.getStackSlot(li.reg);
1841   }
1842
1843   // Create new intervals and rewrite defs and uses.
1844   for (LiveInterval::Ranges::const_iterator
1845          I = li.ranges.begin(), E = li.ranges.end(); I != E; ++I) {
1846     MachineInstr *ReMatDefMI = ReMatDefs[I->valno->id];
1847     MachineInstr *ReMatOrigDefMI = ReMatOrigDefs[I->valno->id];
1848     bool DefIsReMat = ReMatDefMI != NULL;
1849     bool CanDelete = ReMatDelete[I->valno->id];
1850     int LdSlot = 0;
1851     bool isLoadSS = DefIsReMat && tii_->isLoadFromStackSlot(ReMatDefMI, LdSlot);
1852     bool isLoad = isLoadSS ||
1853       (DefIsReMat && ReMatDefMI->getDesc().canFoldAsLoad());
1854     rewriteInstructionsForSpills(li, TrySplit, I, ReMatOrigDefMI, ReMatDefMI,
1855                                Slot, LdSlot, isLoad, isLoadSS, DefIsReMat,
1856                                CanDelete, vrm, rc, ReMatIds, loopInfo,
1857                                SpillMBBs, SpillIdxes, RestoreMBBs, RestoreIdxes,
1858                                MBBVRegsMap, NewLIs);
1859   }
1860
1861   // Insert spills / restores if we are splitting.
1862   if (!TrySplit) {
1863     handleSpilledImpDefs(li, vrm, rc, NewLIs);
1864     normalizeSpillWeights(NewLIs);
1865     return NewLIs;
1866   }
1867
1868   SmallPtrSet<LiveInterval*, 4> AddedKill;
1869   SmallVector<unsigned, 2> Ops;
1870   if (NeedStackSlot) {
1871     int Id = SpillMBBs.find_first();
1872     while (Id != -1) {
1873       std::vector<SRInfo> &spills = SpillIdxes[Id];
1874       for (unsigned i = 0, e = spills.size(); i != e; ++i) {
1875         SlotIndex index = spills[i].index;
1876         unsigned VReg = spills[i].vreg;
1877         LiveInterval &nI = getOrCreateInterval(VReg);
1878         bool isReMat = vrm.isReMaterialized(VReg);
1879         MachineInstr *MI = getInstructionFromIndex(index);
1880         bool CanFold = false;
1881         bool FoundUse = false;
1882         Ops.clear();
1883         if (spills[i].canFold) {
1884           CanFold = true;
1885           for (unsigned j = 0, ee = MI->getNumOperands(); j != ee; ++j) {
1886             MachineOperand &MO = MI->getOperand(j);
1887             if (!MO.isReg() || MO.getReg() != VReg)
1888               continue;
1889
1890             Ops.push_back(j);
1891             if (MO.isDef())
1892               continue;
1893             if (isReMat || 
1894                 (!FoundUse && !alsoFoldARestore(Id, index, VReg,
1895                                                 RestoreMBBs, RestoreIdxes))) {
1896               // MI has two-address uses of the same register. If the use
1897               // isn't the first and only use in the BB, then we can't fold
1898               // it. FIXME: Move this to rewriteInstructionsForSpills.
1899               CanFold = false;
1900               break;
1901             }
1902             FoundUse = true;
1903           }
1904         }
1905         // Fold the store into the def if possible.
1906         bool Folded = false;
1907         if (CanFold && !Ops.empty()) {
1908           if (tryFoldMemoryOperand(MI, vrm, NULL, index, Ops, true, Slot,VReg)){
1909             Folded = true;
1910             if (FoundUse) {
1911               // Also folded uses, do not issue a load.
1912               eraseRestoreInfo(Id, index, VReg, RestoreMBBs, RestoreIdxes);
1913               nI.removeRange(index.getLoadIndex(), index.getDefIndex());
1914             }
1915             nI.removeRange(index.getDefIndex(), index.getStoreIndex());
1916           }
1917         }
1918
1919         // Otherwise tell the spiller to issue a spill.
1920         if (!Folded) {
1921           LiveRange *LR = &nI.ranges[nI.ranges.size()-1];
1922           bool isKill = LR->end == index.getStoreIndex();
1923           if (!MI->registerDefIsDead(nI.reg))
1924             // No need to spill a dead def.
1925             vrm.addSpillPoint(VReg, isKill, MI);
1926           if (isKill)
1927             AddedKill.insert(&nI);
1928         }
1929       }
1930       Id = SpillMBBs.find_next(Id);
1931     }
1932   }
1933
1934   int Id = RestoreMBBs.find_first();
1935   while (Id != -1) {
1936     std::vector<SRInfo> &restores = RestoreIdxes[Id];
1937     for (unsigned i = 0, e = restores.size(); i != e; ++i) {
1938       SlotIndex index = restores[i].index;
1939       if (index == SlotIndex())
1940         continue;
1941       unsigned VReg = restores[i].vreg;
1942       LiveInterval &nI = getOrCreateInterval(VReg);
1943       bool isReMat = vrm.isReMaterialized(VReg);
1944       MachineInstr *MI = getInstructionFromIndex(index);
1945       bool CanFold = false;
1946       Ops.clear();
1947       if (restores[i].canFold) {
1948         CanFold = true;
1949         for (unsigned j = 0, ee = MI->getNumOperands(); j != ee; ++j) {
1950           MachineOperand &MO = MI->getOperand(j);
1951           if (!MO.isReg() || MO.getReg() != VReg)
1952             continue;
1953
1954           if (MO.isDef()) {
1955             // If this restore were to be folded, it would have been folded
1956             // already.
1957             CanFold = false;
1958             break;
1959           }
1960           Ops.push_back(j);
1961         }
1962       }
1963
1964       // Fold the load into the use if possible.
1965       bool Folded = false;
1966       if (CanFold && !Ops.empty()) {
1967         if (!isReMat)
1968           Folded = tryFoldMemoryOperand(MI, vrm, NULL,index,Ops,true,Slot,VReg);
1969         else {
1970           MachineInstr *ReMatDefMI = vrm.getReMaterializedMI(VReg);
1971           int LdSlot = 0;
1972           bool isLoadSS = tii_->isLoadFromStackSlot(ReMatDefMI, LdSlot);
1973           // If the rematerializable def is a load, also try to fold it.
1974           if (isLoadSS || ReMatDefMI->getDesc().canFoldAsLoad())
1975             Folded = tryFoldMemoryOperand(MI, vrm, ReMatDefMI, index,
1976                                           Ops, isLoadSS, LdSlot, VReg);
1977           if (!Folded) {
1978             unsigned ImpUse = getReMatImplicitUse(li, ReMatDefMI);
1979             if (ImpUse) {
1980               // Re-matting an instruction with virtual register use. Add the
1981               // register as an implicit use on the use MI and mark the register
1982               // interval as unspillable.
1983               LiveInterval &ImpLi = getInterval(ImpUse);
1984               ImpLi.markNotSpillable();
1985               MI->addOperand(MachineOperand::CreateReg(ImpUse, false, true));
1986             }
1987           }
1988         }
1989       }
1990       // If folding is not possible / failed, then tell the spiller to issue a
1991       // load / rematerialization for us.
1992       if (Folded)
1993         nI.removeRange(index.getLoadIndex(), index.getDefIndex());
1994       else
1995         vrm.addRestorePoint(VReg, MI);
1996     }
1997     Id = RestoreMBBs.find_next(Id);
1998   }
1999
2000   // Finalize intervals: add kills, finalize spill weights, and filter out
2001   // dead intervals.
2002   std::vector<LiveInterval*> RetNewLIs;
2003   for (unsigned i = 0, e = NewLIs.size(); i != e; ++i) {
2004     LiveInterval *LI = NewLIs[i];
2005     if (!LI->empty()) {
2006       LI->weight /= SlotIndex::NUM * getApproximateInstructionCount(*LI);
2007       if (!AddedKill.count(LI)) {
2008         LiveRange *LR = &LI->ranges[LI->ranges.size()-1];
2009         SlotIndex LastUseIdx = LR->end.getBaseIndex();
2010         MachineInstr *LastUse = getInstructionFromIndex(LastUseIdx);
2011         int UseIdx = LastUse->findRegisterUseOperandIdx(LI->reg, false);
2012         assert(UseIdx != -1);
2013         if (!LastUse->isRegTiedToDefOperand(UseIdx)) {
2014           LastUse->getOperand(UseIdx).setIsKill();
2015           vrm.addKillPoint(LI->reg, LastUseIdx);
2016         }
2017       }
2018       RetNewLIs.push_back(LI);
2019     }
2020   }
2021
2022   handleSpilledImpDefs(li, vrm, rc, RetNewLIs);
2023   normalizeSpillWeights(RetNewLIs);
2024   return RetNewLIs;
2025 }
2026
2027 /// hasAllocatableSuperReg - Return true if the specified physical register has
2028 /// any super register that's allocatable.
2029 bool LiveIntervals::hasAllocatableSuperReg(unsigned Reg) const {
2030   for (const unsigned* AS = tri_->getSuperRegisters(Reg); *AS; ++AS)
2031     if (allocatableRegs_[*AS] && hasInterval(*AS))
2032       return true;
2033   return false;
2034 }
2035
2036 /// getRepresentativeReg - Find the largest super register of the specified
2037 /// physical register.
2038 unsigned LiveIntervals::getRepresentativeReg(unsigned Reg) const {
2039   // Find the largest super-register that is allocatable. 
2040   unsigned BestReg = Reg;
2041   for (const unsigned* AS = tri_->getSuperRegisters(Reg); *AS; ++AS) {
2042     unsigned SuperReg = *AS;
2043     if (!hasAllocatableSuperReg(SuperReg) && hasInterval(SuperReg)) {
2044       BestReg = SuperReg;
2045       break;
2046     }
2047   }
2048   return BestReg;
2049 }
2050
2051 /// getNumConflictsWithPhysReg - Return the number of uses and defs of the
2052 /// specified interval that conflicts with the specified physical register.
2053 unsigned LiveIntervals::getNumConflictsWithPhysReg(const LiveInterval &li,
2054                                                    unsigned PhysReg) const {
2055   unsigned NumConflicts = 0;
2056   const LiveInterval &pli = getInterval(getRepresentativeReg(PhysReg));
2057   for (MachineRegisterInfo::reg_iterator I = mri_->reg_begin(li.reg),
2058          E = mri_->reg_end(); I != E; ++I) {
2059     MachineOperand &O = I.getOperand();
2060     MachineInstr *MI = O.getParent();
2061     if (MI->isDebugValue())
2062       continue;
2063     SlotIndex Index = getInstructionIndex(MI);
2064     if (pli.liveAt(Index))
2065       ++NumConflicts;
2066   }
2067   return NumConflicts;
2068 }
2069
2070 /// spillPhysRegAroundRegDefsUses - Spill the specified physical register
2071 /// around all defs and uses of the specified interval. Return true if it
2072 /// was able to cut its interval.
2073 bool LiveIntervals::spillPhysRegAroundRegDefsUses(const LiveInterval &li,
2074                                             unsigned PhysReg, VirtRegMap &vrm) {
2075   unsigned SpillReg = getRepresentativeReg(PhysReg);
2076
2077   for (const unsigned *AS = tri_->getAliasSet(PhysReg); *AS; ++AS)
2078     // If there are registers which alias PhysReg, but which are not a
2079     // sub-register of the chosen representative super register. Assert
2080     // since we can't handle it yet.
2081     assert(*AS == SpillReg || !allocatableRegs_[*AS] || !hasInterval(*AS) ||
2082            tri_->isSuperRegister(*AS, SpillReg));
2083
2084   bool Cut = false;
2085   SmallVector<unsigned, 4> PRegs;
2086   if (hasInterval(SpillReg))
2087     PRegs.push_back(SpillReg);
2088   else {
2089     SmallSet<unsigned, 4> Added;
2090     for (const unsigned* AS = tri_->getSubRegisters(SpillReg); *AS; ++AS)
2091       if (Added.insert(*AS) && hasInterval(*AS)) {
2092         PRegs.push_back(*AS);
2093         for (const unsigned* ASS = tri_->getSubRegisters(*AS); *ASS; ++ASS)
2094           Added.insert(*ASS);
2095       }
2096   }
2097
2098   SmallPtrSet<MachineInstr*, 8> SeenMIs;
2099   for (MachineRegisterInfo::reg_iterator I = mri_->reg_begin(li.reg),
2100          E = mri_->reg_end(); I != E; ++I) {
2101     MachineOperand &O = I.getOperand();
2102     MachineInstr *MI = O.getParent();
2103     if (MI->isDebugValue() || SeenMIs.count(MI))
2104       continue;
2105     SeenMIs.insert(MI);
2106     SlotIndex Index = getInstructionIndex(MI);
2107     for (unsigned i = 0, e = PRegs.size(); i != e; ++i) {
2108       unsigned PReg = PRegs[i];
2109       LiveInterval &pli = getInterval(PReg);
2110       if (!pli.liveAt(Index))
2111         continue;
2112       vrm.addEmergencySpill(PReg, MI);
2113       SlotIndex StartIdx = Index.getLoadIndex();
2114       SlotIndex EndIdx = Index.getNextIndex().getBaseIndex();
2115       if (pli.isInOneLiveRange(StartIdx, EndIdx)) {
2116         pli.removeRange(StartIdx, EndIdx);
2117         Cut = true;
2118       } else {
2119         std::string msg;
2120         raw_string_ostream Msg(msg);
2121         Msg << "Ran out of registers during register allocation!";
2122         if (MI->isInlineAsm()) {
2123           Msg << "\nPlease check your inline asm statement for invalid "
2124               << "constraints:\n";
2125           MI->print(Msg, tm_);
2126         }
2127         report_fatal_error(Msg.str());
2128       }
2129       for (const unsigned* AS = tri_->getSubRegisters(PReg); *AS; ++AS) {
2130         if (!hasInterval(*AS))
2131           continue;
2132         LiveInterval &spli = getInterval(*AS);
2133         if (spli.liveAt(Index))
2134           spli.removeRange(Index.getLoadIndex(),
2135                            Index.getNextIndex().getBaseIndex());
2136       }
2137     }
2138   }
2139   return Cut;
2140 }
2141
2142 LiveRange LiveIntervals::addLiveRangeToEndOfBlock(unsigned reg,
2143                                                   MachineInstr* startInst) {
2144   LiveInterval& Interval = getOrCreateInterval(reg);
2145   VNInfo* VN = Interval.getNextValue(
2146     SlotIndex(getInstructionIndex(startInst).getDefIndex()),
2147     startInst, true, getVNInfoAllocator());
2148   VN->setHasPHIKill(true);
2149   VN->kills.push_back(indexes_->getTerminatorGap(startInst->getParent()));
2150   LiveRange LR(
2151      SlotIndex(getInstructionIndex(startInst).getDefIndex()),
2152      getMBBEndIdx(startInst->getParent()), VN);
2153   Interval.addRange(LR);
2154   
2155   return LR;
2156 }
2157