From 4e08e35e9606eaf8cc2fee942f78fd40b53650b2 Mon Sep 17 00:00:00 2001 From: Cameron Zwarich Date: Mon, 11 Feb 2013 09:24:42 +0000 Subject: [PATCH] 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 --- include/llvm/CodeGen/SlotIndexes.h | 31 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/include/llvm/CodeGen/SlotIndexes.h b/include/llvm/CodeGen/SlotIndexes.h index 690bee66c0f..d4e8c20a318 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