[llvm] r174868 - Fix some problems with the updating of SlotIndexes after adding a new MBB. In

Cameron Zwarich zwarich at apple.com
Mon Feb 11 01:24:43 PST 2013


Author: zwarich
Date: Mon Feb 11 03:24:42 2013
New Revision: 174868

URL: http://llvm.org/viewvc/llvm-project?rev=174868&view=rev
Log:
Fix some problems with the updating of SlotIndexes after adding a new MBB. In
particular, holes were being left between two blocks after splitting an edge.

Modified:
    llvm/trunk/include/llvm/CodeGen/SlotIndexes.h

Modified: llvm/trunk/include/llvm/CodeGen/SlotIndexes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SlotIndexes.h?rev=174868&r1=174867&r2=174868&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/SlotIndexes.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SlotIndexes.h Mon Feb 11 03:24:42 2013
@@ -603,25 +603,30 @@ namespace llvm {
       MachineFunction::iterator nextMBB =
         llvm::next(MachineFunction::iterator(mbb));
 
-      IndexListEntry *nextEntry = 0;
-      if (nextMBB == mbb->getParent()->end())
-        nextEntry = &indexList.back();
-      else
-        nextEntry = getMBBStartIdx(nextMBB).listEntry();
-
-      IndexListEntry *startEntry = createEntry(0, 0);
-      IndexListEntry *stopEntry = createEntry(0, 0);
-
-      indexList.insertAfter(nextEntry, startEntry);
-      indexList.insertAfter(startEntry, stopEntry);
+      IndexListEntry *startEntry = 0;
+      IndexListEntry *endEntry = 0;
+      if (nextMBB == mbb->getParent()->end()) {
+        startEntry = &indexList.back();
+        endEntry = createEntry(0, 0);
+        indexList.insertAfter(startEntry, endEntry);
+      } else {
+        startEntry = createEntry(0, 0);
+        endEntry = getMBBStartIdx(nextMBB).listEntry();
+        indexList.insert(endEntry, startEntry);
+      }
 
       SlotIndex startIdx(startEntry, SlotIndex::Slot_Block);
-      SlotIndex endIdx(stopEntry, SlotIndex::Slot_Block);
+      SlotIndex endIdx(endEntry, SlotIndex::Slot_Block);
+
+      MachineFunction::iterator prevMBB(mbb);
+      assert(prevMBB != mbb->getParent()->end() &&
+             "Can't insert a new block at the beginning of a function.");
+      --prevMBB;
+      MBBRanges[prevMBB->getNumber()].second = startIdx;
 
       assert(unsigned(mbb->getNumber()) == MBBRanges.size() &&
              "Blocks must be added in order");
       MBBRanges.push_back(std::make_pair(startIdx, endIdx));
-
       idx2MBBMap.push_back(IdxMBBPair(startIdx, mbb));
 
       // FIXME: Renumber locally instead of renumbering the whole function every





More information about the llvm-commits mailing list