summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2012-02-21 00:00:36 +0000
committerLang Hames <lhames@gmail.com>2012-02-21 00:00:36 +0000
commit7e2ce889a00679365a29b40229db5e10e96cc4e6 (patch)
treec3872df42d8f86c47f6631360dc5aa5e74f43ee0 /llvm/lib/CodeGen
parent932b0b1a131b234853fbae7732c6736966e7eba7 (diff)
downloadbcm5719-llvm-7e2ce889a00679365a29b40229db5e10e96cc4e6.tar.gz
bcm5719-llvm-7e2ce889a00679365a29b40229db5e10e96cc4e6.zip
Fix some bugs in HMEditor's moveAllOperandsInto logic.
llvm-svn: 151006
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/LiveIntervalAnalysis.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
index 24370a302d8..e9963822a00 100644
--- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
+++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
@@ -1025,7 +1025,7 @@ bool LiveIntervals::checkRegMaskInterference(LiveInterval &LI,
// IntervalUpdate class.
//===----------------------------------------------------------------------===//
-/// HMEditor is a toolkit used by handleMove to trim or extend live intervals.
+// HMEditor is a toolkit used by handleMove to trim or extend live intervals.
class LiveIntervals::HMEditor {
private:
LiveIntervals& LIS;
@@ -1078,11 +1078,14 @@ public:
}
- void moveAllOperandsInto(MachineInstr* MI, MachineInstr* BundleStart,
- SlotIndex OldIdx) {
+ void moveAllOperandsInto(MachineInstr* MI, MachineInstr* BundleStart) {
if (MI == BundleStart)
return; // Bundling instr with itself - nothing to do.
+ SlotIndex OldIdx = LIS.getSlotIndexes()->getInstructionIndex(MI);
+ assert(LIS.getSlotIndexes()->getInstructionFromIndex(OldIdx) == MI &&
+ "SlotIndex <-> Instruction mapping broken for MI");
+
BundleRanges BR = createBundleRanges(BundleStart);
RangeSet Entering, Internal, Exiting;
@@ -1201,14 +1204,14 @@ private:
}
for (RangeSet::iterator EI = Entering.begin(), EE = Entering.end();
- EI == EE; ++EI) {
+ EI != EE; ++EI) {
LiveInterval* LI = EI->first;
LiveRange* LR = EI->second;
BR[LI->reg].Use = LR;
}
for (RangeSet::iterator II = Internal.begin(), IE = Internal.end();
- II == IE; ++II) {
+ II != IE; ++II) {
LiveInterval* LI = II->first;
LiveRange* LR = II->second;
if (LR->end.isDead()) {
@@ -1219,7 +1222,7 @@ private:
}
for (RangeSet::iterator EI = Exiting.begin(), EE = Exiting.end();
- EI == EE; ++EI) {
+ EI != EE; ++EI) {
LiveInterval* LI = EI->first;
LiveRange* LR = EI->second;
BR[LI->reg].Def = LR;
@@ -1350,9 +1353,7 @@ private:
}
SlotIndex LastUse = findLastUseBefore(LI->reg, OldIdx);
- // TODO: Kill flag transfer is broken. For "Into" methods NewIdx is the
- // bundle start, so we need another way to find MI.
- moveKillFlags(LI->reg, NewIdx, LastUse);
+ moveKillFlags(LI->reg, OldIdx, LastUse);
if (LR->start < NewIdx) {
// Becoming a new entering range.
OpenPOWER on IntegriCloud