@@ -124,7 +124,6 @@ exit:
124
124
ret i8 %or2
125
125
}
126
126
127
-
128
127
define i8 @test_cond_and_bothways (i8 %x ) {
129
128
; CHECK-LABEL: @test_cond_and_bothways(
130
129
; CHECK-NEXT: [[AND:%.*]] = and i8 [[X:%.*]], 91
@@ -181,8 +180,6 @@ exit:
181
180
ret i8 %or2
182
181
}
183
182
184
-
185
-
186
183
define i8 @test_cond_and_commuted (i8 %x , i1 %c1 , i1 %c2 ) {
187
184
; CHECK-LABEL: @test_cond_and_commuted(
188
185
; CHECK-NEXT: [[AND:%.*]] = and i8 [[X:%.*]], 3
@@ -343,7 +340,7 @@ exit:
343
340
ret i8 %or2
344
341
}
345
342
346
- define i32 @test_icmp_trunc1 (i32 %x ){
343
+ define i32 @test_icmp_trunc1 (i32 %x ) {
347
344
; CHECK-LABEL: @test_icmp_trunc1(
348
345
; CHECK-NEXT: entry:
349
346
; CHECK-NEXT: [[Y:%.*]] = trunc i32 [[X:%.*]] to i16
@@ -365,7 +362,7 @@ else:
365
362
ret i32 0
366
363
}
367
364
368
- define i32 @test_icmp_trunc_assume (i32 %x ){
365
+ define i32 @test_icmp_trunc_assume (i32 %x ) {
369
366
; CHECK-LABEL: @test_icmp_trunc_assume(
370
367
; CHECK-NEXT: entry:
371
368
; CHECK-NEXT: [[Y:%.*]] = trunc i32 [[X:%.*]] to i16
@@ -532,7 +529,105 @@ if.else:
532
529
ret i1 %other
533
530
}
534
531
532
+ define i8 @test_icmp_add (i8 %n , i8 %n2 , i8 %other ) {
533
+ ; CHECK-LABEL: @test_icmp_add(
534
+ ; CHECK-NEXT: entry:
535
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
536
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 32
537
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
538
+ ; CHECK: if.then:
539
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
540
+ ; CHECK-NEXT: ret i8 [[R]]
541
+ ; CHECK: if.else:
542
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
543
+ ;
544
+ entry:
545
+ %n_add = add nuw i8 %n , %n2
546
+ %cmp = icmp ult i8 %n_add , 32
547
+ br i1 %cmp , label %if.then , label %if.else
548
+
549
+ if.then:
550
+ %r = and i8 %n , 32
551
+ ret i8 %r
535
552
553
+ if.else:
554
+ ret i8 %other
555
+ }
556
+
557
+ define i8 @test_icmp_add2 (i8 %n , i8 %n2 , i8 %other ) {
558
+ ; CHECK-LABEL: @test_icmp_add2(
559
+ ; CHECK-NEXT: entry:
560
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
561
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_ADD]], 14
562
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
563
+ ; CHECK: if.then:
564
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
565
+ ; CHECK: if.else:
566
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
567
+ ; CHECK-NEXT: ret i8 [[R]]
568
+ ;
569
+ entry:
570
+ %n_add = add nuw i8 %n , %n2
571
+ %cmp = icmp uge i8 %n_add , 15
572
+ br i1 %cmp , label %if.then , label %if.else
573
+
574
+ if.then:
575
+ ret i8 %other
576
+ if.else:
577
+ %r = and i8 %n , 32
578
+ ret i8 %r
579
+
580
+ }
581
+
582
+ define i8 @test_icmp_add_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
583
+ ; CHECK-LABEL: @test_icmp_add_fail_bad_range(
584
+ ; CHECK-NEXT: entry:
585
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
586
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 33
587
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
588
+ ; CHECK: if.then:
589
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
590
+ ; CHECK-NEXT: ret i8 [[R]]
591
+ ; CHECK: if.else:
592
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
593
+ ;
594
+ entry:
595
+ %n_add = add nuw i8 %n , %n2
596
+ %cmp = icmp ule i8 %n_add , 32
597
+ br i1 %cmp , label %if.then , label %if.else
598
+
599
+ if.then:
600
+ %r = and i8 %n , 32
601
+ ret i8 %r
602
+
603
+ if.else:
604
+ ret i8 %other
605
+ }
606
+
607
+ define i8 @test_icmp_add_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
608
+ ; CHECK-LABEL: @test_icmp_add_fail_bad_pred(
609
+ ; CHECK-NEXT: entry:
610
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
611
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_ADD]], 32
612
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
613
+ ; CHECK: if.then:
614
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
615
+ ; CHECK-NEXT: ret i8 [[R]]
616
+ ; CHECK: if.else:
617
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
618
+ ;
619
+ entry:
620
+ %n_add = add nuw i8 %n , %n2
621
+ %cmp = icmp ugt i8 %n_add , 32
622
+ br i1 %cmp , label %if.then , label %if.else
623
+
624
+ if.then:
625
+ %r = and i8 %n , 32
626
+ ret i8 %r
627
+
628
+ if.else:
629
+ ret i8 %other
630
+ }
536
631
537
632
declare void @use (i1 )
538
633
declare void @sink (i8 )
0 commit comments