[llvm-dev] Inserting a new MachineBasicBlock between two existing MachineBasicBlocks

Ziqiang Patrick Huang via llvm-dev llvm-dev at lists.llvm.org
Mon Aug 17 14:26:59 PDT 2015


Hi all,

Suppose I have two basicblock  A->B, and I wanted to insert C between them
so that A->B->C.

By looking at MachineBasicBlock::SplitCriticalEdge, I did following similar
steps:

MachineBasicBlock *B = MF.CreateMachineBasicBlock();
MF.insert(std::next(MachineFunction::iterator(A)), B);
LIS->insertMBBInMaps(B);
LIS->getSlotIndexes()->insertMBBInMaps(B);

But when I try to add the new basicblock into SlotIndexes, it fails at the
assertion.

assert(unsigned(mbb->getNumber()) == MBBRanges.size() && "Blocks must be
added in order");

So I thought maybe I should add it at the end of the function, so I tried

MF.insert(MF.end(), B), but it still fails, so I'm wondering what's the
right way to do it.

I'm doing it at MachineScheduler Pass.

Thanks in Advance
Patrick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150817/7920a7f2/attachment.html>


More information about the llvm-dev mailing list