[llvm] 5979c65 - [InstCombine] Add vector tests for icmp_eq(add(X,C1),add(Y,C2)) -> icmp_eq(add(X,C1-C2),Y)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 10 01:01:34 PST 2022


Author: Simon Pilgrim
Date: 2022-03-10T09:01:19Z
New Revision: 5979c659aaffc2119c0809a8ca076f02ce4bf909

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

LOG: [InstCombine] Add vector tests for icmp_eq(add(X,C1),add(Y,C2)) -> icmp_eq(add(X,C1-C2),Y)

As mentioned on Issue #32161 we don't even have uniform vector support for this fold

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/icmp.ll b/llvm/test/Transforms/InstCombine/icmp.ll
index 56245e0143cd0..8da2ed3415b62 100644
--- a/llvm/test/Transforms/InstCombine/icmp.ll
+++ b/llvm/test/Transforms/InstCombine/icmp.ll
@@ -1579,6 +1579,45 @@ define i1 @icmp_add20_sge_add57(i32 %x, i32 %y) {
   ret i1 %cmp
 }
 
+define <2 x i1> @icmp_add20_sge_add57_splat(<2 x i32> %x, <2 x i32> %y) {
+; CHECK-LABEL: @icmp_add20_sge_add57_splat(
+; CHECK-NEXT:    [[TMP1:%.*]] = add nsw <2 x i32> [[X:%.*]], <i32 20, i32 20>
+; CHECK-NEXT:    [[TMP2:%.*]] = add nsw <2 x i32> [[Y:%.*]], <i32 57, i32 57>
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge <2 x i32> [[TMP1]], [[TMP2]]
+; CHECK-NEXT:    ret <2 x i1> [[CMP]]
+;
+  %1 = add nsw <2 x i32> %x, <i32 20, i32 20>
+  %2 = add nsw <2 x i32> %y, <i32 57, i32 57>
+  %cmp = icmp sge <2 x i32> %1, %2
+  ret <2 x i1> %cmp
+}
+
+define <2 x i1> @icmp_add20_sge_add57_undef(<2 x i32> %x, <2 x i32> %y) {
+; CHECK-LABEL: @icmp_add20_sge_add57_undef(
+; CHECK-NEXT:    [[TMP1:%.*]] = add nsw <2 x i32> [[X:%.*]], <i32 20, i32 20>
+; CHECK-NEXT:    [[TMP2:%.*]] = add nsw <2 x i32> [[Y:%.*]], <i32 57, i32 undef>
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge <2 x i32> [[TMP1]], [[TMP2]]
+; CHECK-NEXT:    ret <2 x i1> [[CMP]]
+;
+  %1 = add nsw <2 x i32> %x, <i32 20, i32 20>
+  %2 = add nsw <2 x i32> %y, <i32 57, i32 undef>
+  %cmp = icmp sge <2 x i32> %1, %2
+  ret <2 x i1> %cmp
+}
+
+define <2 x i1> @icmp_add20_sge_add57_vec_nonsplat(<2 x i32> %x, <2 x i32> %y) {
+; CHECK-LABEL: @icmp_add20_sge_add57_vec_nonsplat(
+; CHECK-NEXT:    [[TMP1:%.*]] = add nsw <2 x i32> [[X:%.*]], <i32 20, i32 19>
+; CHECK-NEXT:    [[TMP2:%.*]] = add nsw <2 x i32> [[Y:%.*]], <i32 57, i32 58>
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge <2 x i32> [[TMP1]], [[TMP2]]
+; CHECK-NEXT:    ret <2 x i1> [[CMP]]
+;
+  %1 = add nsw <2 x i32> %x, <i32 20, i32 19>
+  %2 = add nsw <2 x i32> %y, <i32 57, i32 58>
+  %cmp = icmp sge <2 x i32> %1, %2
+  ret <2 x i1> %cmp
+}
+
 define i1 @icmp_sub57_sge_sub20(i32 %x, i32 %y) {
 ; CHECK-LABEL: @icmp_sub57_sge_sub20(
 ; CHECK-NEXT:    [[TMP1:%.*]] = add nsw i32 [[X:%.*]], -37
@@ -1591,6 +1630,45 @@ define i1 @icmp_sub57_sge_sub20(i32 %x, i32 %y) {
   ret i1 %cmp
 }
 
+define <2 x i1> @icmp_sub57_sge_sub20_splat(<2 x i32> %x, <2 x i32> %y) {
+; CHECK-LABEL: @icmp_sub57_sge_sub20_splat(
+; CHECK-NEXT:    [[TMP1:%.*]] = add nsw <2 x i32> [[X:%.*]], <i32 -57, i32 -57>
+; CHECK-NEXT:    [[TMP2:%.*]] = add nsw <2 x i32> [[Y:%.*]], <i32 -20, i32 -20>
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge <2 x i32> [[TMP1]], [[TMP2]]
+; CHECK-NEXT:    ret <2 x i1> [[CMP]]
+;
+  %1 = add nsw <2 x i32> %x, <i32 -57, i32 -57>
+  %2 = add nsw <2 x i32> %y, <i32 -20, i32 -20>
+  %cmp = icmp sge <2 x i32> %1, %2
+  ret <2 x i1> %cmp
+}
+
+define <2 x i1> @icmp_sub57_sge_sub20_vec_undef(<2 x i32> %x, <2 x i32> %y) {
+; CHECK-LABEL: @icmp_sub57_sge_sub20_vec_undef(
+; CHECK-NEXT:    [[TMP1:%.*]] = add nsw <2 x i32> [[X:%.*]], <i32 -57, i32 undef>
+; CHECK-NEXT:    [[TMP2:%.*]] = add nsw <2 x i32> [[Y:%.*]], <i32 -20, i32 undef>
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge <2 x i32> [[TMP1]], [[TMP2]]
+; CHECK-NEXT:    ret <2 x i1> [[CMP]]
+;
+  %1 = add nsw <2 x i32> %x, <i32 -57, i32 undef>
+  %2 = add nsw <2 x i32> %y, <i32 -20, i32 undef>
+  %cmp = icmp sge <2 x i32> %1, %2
+  ret <2 x i1> %cmp
+}
+
+define <2 x i1> @icmp_sub57_sge_sub20_vec_nonsplat(<2 x i32> %x, <2 x i32> %y) {
+; CHECK-LABEL: @icmp_sub57_sge_sub20_vec_nonsplat(
+; CHECK-NEXT:    [[TMP1:%.*]] = add nsw <2 x i32> [[X:%.*]], <i32 -57, i32 -58>
+; CHECK-NEXT:    [[TMP2:%.*]] = add nsw <2 x i32> [[Y:%.*]], <i32 -20, i32 -21>
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge <2 x i32> [[TMP1]], [[TMP2]]
+; CHECK-NEXT:    ret <2 x i1> [[CMP]]
+;
+  %1 = add nsw <2 x i32> %x, <i32 -57, i32 -58>
+  %2 = add nsw <2 x i32> %y, <i32 -20, i32 -21>
+  %cmp = icmp sge <2 x i32> %1, %2
+  ret <2 x i1> %cmp
+}
+
 define i1 @icmp_and_shl_neg_ne_0(i32 %A, i32 %B) {
 ; CHECK-LABEL: @icmp_and_shl_neg_ne_0(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 1, [[B:%.*]]


        


More information about the llvm-commits mailing list