diff options
author | Lang Hames <lhames@gmail.com> | 2012-02-21 00:00:36 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2012-02-21 00:00:36 +0000 |
commit | 7e2ce889a00679365a29b40229db5e10e96cc4e6 (patch) | |
tree | c3872df42d8f86c47f6631360dc5aa5e74f43ee0 /llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | |
parent | 932b0b1a131b234853fbae7732c6736966e7eba7 (diff) | |
download | bcm5719-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/LiveIntervalAnalysis.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 19 |
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. |