diff --git a/llvm/test/Transforms/SimplifyCFG/fold-branch-to-common-dest.ll b/llvm/test/Transforms/SimplifyCFG/fold-branch-to-common-dest.ll index 9fb5164d44d4..37f48a9a7e03 100644 --- a/llvm/test/Transforms/SimplifyCFG/fold-branch-to-common-dest.ll +++ b/llvm/test/Transforms/SimplifyCFG/fold-branch-to-common-dest.ll @@ -84,6 +84,37 @@ final_right: ret void } +define void @one_pred_trunc_cond(i8 %v0, i8 %v1) { +; CHECK-LABEL: @one_pred_trunc_cond( +; CHECK-NEXT: pred: +; CHECK-NEXT: [[C0:%.*]] = icmp eq i8 [[V0:%.*]], 0 +; CHECK-NEXT: br i1 [[C0]], label [[DISPATCH:%.*]], label [[FINAL_RIGHT:%.*]] +; CHECK: dispatch: +; CHECK-NEXT: [[C1:%.*]] = trunc i8 [[V1:%.*]] to i1 +; CHECK-NEXT: br i1 [[C1]], label [[FINAL_LEFT:%.*]], label [[FINAL_RIGHT]] +; CHECK: common.ret: +; CHECK-NEXT: ret void +; CHECK: final_left: +; CHECK-NEXT: call void @sideeffect0() +; CHECK-NEXT: br label [[COMMON_RET:%.*]] +; CHECK: final_right: +; CHECK-NEXT: call void @sideeffect1() +; CHECK-NEXT: br label [[COMMON_RET]] +; +pred: + %c0 = icmp eq i8 %v0, 0 + br i1 %c0, label %dispatch, label %final_right +dispatch: + %c1 = trunc i8 %v1 to i1 + br i1 %c1, label %final_left, label %final_right +final_left: + call void @sideeffect0() + ret void +final_right: + call void @sideeffect1() + ret void +} + ; More complex case, there's an extra op that is safe to execute unconditionally. define void @one_pred_with_extra_op(i8 %v0, i8 %v1) {