mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-09 07:24:39 +00:00
Add an explicit insert point argument to SplitBlockAndInsertIfThen.
Currently SplitBlockAndInsertIfThen requires that branch condition is an Instruction itself, which is very inconvenient, because it is sometimes an Operator, or even a Constant. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197677 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -630,28 +630,29 @@ ReturnInst *llvm::FoldReturnIntoUncondBranch(ReturnInst *RI, BasicBlock *BB,
|
||||
}
|
||||
|
||||
/// SplitBlockAndInsertIfThen - Split the containing block at the
|
||||
/// specified instruction - everything before and including Cmp stays
|
||||
/// in the old basic block, and everything after Cmp is moved to a
|
||||
/// specified instruction - everything before and including SplitBefore stays
|
||||
/// in the old basic block, and everything after SplitBefore is moved to a
|
||||
/// new block. The two blocks are connected by a conditional branch
|
||||
/// (with value of Cmp being the condition).
|
||||
/// Before:
|
||||
/// Head
|
||||
/// Cmp
|
||||
/// SplitBefore
|
||||
/// Tail
|
||||
/// After:
|
||||
/// Head
|
||||
/// Cmp
|
||||
/// if (Cmp)
|
||||
/// if (Cond)
|
||||
/// ThenBlock
|
||||
/// SplitBefore
|
||||
/// Tail
|
||||
///
|
||||
/// If Unreachable is true, then ThenBlock ends with
|
||||
/// UnreachableInst, otherwise it branches to Tail.
|
||||
/// Returns the NewBasicBlock's terminator.
|
||||
|
||||
TerminatorInst *llvm::SplitBlockAndInsertIfThen(Instruction *Cmp,
|
||||
bool Unreachable, MDNode *BranchWeights) {
|
||||
Instruction *SplitBefore = Cmp->getNextNode();
|
||||
TerminatorInst *llvm::SplitBlockAndInsertIfThen(Value *Cond,
|
||||
Instruction *SplitBefore,
|
||||
bool Unreachable,
|
||||
MDNode *BranchWeights) {
|
||||
BasicBlock *Head = SplitBefore->getParent();
|
||||
BasicBlock *Tail = Head->splitBasicBlock(SplitBefore);
|
||||
TerminatorInst *HeadOldTerm = Head->getTerminator();
|
||||
@ -663,7 +664,7 @@ TerminatorInst *llvm::SplitBlockAndInsertIfThen(Instruction *Cmp,
|
||||
else
|
||||
CheckTerm = BranchInst::Create(Tail, ThenBlock);
|
||||
BranchInst *HeadNewTerm =
|
||||
BranchInst::Create(/*ifTrue*/ThenBlock, /*ifFalse*/Tail, Cmp);
|
||||
BranchInst::Create(/*ifTrue*/ThenBlock, /*ifFalse*/Tail, Cond);
|
||||
HeadNewTerm->setMetadata(LLVMContext::MD_prof, BranchWeights);
|
||||
ReplaceInstWithInst(HeadOldTerm, HeadNewTerm);
|
||||
return CheckTerm;
|
||||
|
Reference in New Issue
Block a user