[llvm] a054d89 - [InstSimplify] Add signed version of pre-commit tests for PR65905. NFC.

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 17 08:03:52 PDT 2023


Author: Yingwei Zheng
Date: 2023-09-17T22:36:01+08:00
New Revision: a054d89cd494d470bcfc347e32e236f329d85604

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

LOG: [InstSimplify] Add signed version of pre-commit tests for PR65905. NFC.

Added: 
    

Modified: 
    llvm/test/Transforms/InstSimplify/compare.ll
    llvm/test/Transforms/InstSimplify/maxmin_intrinsics.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstSimplify/compare.ll b/llvm/test/Transforms/InstSimplify/compare.ll
index cb3805932cbc5be..827f7e887ddaed4 100644
--- a/llvm/test/Transforms/InstSimplify/compare.ll
+++ b/llvm/test/Transforms/InstSimplify/compare.ll
@@ -2140,6 +2140,162 @@ define i1 @tautological16_negative(i32 %A) {
   ret i1 %D
 }
 
+define i1 @tautological17_subset1(i32 %A) {
+; CHECK-LABEL: @tautological17_subset1(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], 3
+; CHECK-NEXT:    [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, 1
+  %C2 = and i32 %A, 3
+  %D = icmp sgt i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological17_subset2(i32 %A) {
+; CHECK-LABEL: @tautological17_subset2(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], -4
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], -3
+; CHECK-NEXT:    [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, -4
+  %C2 = and i32 %A, -3
+  %D = icmp sgt i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological17_negative(i32 %A) {
+; CHECK-LABEL: @tautological17_negative(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], -3
+; CHECK-NEXT:    [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, 1
+  %C2 = and i32 %A, -3
+  %D = icmp sgt i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological18_subset1(i32 %A) {
+; CHECK-LABEL: @tautological18_subset1(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], 3
+; CHECK-NEXT:    [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, 1
+  %C2 = and i32 %A, 3
+  %D = icmp sle i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological18_subset2(i32 %A) {
+; CHECK-LABEL: @tautological18_subset2(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], -4
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], -3
+; CHECK-NEXT:    [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, -4
+  %C2 = and i32 %A, -3
+  %D = icmp sle i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological18_negative(i32 %A) {
+; CHECK-LABEL: @tautological18_negative(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], -3
+; CHECK-NEXT:    [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, 1
+  %C2 = and i32 %A, -3
+  %D = icmp sle i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological19_subset1(i32 %A) {
+; CHECK-LABEL: @tautological19_subset1(
+; CHECK-NEXT:    [[C1:%.*]] = or i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[C2:%.*]] = or i32 [[A]], 3
+; CHECK-NEXT:    [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = or i32 %A, 1
+  %C2 = or i32 %A, 3
+  %D = icmp sgt i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological19_subset2(i32 %A) {
+; CHECK-LABEL: @tautological19_subset2(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], -4
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], -3
+; CHECK-NEXT:    [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, -4
+  %C2 = and i32 %A, -3
+  %D = icmp sgt i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological19_negative(i32 %A) {
+; CHECK-LABEL: @tautological19_negative(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], -3
+; CHECK-NEXT:    [[D:%.*]] = icmp sgt i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, 1
+  %C2 = and i32 %A, -3
+  %D = icmp sgt i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological20_subset1(i32 %A) {
+; CHECK-LABEL: @tautological20_subset1(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], 3
+; CHECK-NEXT:    [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, 1
+  %C2 = and i32 %A, 3
+  %D = icmp sle i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological20_subset2(i32 %A) {
+; CHECK-LABEL: @tautological20_subset2(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], -4
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], -3
+; CHECK-NEXT:    [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, -4
+  %C2 = and i32 %A, -3
+  %D = icmp sle i32 %C1, %C2
+  ret i1 %D
+}
+
+define i1 @tautological20_negative(i32 %A) {
+; CHECK-LABEL: @tautological20_negative(
+; CHECK-NEXT:    [[C1:%.*]] = and i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[C2:%.*]] = and i32 [[A]], -3
+; CHECK-NEXT:    [[D:%.*]] = icmp sle i32 [[C1]], [[C2]]
+; CHECK-NEXT:    ret i1 [[D]]
+;
+  %C1 = and i32 %A, 1
+  %C2 = and i32 %A, -3
+  %D = icmp sle i32 %C1, %C2
+  ret i1 %D
+}
+
 declare void @helper_i1(i1)
 ; Series of tests for icmp s[lt|ge] (or A, B), A and icmp s[gt|le] A, (or A, B)
 define void @icmp_slt_sge_or(i32 %Ax, i32 %Bx) {

diff  --git a/llvm/test/Transforms/InstSimplify/maxmin_intrinsics.ll b/llvm/test/Transforms/InstSimplify/maxmin_intrinsics.ll
index 179de804a0c090c..083b4f1525d1565 100644
--- a/llvm/test/Transforms/InstSimplify/maxmin_intrinsics.ll
+++ b/llvm/test/Transforms/InstSimplify/maxmin_intrinsics.ll
@@ -2437,3 +2437,159 @@ define i8 @umax_or_mask_negative(i8 %x) {
   %val = call i8 @llvm.umax.i8(i8 %and1, i8 %and2)
   ret i8 %val
 }
+
+define i8 @smin_and_mask_subset1(i8 %x) {
+; CHECK-LABEL: @smin_and_mask_subset1(
+; CHECK-NEXT:    [[AND1:%.*]] = and i8 [[X:%.*]], 1
+; CHECK-NEXT:    [[AND2:%.*]] = and i8 [[X]], 3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = and i8 %x, 1
+  %and2 = and i8 %x, 3
+  %val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smax_and_mask_subset1(i8 %x) {
+; CHECK-LABEL: @smax_and_mask_subset1(
+; CHECK-NEXT:    [[AND1:%.*]] = and i8 [[X:%.*]], 1
+; CHECK-NEXT:    [[AND2:%.*]] = and i8 [[X]], 3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = and i8 %x, 1
+  %and2 = and i8 %x, 3
+  %val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smin_or_mask_subset1(i8 %x) {
+; CHECK-LABEL: @smin_or_mask_subset1(
+; CHECK-NEXT:    [[AND1:%.*]] = or i8 [[X:%.*]], 1
+; CHECK-NEXT:    [[AND2:%.*]] = or i8 [[X]], 3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = or i8 %x, 1
+  %and2 = or i8 %x, 3
+  %val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smax_or_mask_subset1(i8 %x) {
+; CHECK-LABEL: @smax_or_mask_subset1(
+; CHECK-NEXT:    [[AND1:%.*]] = or i8 [[X:%.*]], 1
+; CHECK-NEXT:    [[AND2:%.*]] = or i8 [[X]], 3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = or i8 %x, 1
+  %and2 = or i8 %x, 3
+  %val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smin_and_mask_subset2(i8 %x) {
+; CHECK-LABEL: @smin_and_mask_subset2(
+; CHECK-NEXT:    [[AND1:%.*]] = and i8 [[X:%.*]], -4
+; CHECK-NEXT:    [[AND2:%.*]] = and i8 [[X]], -3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = and i8 %x, -4
+  %and2 = and i8 %x, -3
+  %val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smax_and_mask_subset2(i8 %x) {
+; CHECK-LABEL: @smax_and_mask_subset2(
+; CHECK-NEXT:    [[AND1:%.*]] = and i8 [[X:%.*]], -4
+; CHECK-NEXT:    [[AND2:%.*]] = and i8 [[X]], -3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = and i8 %x, -4
+  %and2 = and i8 %x, -3
+  %val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smin_or_mask_subset2(i8 %x) {
+; CHECK-LABEL: @smin_or_mask_subset2(
+; CHECK-NEXT:    [[AND1:%.*]] = or i8 [[X:%.*]], -4
+; CHECK-NEXT:    [[AND2:%.*]] = or i8 [[X]], -3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = or i8 %x, -4
+  %and2 = or i8 %x, -3
+  %val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smax_or_mask_subset2(i8 %x) {
+; CHECK-LABEL: @smax_or_mask_subset2(
+; CHECK-NEXT:    [[AND1:%.*]] = or i8 [[X:%.*]], -4
+; CHECK-NEXT:    [[AND2:%.*]] = or i8 [[X]], -3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = or i8 %x, -4
+  %and2 = or i8 %x, -3
+  %val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smin_and_mask_negative(i8 %x) {
+; CHECK-LABEL: @smin_and_mask_negative(
+; CHECK-NEXT:    [[AND1:%.*]] = and i8 [[X:%.*]], 1
+; CHECK-NEXT:    [[AND2:%.*]] = and i8 [[X]], -3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = and i8 %x, 1
+  %and2 = and i8 %x, -3
+  %val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smax_and_mask_negative(i8 %x) {
+; CHECK-LABEL: @smax_and_mask_negative(
+; CHECK-NEXT:    [[AND1:%.*]] = and i8 [[X:%.*]], 1
+; CHECK-NEXT:    [[AND2:%.*]] = and i8 [[X]], -3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = and i8 %x, 1
+  %and2 = and i8 %x, -3
+  %val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smin_or_mask_negative(i8 %x) {
+; CHECK-LABEL: @smin_or_mask_negative(
+; CHECK-NEXT:    [[AND1:%.*]] = or i8 [[X:%.*]], 1
+; CHECK-NEXT:    [[AND2:%.*]] = or i8 [[X]], -3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smin.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = or i8 %x, 1
+  %and2 = or i8 %x, -3
+  %val = call i8 @llvm.smin.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}
+
+define i8 @smax_or_mask_negative(i8 %x) {
+; CHECK-LABEL: @smax_or_mask_negative(
+; CHECK-NEXT:    [[AND1:%.*]] = or i8 [[X:%.*]], 1
+; CHECK-NEXT:    [[AND2:%.*]] = or i8 [[X]], -3
+; CHECK-NEXT:    [[VAL:%.*]] = call i8 @llvm.smax.i8(i8 [[AND1]], i8 [[AND2]])
+; CHECK-NEXT:    ret i8 [[VAL]]
+;
+  %and1 = or i8 %x, 1
+  %and2 = or i8 %x, -3
+  %val = call i8 @llvm.smax.i8(i8 %and1, i8 %and2)
+  ret i8 %val
+}


        


More information about the llvm-commits mailing list