@@ -316,12 +316,13 @@ define i1 @sub_nuw_neg_i16(i16 %a) {
316
316
; CHECK-LABEL: @sub_nuw_neg_i16(
317
317
; CHECK-NEXT: entry:
318
318
; CHECK-NEXT: [[NEG2:%.*]] = sub nuw i16 [[A:%.*]], -305
319
- ; CHECK-NEXT: br i1 false, label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
319
+ ; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i16 0, [[NEG2]]
320
+ ; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
320
321
; CHECK: exit.1:
321
- ; CHECK-NEXT: ret i1 true
322
+ ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i16 [[A]], 0
323
+ ; CHECK-NEXT: ret i1 [[C_2]]
322
324
; CHECK: exit.2:
323
- ; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i16 [[A]], 0
324
- ; CHECK-NEXT: ret i1 [[C_3]]
325
+ ; CHECK-NEXT: ret i1 true
325
326
;
326
327
entry:
327
328
%neg2 = sub nuw i16 %a , -305
@@ -380,7 +381,6 @@ entry:
380
381
ret i1 %c
381
382
}
382
383
383
- ; FIXME: currently this incorrectly simplifies %c4 to true.
384
384
define i1 @pr76713 (i16 %i1 , i16 %i3 ) {
385
385
; CHECK-LABEL: @pr76713(
386
386
; CHECK-NEXT: entry:
@@ -394,7 +394,8 @@ define i1 @pr76713(i16 %i1, i16 %i3) {
394
394
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i16 [[I1]], -3
395
395
; CHECK-NEXT: [[ARRAYIDX_IDX:%.*]] = mul nuw nsw i16 [[I3]], 4
396
396
; CHECK-NEXT: [[I6:%.*]] = add nuw nsw i16 [[ARRAYIDX_IDX]], [[SUB]]
397
- ; CHECK-NEXT: ret i1 true
397
+ ; CHECK-NEXT: [[C4:%.*]] = icmp ult i16 12, [[I6]]
398
+ ; CHECK-NEXT: ret i1 [[C4]]
398
399
; CHECK: else:
399
400
; CHECK-NEXT: ret i1 false
400
401
;
@@ -417,7 +418,6 @@ else:
417
418
ret i1 0
418
419
}
419
420
420
- ; FIXME: Currently gets mis-compiled.
421
421
define void @sub_nuw_chained_positive_constants (i16 %a ) {
422
422
; CHECK-LABEL: @sub_nuw_chained_positive_constants(
423
423
; CHECK-NEXT: entry:
@@ -426,16 +426,13 @@ define void @sub_nuw_chained_positive_constants(i16 %a) {
426
426
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i16 [[SUB2]], 90
427
427
; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
428
428
; CHECK: exit.1:
429
- ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i16 [[A]], 120
430
- ; CHECK-NEXT: call void @use(i1 [[C_2]])
429
+ ; CHECK-NEXT: call void @use(i1 true)
431
430
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i16 [[A]], 121
432
431
; CHECK-NEXT: call void @use(i1 [[C_3]])
433
432
; CHECK-NEXT: ret void
434
433
; CHECK: exit.2:
435
- ; CHECK-NEXT: [[C_4:%.*]] = icmp ugt i16 [[A]], 120
436
- ; CHECK-NEXT: call void @use(i1 [[C_4]])
437
- ; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i16 [[A]], 121
438
- ; CHECK-NEXT: call void @use(i1 [[C_5]])
434
+ ; CHECK-NEXT: call void @use(i1 false)
435
+ ; CHECK-NEXT: call void @use(i1 false)
439
436
; CHECK-NEXT: ret void
440
437
;
441
438
entry:
@@ -459,7 +456,6 @@ exit.2:
459
456
ret void
460
457
}
461
458
462
- ; FIXME: Currently gets mis-compiled.
463
459
define void @sub_nuw_chained_negative_constants (i8 %a ) {
464
460
; CHECK-LABEL: @sub_nuw_chained_negative_constants(
465
461
; CHECK-NEXT: entry:
@@ -468,14 +464,13 @@ define void @sub_nuw_chained_negative_constants(i8 %a) {
468
464
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[SUB2]], 20
469
465
; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
470
466
; CHECK: exit.1:
471
- ; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[A]], -96
472
- ; CHECK-NEXT: call void @use(i1 [[C_2]])
467
+ ; CHECK-NEXT: call void @use(i1 true)
473
468
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[A]], -95
474
469
; CHECK-NEXT: call void @use(i1 [[C_3]])
475
470
; CHECK-NEXT: ret void
476
471
; CHECK: exit.2:
477
- ; CHECK-NEXT: call void @use(i1 true )
478
- ; CHECK-NEXT: call void @use(i1 true )
472
+ ; CHECK-NEXT: call void @use(i1 false )
473
+ ; CHECK-NEXT: call void @use(i1 false )
479
474
; CHECK-NEXT: ret void
480
475
;
481
476
entry:
0 commit comments