[NFC] Tweak SplitBlockAndInsertIfThen to use existing ThenBlock
llvm-svn: 354107
This commit is contained in:
parent
0af864b4b2
commit
73db5c137a
|
@ -270,7 +270,8 @@ ReturnInst *FoldReturnIntoUncondBranch(ReturnInst *RI, BasicBlock *BB,
|
|||
/// SplitBefore
|
||||
/// Tail
|
||||
///
|
||||
/// If Unreachable is true, then ThenBlock ends with
|
||||
/// If \p ThenBlock is not specified, a new block will be created for it.
|
||||
/// If \p Unreachable is true, the newly created block will end with
|
||||
/// UnreachableInst, otherwise it branches to Tail.
|
||||
/// Returns the NewBasicBlock's terminator.
|
||||
///
|
||||
|
@ -279,7 +280,8 @@ Instruction *SplitBlockAndInsertIfThen(Value *Cond, Instruction *SplitBefore,
|
|||
bool Unreachable,
|
||||
MDNode *BranchWeights = nullptr,
|
||||
DominatorTree *DT = nullptr,
|
||||
LoopInfo *LI = nullptr);
|
||||
LoopInfo *LI = nullptr,
|
||||
BasicBlock *ThenBlock = nullptr);
|
||||
|
||||
/// SplitBlockAndInsertIfThenElse is similar to SplitBlockAndInsertIfThen,
|
||||
/// but also creates the ElseBlock.
|
||||
|
|
|
@ -730,18 +730,23 @@ Instruction *llvm::SplitBlockAndInsertIfThen(Value *Cond,
|
|||
Instruction *SplitBefore,
|
||||
bool Unreachable,
|
||||
MDNode *BranchWeights,
|
||||
DominatorTree *DT, LoopInfo *LI) {
|
||||
DominatorTree *DT, LoopInfo *LI,
|
||||
BasicBlock *ThenBlock) {
|
||||
BasicBlock *Head = SplitBefore->getParent();
|
||||
BasicBlock *Tail = Head->splitBasicBlock(SplitBefore->getIterator());
|
||||
Instruction *HeadOldTerm = Head->getTerminator();
|
||||
LLVMContext &C = Head->getContext();
|
||||
BasicBlock *ThenBlock = BasicBlock::Create(C, "", Head->getParent(), Tail);
|
||||
Instruction *CheckTerm;
|
||||
if (Unreachable)
|
||||
CheckTerm = new UnreachableInst(C, ThenBlock);
|
||||
else
|
||||
CheckTerm = BranchInst::Create(Tail, ThenBlock);
|
||||
CheckTerm->setDebugLoc(SplitBefore->getDebugLoc());
|
||||
bool CreateThenBlock = (ThenBlock == nullptr);
|
||||
if (CreateThenBlock) {
|
||||
ThenBlock = BasicBlock::Create(C, "", Head->getParent(), Tail);
|
||||
if (Unreachable)
|
||||
CheckTerm = new UnreachableInst(C, ThenBlock);
|
||||
else
|
||||
CheckTerm = BranchInst::Create(Tail, ThenBlock);
|
||||
CheckTerm->setDebugLoc(SplitBefore->getDebugLoc());
|
||||
} else
|
||||
CheckTerm = ThenBlock->getTerminator();
|
||||
BranchInst *HeadNewTerm =
|
||||
BranchInst::Create(/*ifTrue*/ThenBlock, /*ifFalse*/Tail, Cond);
|
||||
HeadNewTerm->setMetadata(LLVMContext::MD_prof, BranchWeights);
|
||||
|
@ -756,7 +761,10 @@ Instruction *llvm::SplitBlockAndInsertIfThen(Value *Cond,
|
|||
DT->changeImmediateDominator(Child, NewNode);
|
||||
|
||||
// Head dominates ThenBlock.
|
||||
DT->addNewBlock(ThenBlock, Head);
|
||||
if (CreateThenBlock)
|
||||
DT->addNewBlock(ThenBlock, Head);
|
||||
else
|
||||
DT->changeImmediateDominator(ThenBlock, Head);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue