diff options
author | Lang Hames <lhames@gmail.com> | 2012-02-17 21:29:41 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2012-02-17 21:29:41 +0000 |
commit | fbc8dd306aa7699a866db278db08d842762b2dc2 (patch) | |
tree | fd8c3e05b0e085f0c2c7b40101bf65ad3d34c1e1 /lib/CodeGen/LiveIntervalAnalysis.cpp | |
parent | d9165eb02fadbef35bc75490854c11dcfd28a920 (diff) |
Add support for regmask slots to HMEditor. Also fixes a comment error.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150840 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveIntervalAnalysis.cpp')
-rw-r--r-- | lib/CodeGen/LiveIntervalAnalysis.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index f1f66f28c2..4e66bf6138 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -1069,7 +1069,6 @@ public: assert(intervalRangesSane(li) && "Broke live interval moving use."); } - // Returns the new void moveUseUp(SlotIndex oldIdx, LiveRange& lr, LiveInterval& li) { bool liveThrough = lr.end > oldIdx.getRegSlot(); if (liveThrough) @@ -1098,7 +1097,7 @@ public: } // Update intervals for all operands of mi from oldIndex to newIndex. - void moveAllOperands(MachineInstr* mi, SlotIndex oldIdx) { + void moveAllOperandsFrom(MachineInstr* mi, SlotIndex oldIdx) { // Figure out the direction we're moving. bool movingUp = newIdx < oldIdx; @@ -1109,6 +1108,11 @@ public: mopItr != mopEnd; ++mopItr) { const MachineOperand& mop = *mopItr; + if (mop.isRegMask()) { + updateRegMaskSlots(oldIdx); + continue; + } + if (!mop.isReg() || mop.getReg() == 0) continue; @@ -1249,6 +1253,16 @@ private: moveUseDown(oldIdx, *lr, li, mbb); } } + + void updateRegMaskSlots(SlotIndex oldIdx) { + SmallVectorImpl<SlotIndex>::iterator rmItr = + std::lower_bound(lis.RegMaskSlots.begin(), lis.RegMaskSlots.end(), + oldIdx); + assert(*rmItr == oldIdx && "No RegMask at oldIdx."); + *rmItr = newIdx; + assert(*prior(rmItr) < *rmItr && *rmItr < *next(rmItr) && + "RegSlots out of order. Did you move one call across another?"); + } }; void LiveIntervals::handleMove(MachineInstr* mi) { @@ -1263,5 +1277,5 @@ void LiveIntervals::handleMove(MachineInstr* mi) { assert(!mi->isBundled() && "Can't handle bundled instructions yet."); HMEditor hme(*this, newIndex); - hme.moveAllOperands(mi, oldIndex); + hme.moveAllOperandsFrom(mi, oldIndex); } |