@@ -84,6 +84,37 @@ final_right:
84
84
ret void
85
85
}
86
86
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
+
87
118
; More complex case, there's an extra op that is safe to execute unconditionally.
88
119
89
120
define void @one_pred_with_extra_op (i8 %v0 , i8 %v1 ) {
0 commit comments