aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveIntervalAnalysis.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/LiveIntervalAnalysis.cpp')
-rw-r--r--lib/CodeGen/LiveIntervalAnalysis.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp
index e09ac4bfbd..0978d7342e 100644
--- a/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/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;