[llvm] f50efe9 - [LVI] Pre commit test for #124480 (NFC)

Andreas Jonson via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 31 13:51:20 PST 2025


Author: Andreas Jonson
Date: 2025-01-31T22:46:44+01:00
New Revision: f50efe9c0b2f0a872b230b609b3c49a561474c96

URL: https://github.com/llvm/llvm-project/commit/f50efe9c0b2f0a872b230b609b3c49a561474c96
DIFF: https://github.com/llvm/llvm-project/commit/f50efe9c0b2f0a872b230b609b3c49a561474c96.diff

LOG: [LVI] Pre commit test for #124480 (NFC)

Added: 
    

Modified: 
    llvm/test/Transforms/CorrelatedValuePropagation/cond-at-use.ll
    llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/CorrelatedValuePropagation/cond-at-use.ll b/llvm/test/Transforms/CorrelatedValuePropagation/cond-at-use.ll
index cca648bb6ea23e..dba15165ebee60 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/cond-at-use.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/cond-at-use.ll
@@ -555,6 +555,32 @@ define i16 @and_elide(i16 noundef %x) {
   ret i16 %sel
 }
 
+define i16 @and_elide_trunc_cond(i16 noundef %x) {
+; CHECK-LABEL: @and_elide_trunc_cond(
+; CHECK-NEXT:    [[AND:%.*]] = and i16 [[X:%.*]], 1
+; CHECK-NEXT:    [[CMP:%.*]] = trunc nuw i16 [[X]] to i1
+; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[CMP]], i16 [[AND]], i16 24
+; CHECK-NEXT:    ret i16 [[SEL]]
+;
+  %and = and i16 %x, 1
+  %cmp = trunc nuw i16 %x to i1
+  %sel = select i1 %cmp, i16 %and, i16 24
+  ret i16 %sel
+}
+
+define <2 x i8> @and_elide_trunc_cond_vec(<2 x i8> noundef %x) {
+; CHECK-LABEL: @and_elide_trunc_cond_vec(
+; CHECK-NEXT:    [[AND:%.*]] = and <2 x i8> [[X:%.*]], splat (i8 1)
+; CHECK-NEXT:    [[CMP:%.*]] = trunc nuw <2 x i8> [[X]] to <2 x i1>
+; CHECK-NEXT:    [[SEL:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[AND]], <2 x i8> splat (i8 24)
+; CHECK-NEXT:    ret <2 x i8> [[SEL]]
+;
+  %and = and <2 x i8> %x, splat (i8 1)
+  %cmp = trunc nuw <2 x i8> %x to <2 x i1>
+  %sel = select <2 x i1> %cmp, <2 x i8> %and, <2 x i8> splat (i8 24)
+  ret <2 x i8> %sel
+}
+
 define i16 @cond_value_may_not_well_defined(i16 %x) {
 ; CHECK-LABEL: @cond_value_may_not_well_defined(
 ; CHECK-NEXT:    [[AND:%.*]] = and i16 [[X:%.*]], 7

diff  --git a/llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll b/llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll
index e4de34c339d2de..c6579e5c1ac7db 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll
@@ -1519,6 +1519,14 @@ define void @test_trunc_bittest(i8 %a) {
 ; CHECK-NEXT:    call void @check1(i1 [[CMP1]])
 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A]], 0
 ; CHECK-NEXT:    call void @check1(i1 [[CMP2]])
+; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i8 [[A]], 1
+; CHECK-NEXT:    call void @check1(i1 [[CMP3]])
+; CHECK-NEXT:    [[CMP4:%.*]] = icmp eq i8 [[A]], 1
+; CHECK-NEXT:    call void @check1(i1 [[CMP4]])
+; CHECK-NEXT:    [[CMP5:%.*]] = icmp ne i8 [[A]], -1
+; CHECK-NEXT:    call void @check1(i1 [[CMP5]])
+; CHECK-NEXT:    [[CMP6:%.*]] = icmp eq i8 [[A]], -1
+; CHECK-NEXT:    call void @check1(i1 [[CMP6]])
 ; CHECK-NEXT:    ret void
 ; CHECK:       if.false:
 ; CHECK-NEXT:    ret void
@@ -1531,6 +1539,14 @@ if.true:
   call void @check1(i1 %cmp1)
   %cmp2 = icmp eq i8 %a, 0
   call void @check1(i1 %cmp2)
+  %cmp3 = icmp ne i8 %a, 1
+  call void @check1(i1 %cmp3)
+  %cmp4 = icmp eq i8 %a, 1
+  call void @check1(i1 %cmp4)
+  %cmp5 = icmp ne i8 %a, -1
+  call void @check1(i1 %cmp5)
+  %cmp6 = icmp eq i8 %a, -1
+  call void @check1(i1 %cmp6)
   ret void
 
 if.false:
@@ -1547,6 +1563,14 @@ define void @test_trunc_not_bittest(i8 %a) {
 ; CHECK-NEXT:    call void @check1(i1 [[CMP1]])
 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A]], -1
 ; CHECK-NEXT:    call void @check1(i1 [[CMP2]])
+; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i8 [[A]], 0
+; CHECK-NEXT:    call void @check1(i1 [[CMP3]])
+; CHECK-NEXT:    [[CMP4:%.*]] = icmp eq i8 [[A]], 0
+; CHECK-NEXT:    call void @check1(i1 [[CMP4]])
+; CHECK-NEXT:    [[CMP5:%.*]] = icmp ne i8 [[A]], -2
+; CHECK-NEXT:    call void @check1(i1 [[CMP5]])
+; CHECK-NEXT:    [[CMP6:%.*]] = icmp eq i8 [[A]], -2
+; CHECK-NEXT:    call void @check1(i1 [[CMP6]])
 ; CHECK-NEXT:    ret void
 ; CHECK:       if.false:
 ; CHECK-NEXT:    ret void
@@ -1560,54 +1584,86 @@ if.true:
   call void @check1(i1 %cmp1)
   %cmp2 = icmp eq i8 %a, -1
   call void @check1(i1 %cmp2)
+  %cmp3 = icmp ne i8 %a, 0
+  call void @check1(i1 %cmp3)
+  %cmp4 = icmp eq i8 %a, 0
+  call void @check1(i1 %cmp4)
+  %cmp5 = icmp ne i8 %a, -2
+  call void @check1(i1 %cmp5)
+  %cmp6 = icmp eq i8 %a, -2
+  call void @check1(i1 %cmp6)
   ret void
 
 if.false:
   ret void
 }
 
-define void @test_icmp_trunc(i8 %a) {
-; CHECK-LABEL: @test_icmp_trunc(
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i8 [[A:%.*]], 0
-; CHECK-NEXT:    br i1 [[CMP1]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
+define void @test_trunc_nuw_bittest(i8 %a) {
+; CHECK-LABEL: @test_trunc_nuw_bittest(
+; CHECK-NEXT:    [[TRUNC:%.*]] = trunc nuw i8 [[A:%.*]] to i1
+; CHECK-NEXT:    br i1 [[TRUNC]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
 ; CHECK:       if.true:
-; CHECK-NEXT:    [[TRUNC:%.*]] = trunc i8 [[A]] to i1
-; CHECK-NEXT:    call void @check1(i1 [[TRUNC]])
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i8 [[A]], 0
+; CHECK-NEXT:    call void @check1(i1 [[CMP1]])
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A]], 0
+; CHECK-NEXT:    call void @check1(i1 [[CMP2]])
+; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i8 [[A]], 1
+; CHECK-NEXT:    call void @check1(i1 [[CMP3]])
+; CHECK-NEXT:    [[CMP4:%.*]] = icmp eq i8 [[A]], 1
+; CHECK-NEXT:    call void @check1(i1 [[CMP4]])
 ; CHECK-NEXT:    ret void
 ; CHECK:       if.false:
 ; CHECK-NEXT:    ret void
 ;
-  %cmp1 = icmp ne i8 %a, 0
-  br i1 %cmp1, label %if.true, label %if.false
+  %trunc = trunc nuw i8 %a to i1
+  br i1 %trunc, label %if.true, label %if.false
 
 if.true:
-  %trunc = trunc i8 %a to i1
-  call void @check1(i1 %trunc)
+  %cmp1 = icmp ne i8 %a, 0
+  call void @check1(i1 %cmp1)
+  %cmp2 = icmp eq i8 %a, 0
+  call void @check1(i1 %cmp2)
+  %cmp3 = icmp ne i8 %a, 1
+  call void @check1(i1 %cmp3)
+  %cmp4 = icmp eq i8 %a, 1
+  call void @check1(i1 %cmp4)
   ret void
 
 if.false:
   ret void
 }
 
-define void @test_icmp_trunc_not(i8 %a) {
-; CHECK-LABEL: @test_icmp_trunc_not(
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], -1
-; CHECK-NEXT:    br i1 [[CMP1]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
-; CHECK:       if.true:
-; CHECK-NEXT:    [[TRUNC:%.*]] = trunc i8 [[A]] to i1
+define void @test_trunc_nuw_not_bittest(i8 %a) {
+; CHECK-LABEL: @test_trunc_nuw_not_bittest(
+; CHECK-NEXT:    [[TRUNC:%.*]] = trunc nuw i8 [[A:%.*]] to i1
 ; CHECK-NEXT:    [[NOT:%.*]] = xor i1 [[TRUNC]], true
-; CHECK-NEXT:    call void @check1(i1 [[TRUNC]])
+; CHECK-NEXT:    br i1 [[NOT]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
+; CHECK:       if.true:
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ne i8 [[A]], 0
+; CHECK-NEXT:    call void @check1(i1 [[CMP1]])
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i8 [[A]], 0
+; CHECK-NEXT:    call void @check1(i1 [[CMP2]])
+; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i8 [[A]], 1
+; CHECK-NEXT:    call void @check1(i1 [[CMP3]])
+; CHECK-NEXT:    [[CMP4:%.*]] = icmp eq i8 [[A]], 1
+; CHECK-NEXT:    call void @check1(i1 [[CMP4]])
 ; CHECK-NEXT:    ret void
 ; CHECK:       if.false:
 ; CHECK-NEXT:    ret void
 ;
-  %cmp1 = icmp eq i8 %a, -1
-  br i1 %cmp1, label %if.true, label %if.false
+  %trunc = trunc nuw i8 %a to i1
+  %not = xor i1 %trunc, true
+  br i1 %not, label %if.true, label %if.false
 
 if.true:
-  %trunc = trunc i8 %a to i1
-  %not = xor i1 %trunc, true
-  call void @check1(i1 %trunc)
+  %cmp1 = icmp ne i8 %a, 0
+  call void @check1(i1 %cmp1)
+  %cmp2 = icmp eq i8 %a, 0
+  call void @check1(i1 %cmp2)
+  %cmp3 = icmp ne i8 %a, 1
+  call void @check1(i1 %cmp3)
+  %cmp4 = icmp eq i8 %a, 1
+  call void @check1(i1 %cmp4)
   ret void
 
 if.false:


        


More information about the llvm-commits mailing list