diff options
author | Cameron Zwarich <zwarich@apple.com> | 2013-02-11 09:24:42 +0000 |
---|---|---|
committer | Cameron Zwarich <zwarich@apple.com> | 2013-02-11 09:24:42 +0000 |
commit | 4e08e35e9606eaf8cc2fee942f78fd40b53650b2 (patch) | |
tree | b45b4ae4b342ec2fded186dada1b841276ed6177 | |
parent | b29ce26ea60f7516c853318ffbfc107fde9ad897 (diff) |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174868 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/SlotIndexes.h | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/include/llvm/CodeGen/SlotIndexes.h b/include/llvm/CodeGen/SlotIndexes.h index 690bee66c0..d4e8c20a31 100644 --- a/include/llvm/CodeGen/SlotIndexes.h +++ b/include/llvm/CodeGen/SlotIndexes.h @@ -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 |