mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 03:24:09 +00:00
IR: Add BasicBlock::insertInto()
Although unlinked `BasicBlock`s can be created, there's currently no way to insert them into `Function`s after the fact. In particular, `moveAfter()` and `moveBefore()` require that the basic block is already linked. Extract the logic for initially linking a `BasicBlock` out of the constructor and into a member function that can be used for lazy insertion. - Asserts that the basic block is currently unlinked. - Matches the logic of the constructor. - Changed the constructor to use it since the logic matches. This is needed in a follow-up commit for PR5680. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214563 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -50,17 +50,24 @@ BasicBlock::BasicBlock(LLVMContext &C, const Twine &Name, Function *NewParent,
|
||||
// Make sure that we get added to a function
|
||||
LeakDetector::addGarbageObject(this);
|
||||
|
||||
if (InsertBefore) {
|
||||
assert(NewParent &&
|
||||
if (NewParent)
|
||||
insertInto(NewParent, InsertBefore);
|
||||
else
|
||||
assert(!InsertBefore &&
|
||||
"Cannot insert block before another block with no function!");
|
||||
NewParent->getBasicBlockList().insert(InsertBefore, this);
|
||||
} else if (NewParent) {
|
||||
NewParent->getBasicBlockList().push_back(this);
|
||||
}
|
||||
|
||||
setName(Name);
|
||||
}
|
||||
|
||||
void BasicBlock::insertInto(Function *NewParent, BasicBlock *InsertBefore) {
|
||||
assert(NewParent && "Expected a parent");
|
||||
assert(!Parent && "Already has a parent");
|
||||
|
||||
if (InsertBefore)
|
||||
NewParent->getBasicBlockList().insert(InsertBefore, this);
|
||||
else
|
||||
NewParent->getBasicBlockList().push_back(this);
|
||||
}
|
||||
|
||||
BasicBlock::~BasicBlock() {
|
||||
// If the address of the block is taken and it is being deleted (e.g. because
|
||||
|
Reference in New Issue
Block a user