Skip to content

Commit f2bf8e2

Browse files
committed
[SimplifyCFG] Handle trunc condition in foldBranchToCommonDest.
1 parent 4dd80b7 commit f2bf8e2

File tree

2 files changed

+3
-6
lines changed

2 files changed

+3
-6
lines changed

llvm/lib/Transforms/Utils/SimplifyCFG.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4087,9 +4087,7 @@ bool llvm::foldBranchToCommonDest(BranchInst *BI, DomTreeUpdater *DTU,
40874087

40884088
Instruction *Cond = dyn_cast<Instruction>(BI->getCondition());
40894089

4090-
if (!Cond ||
4091-
(!isa<CmpInst>(Cond) && !isa<BinaryOperator>(Cond) &&
4092-
!isa<SelectInst>(Cond)) ||
4090+
if (!Cond || !isa<CmpInst, BinaryOperator, SelectInst, TruncInst>(Cond) ||
40934091
Cond->getParent() != BB || !Cond->hasOneUse())
40944092
return false;
40954093

llvm/test/Transforms/SimplifyCFG/fold-branch-to-common-dest.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,9 @@ define void @one_pred_trunc_cond(i8 %v0, i8 %v1) {
8888
; CHECK-LABEL: @one_pred_trunc_cond(
8989
; CHECK-NEXT: pred:
9090
; CHECK-NEXT: [[C0:%.*]] = icmp eq i8 [[V0:%.*]], 0
91-
; CHECK-NEXT: br i1 [[C0]], label [[DISPATCH:%.*]], label [[FINAL_RIGHT:%.*]]
92-
; CHECK: dispatch:
9391
; CHECK-NEXT: [[C1:%.*]] = trunc i8 [[V1:%.*]] to i1
94-
; CHECK-NEXT: br i1 [[C1]], label [[FINAL_LEFT:%.*]], label [[FINAL_RIGHT]]
92+
; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[C0]], i1 [[C1]], i1 false
93+
; CHECK-NEXT: br i1 [[OR_COND]], label [[FINAL_LEFT:%.*]], label [[FINAL_RIGHT:%.*]]
9594
; CHECK: common.ret:
9695
; CHECK-NEXT: ret void
9796
; CHECK: final_left:

0 commit comments

Comments
 (0)