@@ -242,4 +242,140 @@ out:
242
242
ret i1 %ret
243
243
}
244
244
245
+ define i1 @test7 (i32 %a , i32 %b ) {
246
+ ; CHECK-LABEL: @test7(
247
+ ; CHECK-NEXT: begin:
248
+ ; CHECK-NEXT: [[CMP0:%.*]] = icmp sge i32 [[A:%.*]], 0
249
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[B:%.*]], 0
250
+ ; CHECK-NEXT: [[BR:%.*]] = and i1 [[CMP0]], [[CMP1]]
251
+ ; CHECK-NEXT: br i1 [[BR]], label [[BB:%.*]], label [[EXIT:%.*]]
252
+ ; CHECK: bb:
253
+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[A]], [[B]]
254
+ ; CHECK-NEXT: br label [[CONT:%.*]]
255
+ ; CHECK: cont:
256
+ ; CHECK-NEXT: [[RES:%.*]] = icmp sge i32 [[ADD]], 0
257
+ ; CHECK-NEXT: br label [[EXIT]]
258
+ ; CHECK: exit:
259
+ ; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ]
260
+ ; CHECK-NEXT: ret i1 [[IV]]
261
+ ;
262
+ begin:
263
+ %cmp0 = icmp sge i32 %a , 0
264
+ %cmp1 = icmp sge i32 %b , 0
265
+ %br = and i1 %cmp0 , %cmp1
266
+ br i1 %br , label %bb , label %exit
267
+
268
+ bb:
269
+ %add = add i32 %a , %b
270
+ br label %cont
271
+
272
+ cont:
273
+ %res = icmp sge i32 %add , 0
274
+ br label %exit
275
+
276
+ exit:
277
+ %iv = phi i1 [ true , %begin ], [ %res , %cont ]
278
+ ret i1 %iv
279
+ }
280
+
281
+ define i1 @test8 (i32 %a , i32 %b ) {
282
+ ; CHECK-LABEL: @test8(
283
+ ; CHECK-NEXT: begin:
284
+ ; CHECK-NEXT: [[CMP0:%.*]] = icmp sge i32 [[A:%.*]], 0
285
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[B:%.*]], 0
286
+ ; CHECK-NEXT: [[BR:%.*]] = and i1 [[CMP0]], [[CMP1]]
287
+ ; CHECK-NEXT: br i1 [[BR]], label [[BB:%.*]], label [[EXIT:%.*]]
288
+ ; CHECK: bb:
289
+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i32 [[A]], [[B]]
290
+ ; CHECK-NEXT: br label [[CONT:%.*]]
291
+ ; CHECK: cont:
292
+ ; CHECK-NEXT: [[RES:%.*]] = icmp sge i32 [[ADD]], 0
293
+ ; CHECK-NEXT: br label [[EXIT]]
294
+ ; CHECK: exit:
295
+ ; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ]
296
+ ; CHECK-NEXT: ret i1 [[IV]]
297
+ ;
298
+ begin:
299
+ %cmp0 = icmp sge i32 %a , 0
300
+ %cmp1 = icmp sge i32 %b , 0
301
+ %br = and i1 %cmp0 , %cmp1
302
+ br i1 %br , label %bb , label %exit
303
+
304
+ bb:
305
+ %add = add nsw i32 %a , %b
306
+ br label %cont
307
+
308
+ cont:
309
+ %res = icmp sge i32 %add , 0
310
+ br label %exit
311
+
312
+ exit:
313
+ %iv = phi i1 [ true , %begin ], [ %res , %cont ]
314
+ ret i1 %iv
315
+ }
316
+
317
+ define i1 @test10 (i32 %a , i32 %b ) {
318
+ ; CHECK-LABEL: @test10(
319
+ ; CHECK-NEXT: begin:
320
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[A:%.*]], -256
321
+ ; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
322
+ ; CHECK: bb:
323
+ ; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A]], [[B:%.*]]
324
+ ; CHECK-NEXT: br label [[CONT:%.*]]
325
+ ; CHECK: cont:
326
+ ; CHECK-NEXT: [[RES:%.*]] = icmp uge i32 [[ADD]], -256
327
+ ; CHECK-NEXT: br label [[EXIT]]
328
+ ; CHECK: exit:
329
+ ; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ]
330
+ ; CHECK-NEXT: ret i1 [[IV]]
331
+ ;
332
+ begin:
333
+ %cmp = icmp uge i32 %a , 4294967040
334
+ br i1 %cmp , label %bb , label %exit
335
+
336
+ bb:
337
+ %add = add i32 %a , %b
338
+ br label %cont
339
+
340
+ cont:
341
+ %res = icmp uge i32 %add , 4294967040
342
+ br label %exit
343
+
344
+ exit:
345
+ %iv = phi i1 [ true , %begin ], [ %res , %cont ]
346
+ ret i1 %iv
347
+ }
348
+
349
+ define i1 @test11 (i32 %a , i32 %b ) {
350
+ ; CHECK-LABEL: @test11(
351
+ ; CHECK-NEXT: begin:
352
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[A:%.*]], -256
353
+ ; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]]
354
+ ; CHECK: bb:
355
+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[A]], [[B:%.*]]
356
+ ; CHECK-NEXT: br label [[CONT:%.*]]
357
+ ; CHECK: cont:
358
+ ; CHECK-NEXT: [[RES:%.*]] = icmp uge i32 [[ADD]], -256
359
+ ; CHECK-NEXT: br label [[EXIT]]
360
+ ; CHECK: exit:
361
+ ; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ]
362
+ ; CHECK-NEXT: ret i1 [[IV]]
363
+ ;
364
+ begin:
365
+ %cmp = icmp uge i32 %a , 4294967040
366
+ br i1 %cmp , label %bb , label %exit
367
+
368
+ bb:
369
+ %add = add nuw i32 %a , %b
370
+ br label %cont
371
+
372
+ cont:
373
+ %res = icmp uge i32 %add , 4294967040
374
+ br label %exit
375
+
376
+ exit:
377
+ %iv = phi i1 [ true , %begin ], [ %res , %cont ]
378
+ ret i1 %iv
379
+ }
380
+
245
381
attributes #4 = { noreturn }
0 commit comments