[llvm] ecfe75e - [InstCombine] Precommit tests for D101375 (NFC)

Juneyoung Lee via llvm-commits llvm-commits at lists.llvm.org
Sun May 2 03:05:55 PDT 2021


Author: Juneyoung Lee
Date: 2021-05-02T19:00:42+09:00
New Revision: ecfe75eb74f00b3975c149247f6b08190023b1a3

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

LOG: [InstCombine] Precommit tests for D101375 (NFC)

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/select-safe-transforms.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/select-safe-transforms.ll b/llvm/test/Transforms/InstCombine/select-safe-transforms.ll
index edfa19c2d564..7054ff822231 100644
--- a/llvm/test/Transforms/InstCombine/select-safe-transforms.ll
+++ b/llvm/test/Transforms/InstCombine/select-safe-transforms.ll
@@ -128,3 +128,63 @@ define <2 x i1> @xor_or3(<2 x i1> %c, <2 x i32> %X, <2 x i32> %Y) {
   %res = xor <2 x i1> %sel, <i1 true, i1 true>
   ret <2 x i1> %res
 }
+
+define i1 @and_orn_cmp_1_logical(i32 %a, i32 %b, i1 %y) {
+; CHECK-LABEL: @and_orn_cmp_1_logical(
+; CHECK-NEXT:    [[X:%.*]] = icmp sgt i32 [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[X_INV:%.*]] = icmp sle i32 [[A]], [[B]]
+; CHECK-NEXT:    [[OR:%.*]] = select i1 [[Y:%.*]], i1 true, i1 [[X_INV]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[X]], i1 [[OR]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %x = icmp sgt i32 %a, %b
+  %x_inv = icmp sle i32 %a, %b
+  %or = select i1 %y, i1 true, i1 %x_inv
+  %and = select i1 %x, i1 %or, i1 false
+  ret i1 %and
+}
+
+define i1 @andn_or_cmp_2_logical(i16 %a, i16 %b, i1 %y) {
+; CHECK-LABEL: @andn_or_cmp_2_logical(
+; CHECK-NEXT:    [[X:%.*]] = icmp sge i16 [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[X_INV:%.*]] = icmp slt i16 [[A]], [[B]]
+; CHECK-NEXT:    [[OR:%.*]] = select i1 [[Y:%.*]], i1 true, i1 [[X]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[OR]], i1 [[X_INV]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %x = icmp sge i16 %a, %b
+  %x_inv = icmp slt i16 %a, %b
+  %or = select i1 %y, i1 true, i1 %x
+  %and = select i1 %or, i1 %x_inv, i1 false
+  ret i1 %and
+}
+
+define i1 @bools_logical(i1 %a, i1 %b, i1 %c) {
+; CHECK-LABEL: @bools_logical(
+; CHECK-NEXT:    [[NOT:%.*]] = xor i1 [[C:%.*]], true
+; CHECK-NEXT:    [[AND1:%.*]] = select i1 [[NOT]], i1 [[A:%.*]], i1 false
+; CHECK-NEXT:    [[AND2:%.*]] = select i1 [[C]], i1 [[B:%.*]], i1 false
+; CHECK-NEXT:    [[OR:%.*]] = select i1 [[AND1]], i1 true, i1 [[AND2]]
+; CHECK-NEXT:    ret i1 [[OR]]
+;
+  %not = xor i1 %c, -1
+  %and1 = select i1 %not, i1 %a, i1 false
+  %and2 = select i1 %c, i1 %b, i1 false
+  %or = select i1 %and1, i1 true, i1 %and2
+  ret i1 %or
+}
+
+define i1 @bools2_logical(i1 %a, i1 %b, i1 %c) {
+; CHECK-LABEL: @bools2_logical(
+; CHECK-NEXT:    [[NOT:%.*]] = xor i1 [[C:%.*]], true
+; CHECK-NEXT:    [[AND1:%.*]] = select i1 [[C]], i1 [[A:%.*]], i1 false
+; CHECK-NEXT:    [[AND2:%.*]] = select i1 [[NOT]], i1 [[B:%.*]], i1 false
+; CHECK-NEXT:    [[OR:%.*]] = select i1 [[AND1]], i1 true, i1 [[AND2]]
+; CHECK-NEXT:    ret i1 [[OR]]
+;
+  %not = xor i1 %c, -1
+  %and1 = select i1 %c, i1 %a, i1 false
+  %and2 = select i1 %not, i1 %b, i1 false
+  %or = select i1 %and1, i1 true, i1 %and2
+  ret i1 %or
+}


        


More information about the llvm-commits mailing list