@@ -164,7 +164,7 @@ define i1 @assume_does_not_dominates_successor_with_may_unwind_call_before_assum
164
164
; CHECK-NEXT: br label [[EXIT]]
165
165
; CHECK: exit:
166
166
; CHECK-NEXT: [[C_2:%.*]] = icmp eq i16 [[A]], 0
167
- ; CHECK-NEXT: ret i1 true
167
+ ; CHECK-NEXT: ret i1 [[C_2]]
168
168
;
169
169
entry:
170
170
br i1 %i.0 , label %exit , label %if.then
@@ -202,6 +202,62 @@ exit:
202
202
ret i1 %c.2
203
203
}
204
204
205
+ define i1 @assume_dominates_successor_with_may_unwind_call_before_assume_uncond_branch_2 (i16 %a , i1 %c ) {
206
+ ; CHECK-LABEL: @assume_dominates_successor_with_may_unwind_call_before_assume_uncond_branch_2(
207
+ ; CHECK-NEXT: entry:
208
+ ; CHECK-NEXT: br i1 [[C:%.*]], label [[THEN:%.*]], label [[EXIT:%.*]]
209
+ ; CHECK: then:
210
+ ; CHECK-NEXT: call void @may_unwind()
211
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp eq i16 [[A:%.*]], 0
212
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
213
+ ; CHECK-NEXT: br label [[EXIT]]
214
+ ; CHECK: exit:
215
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp eq i16 [[A]], 0
216
+ ; CHECK-NEXT: ret i1 [[C_2]]
217
+ ;
218
+ entry:
219
+ br i1 %c , label %then , label %exit
220
+
221
+ then:
222
+ call void @may_unwind ()
223
+ %c.1 = icmp eq i16 %a , 0
224
+ call void @llvm.assume (i1 %c.1 )
225
+ br label %exit
226
+
227
+ exit:
228
+ %c.2 = icmp eq i16 %a , 0
229
+ ret i1 %c.2
230
+ }
231
+
232
+ define i1 @assume_dominates_successor_with_may_unwind_call_before_assume_uncond_branch_cycle (i16 %a , i1 %c ) {
233
+ ; CHECK-LABEL: @assume_dominates_successor_with_may_unwind_call_before_assume_uncond_branch_cycle(
234
+ ; CHECK-NEXT: entry:
235
+ ; CHECK-NEXT: br i1 [[C:%.*]], label [[THEN:%.*]], label [[EXIT:%.*]]
236
+ ; CHECK: then:
237
+ ; CHECK-NEXT: call void @may_unwind()
238
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp eq i16 [[A:%.*]], 0
239
+ ; CHECK-NEXT: call void @use(i1 [[C_1]])
240
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
241
+ ; CHECK-NEXT: br label [[THEN]]
242
+ ; CHECK: exit:
243
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp eq i16 [[A]], 0
244
+ ; CHECK-NEXT: ret i1 [[C_2]]
245
+ ;
246
+ entry:
247
+ br i1 %c , label %then , label %exit
248
+
249
+ then:
250
+ call void @may_unwind ()
251
+ %c.1 = icmp eq i16 %a , 0
252
+ call void @use (i1 %c.1 )
253
+ call void @llvm.assume (i1 %c.1 )
254
+ br label %then
255
+
256
+ exit:
257
+ %c.2 = icmp eq i16 %a , 0
258
+ ret i1 %c.2
259
+ }
260
+
205
261
define i1 @assume_single_bb (i8 %a , i8 %b , i1 %c ) {
206
262
; CHECK-LABEL: @assume_single_bb(
207
263
; CHECK-NEXT: [[ADD_1:%.*]] = add nuw nsw i8 [[A:%.*]], 1
0 commit comments