Skip to content

Commit 8d9ea71

Browse files
committed
[ValueTracking] Add tests for computing knownbits from (icmp ult/ule (add nuw X, Y), C); NFC
1 parent 45f5fa2 commit 8d9ea71

File tree

1 file changed

+100
-5
lines changed

1 file changed

+100
-5
lines changed

llvm/test/Transforms/InstCombine/known-bits.ll

Lines changed: 100 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ exit:
124124
ret i8 %or2
125125
}
126126

127-
128127
define i8 @test_cond_and_bothways(i8 %x) {
129128
; CHECK-LABEL: @test_cond_and_bothways(
130129
; CHECK-NEXT: [[AND:%.*]] = and i8 [[X:%.*]], 91
@@ -181,8 +180,6 @@ exit:
181180
ret i8 %or2
182181
}
183182

184-
185-
186183
define i8 @test_cond_and_commuted(i8 %x, i1 %c1, i1 %c2) {
187184
; CHECK-LABEL: @test_cond_and_commuted(
188185
; CHECK-NEXT: [[AND:%.*]] = and i8 [[X:%.*]], 3
@@ -343,7 +340,7 @@ exit:
343340
ret i8 %or2
344341
}
345342

346-
define i32 @test_icmp_trunc1(i32 %x){
343+
define i32 @test_icmp_trunc1(i32 %x) {
347344
; CHECK-LABEL: @test_icmp_trunc1(
348345
; CHECK-NEXT: entry:
349346
; CHECK-NEXT: [[Y:%.*]] = trunc i32 [[X:%.*]] to i16
@@ -365,7 +362,7 @@ else:
365362
ret i32 0
366363
}
367364

368-
define i32 @test_icmp_trunc_assume(i32 %x){
365+
define i32 @test_icmp_trunc_assume(i32 %x) {
369366
; CHECK-LABEL: @test_icmp_trunc_assume(
370367
; CHECK-NEXT: entry:
371368
; CHECK-NEXT: [[Y:%.*]] = trunc i32 [[X:%.*]] to i16
@@ -532,7 +529,105 @@ if.else:
532529
ret i1 %other
533530
}
534531

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
535552

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+
}
536631

537632
declare void @use(i1)
538633
declare void @sink(i8)

0 commit comments

Comments
 (0)