[llvm] 1f568f2 - [InstCombine] Add test for and of icmp ne zero with undefs (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 11 10:01:37 PST 2021


Author: Nikita Popov
Date: 2021-11-11T19:01:29+01:00
New Revision: 1f568f2a25020198e3970efdbf4decceddb3ae13

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

LOG: [InstCombine] Add test for and of icmp ne zero with undefs (NFC)

We handle this in the conjugated "or" fold, but not for "and".

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/or.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/or.ll b/llvm/test/Transforms/InstCombine/or.ll
index 013183a390ac7..4e66efc0800e1 100644
--- a/llvm/test/Transforms/InstCombine/or.ll
+++ b/llvm/test/Transforms/InstCombine/or.ll
@@ -221,8 +221,8 @@ define i1 @test25_logical(i32 %A, i32 %B) {
 }
 
 ; PR5634
-define i1 @test26(i32 %A, i32 %B) {
-; CHECK-LABEL: @test26(
+define i1 @and_icmp_eq_0(i32 %A, i32 %B) {
+; CHECK-LABEL: @and_icmp_eq_0(
 ; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 0
 ; CHECK-NEXT:    ret i1 [[TMP2]]
@@ -234,8 +234,46 @@ define i1 @test26(i32 %A, i32 %B) {
   ret i1 %D
 }
 
-define i1 @test26_logical(i32 %A, i32 %B) {
-; CHECK-LABEL: @test26_logical(
+define <2 x i1> @and_icmp_eq_0_vector(<2 x i32> %A, <2 x i32> %B) {
+; CHECK-LABEL: @and_icmp_eq_0_vector(
+; CHECK-NEXT:    [[TMP1:%.*]] = or <2 x i32> [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x i32> [[TMP1]], zeroinitializer
+; CHECK-NEXT:    ret <2 x i1> [[TMP2]]
+;
+  %C1 = icmp eq <2 x i32> %A, zeroinitializer
+  %C2 = icmp eq <2 x i32> %B, zeroinitializer
+  %D = and <2 x i1> %C1, %C2
+  ret <2 x i1> %D
+}
+
+define <2 x i1> @and_icmp_eq_0_vector_undef1(<2 x i32> %A, <2 x i32> %B) {
+; CHECK-LABEL: @and_icmp_eq_0_vector_undef1(
+; CHECK-NEXT:    [[C1:%.*]] = icmp eq <2 x i32> [[A:%.*]], <i32 0, i32 undef>
+; CHECK-NEXT:    [[C2:%.*]] = icmp eq <2 x i32> [[B:%.*]], <i32 0, i32 undef>
+; CHECK-NEXT:    [[D:%.*]] = and <2 x i1> [[C1]], [[C2]]
+; CHECK-NEXT:    ret <2 x i1> [[D]]
+;
+  %C1 = icmp eq <2 x i32> %A, <i32 0, i32 undef>
+  %C2 = icmp eq <2 x i32> %B, <i32 0, i32 undef>
+  %D = and <2 x i1> %C1, %C2
+  ret <2 x i1> %D
+}
+
+define <2 x i1> @and_icmp_eq_0_vector_undef2(<2 x i32> %A, <2 x i32> %B) {
+; CHECK-LABEL: @and_icmp_eq_0_vector_undef2(
+; CHECK-NEXT:    [[C1:%.*]] = icmp eq <2 x i32> [[A:%.*]], <i32 0, i32 undef>
+; CHECK-NEXT:    [[C2:%.*]] = icmp eq <2 x i32> [[B:%.*]], <i32 undef, i32 0>
+; CHECK-NEXT:    [[D:%.*]] = and <2 x i1> [[C1]], [[C2]]
+; CHECK-NEXT:    ret <2 x i1> [[D]]
+;
+  %C1 = icmp eq <2 x i32> %A, <i32 0, i32 undef>
+  %C2 = icmp eq <2 x i32> %B, <i32 undef, i32 0>
+  %D = and <2 x i1> %C1, %C2
+  ret <2 x i1> %D
+}
+
+define i1 @and_icmp_eq_0_logical(i32 %A, i32 %B) {
+; CHECK-LABEL: @and_icmp_eq_0_logical(
 ; CHECK-NEXT:    [[C1:%.*]] = icmp eq i32 [[A:%.*]], 0
 ; CHECK-NEXT:    [[C2:%.*]] = icmp eq i32 [[B:%.*]], 0
 ; CHECK-NEXT:    [[D:%.*]] = select i1 [[C1]], i1 [[C2]], i1 false


        


More information about the llvm-commits mailing list