Add support for regmask slots to HMEditor. Also fixes a comment error.
authorLang Hames <lhames@gmail.com>
Fri, 17 Feb 2012 21:29:41 +0000 (21:29 +0000)
committerLang Hames <lhames@gmail.com>
Fri, 17 Feb 2012 21:29:41 +0000 (21:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150840 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveIntervalAnalysis.cpp

index f1f66f28c243ecfe116afdf38f79925232855835..4e66bf613832164aa3713cc84b9b7f649553b30b 100644 (file)
@@ -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);
 }