1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

[SimplifyCFG] simplifySingleResume(): FoldReturnIntoUncondBranch() already knows how to preserve DomTree

... so just ensure that we pass DomTreeUpdater it into it.

Apparently, there were no dedicated tests just for that functionality,
so i'm adding one here.
This commit is contained in:
Roman Lebedev 2020-12-19 18:09:10 +03:00
parent a314860e9c
commit 8e036d3e3a
2 changed files with 36 additions and 2 deletions

View File

@ -4424,7 +4424,7 @@ bool SimplifyCFGOpt::simplifyReturn(ReturnInst *RI, IRBuilder<> &Builder) {
BasicBlock *Pred = UncondBranchPreds.pop_back_val();
LLVM_DEBUG(dbgs() << "FOLDING: " << *BB
<< "INTO UNCOND BRANCH PRED: " << *Pred);
(void)FoldReturnIntoUncondBranch(RI, BB, Pred);
(void)FoldReturnIntoUncondBranch(RI, BB, Pred, DTU);
}
// If we eliminated all predecessors of the block, delete the block now.
@ -4432,7 +4432,10 @@ bool SimplifyCFGOpt::simplifyReturn(ReturnInst *RI, IRBuilder<> &Builder) {
// We know there are no successors, so just nuke the block.
if (LoopHeaders)
LoopHeaders->erase(BB);
BB->eraseFromParent();
if (DTU)
DTU->deleteBB(BB);
else
BB->eraseFromParent();
}
return true;

View File

@ -0,0 +1,31 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -simplifycfg-dup-ret -S | FileCheck %s
declare void @bar()
declare void @baz()
define void @foo(i1 %c) {
; CHECK-LABEL: @foo(
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 [[C:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]]
; CHECK: true:
; CHECK-NEXT: call void @bar()
; CHECK-NEXT: ret void
; CHECK: false:
; CHECK-NEXT: call void @baz()
; CHECK-NEXT: ret void
;
entry:
br i1 %c, label %true, label %false
true:
call void @bar()
br label %end
false:
call void @baz()
br label %end
end:
ret void
}