From: Lang Hames Date: Fri, 17 Feb 2012 21:29:41 +0000 (+0000) Subject: Add support for regmask slots to HMEditor. Also fixes a comment error. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=fbc8dd306aa7699a866db278db08d842762b2dc2;p=oota-llvm.git 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 --- diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index f1f66f28c24..4e66bf61383 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::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); }