diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 19 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MachineBasicBlock.cpp | 10 |
2 files changed, 13 insertions, 16 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp index e09ac4bfbd8..0978d7342ec 100644 --- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -1035,19 +1035,24 @@ void LiveIntervals::handleMoveIntoBundle(MachineInstr* MI, void LiveIntervals::repairIntervalsInRange(MachineBasicBlock *MBB, - MachineBasicBlock::reverse_iterator RBegin, - MachineBasicBlock::reverse_iterator REnd, + MachineBasicBlock::iterator Begin, + MachineBasicBlock::iterator End, ArrayRef<unsigned> OrigRegs) { + SlotIndex startIdx; + if (Begin == MBB->begin()) + startIdx = getMBBStartIdx(MBB); + else + startIdx = getInstructionIndex(prior(Begin)).getRegSlot(); + for (unsigned i = 0, e = OrigRegs.size(); i != e; ++i) { unsigned Reg = OrigRegs[i]; if (!TargetRegisterInfo::isVirtualRegister(Reg)) continue; LiveInterval &LI = getInterval(Reg); - SlotIndex startIdx = (REnd == MBB->rend()) ? getMBBStartIdx(MBB) - : getInstructionIndex(&*REnd); - for (MachineBasicBlock::reverse_iterator I = RBegin; I != REnd; ++I) { - MachineInstr *MI = &*I; + for (MachineBasicBlock::iterator I = End; I != Begin;) { + --I; + MachineInstr *MI = I; SlotIndex instrIdx = getInstructionIndex(MI); for (MachineInstr::mop_iterator OI = MI->operands_begin(), @@ -1059,7 +1064,7 @@ LiveIntervals::repairIntervalsInRange(MachineBasicBlock *MBB, assert(MO.isUse() && "Register defs are not yet supported."); if (!LI.liveAt(instrIdx)) { - LiveRange *LR = LI.getLiveRangeContaining(startIdx.getRegSlot()); + LiveRange *LR = LI.getLiveRangeContaining(startIdx); assert(LR && "Used registers must be live-in."); LR->end = instrIdx.getRegSlot(); break; diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp index f22a70716eb..898e165feea 100644 --- a/llvm/lib/CodeGen/MachineBasicBlock.cpp +++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp @@ -851,15 +851,7 @@ MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) { // Update all intervals for registers whose uses may have been modified by // updateTerminator(). - iterator FirstTerminator = getFirstTerminator(); - reverse_iterator PreTerminators; - if (FirstTerminator == begin()) - PreTerminators = rend(); - else if (FirstTerminator == end()) - PreTerminators = rbegin(); - else - PreTerminators = reverse_iterator(FirstTerminator); - LIS->repairIntervalsInRange(this, rbegin(), PreTerminators, UsedRegs); + LIS->repairIntervalsInRange(this, getFirstTerminator(), end(), UsedRegs); } if (MachineDominatorTree *MDT = |