@@ -84,6 +84,37 @@ final_right:
8484 ret void
8585}
8686
87+ define void @one_pred_trunc_cond (i8 %v0 , i8 %v1 ) {
88+ ; CHECK-LABEL: @one_pred_trunc_cond(
89+ ; CHECK-NEXT: pred:
90+ ; CHECK-NEXT: [[C0:%.*]] = icmp eq i8 [[V0:%.*]], 0
91+ ; CHECK-NEXT: br i1 [[C0]], label [[DISPATCH:%.*]], label [[FINAL_RIGHT:%.*]]
92+ ; CHECK: dispatch:
93+ ; CHECK-NEXT: [[C1:%.*]] = trunc i8 [[V1:%.*]] to i1
94+ ; CHECK-NEXT: br i1 [[C1]], label [[FINAL_LEFT:%.*]], label [[FINAL_RIGHT]]
95+ ; CHECK: common.ret:
96+ ; CHECK-NEXT: ret void
97+ ; CHECK: final_left:
98+ ; CHECK-NEXT: call void @sideeffect0()
99+ ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
100+ ; CHECK: final_right:
101+ ; CHECK-NEXT: call void @sideeffect1()
102+ ; CHECK-NEXT: br label [[COMMON_RET]]
103+ ;
104+ pred:
105+ %c0 = icmp eq i8 %v0 , 0
106+ br i1 %c0 , label %dispatch , label %final_right
107+ dispatch:
108+ %c1 = trunc i8 %v1 to i1
109+ br i1 %c1 , label %final_left , label %final_right
110+ final_left:
111+ call void @sideeffect0 ()
112+ ret void
113+ final_right:
114+ call void @sideeffect1 ()
115+ ret void
116+ }
117+
87118; More complex case, there's an extra op that is safe to execute unconditionally.
88119
89120define void @one_pred_with_extra_op (i8 %v0 , i8 %v1 ) {
0 commit comments