summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/LiveIntervalAnalysis.cpp19
-rw-r--r--llvm/lib/CodeGen/MachineBasicBlock.cpp10
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 =
OpenPOWER on IntegriCloud