[llvm] 5ae6df1 - [InstSimplify] add tests for (x || y) && (x || !y); NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 7 07:40:53 PDT 2021


Author: Sanjay Patel
Date: 2021-10-07T10:37:34-04:00
New Revision: 5ae6df1feabbf3b582bda2a76f6d04d915ee3c51

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

LOG: [InstSimplify] add tests for (x || y) && (x || !y); NFC

Added: 
    llvm/test/Transforms/InstSimplify/select-logical.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstSimplify/select-logical.ll b/llvm/test/Transforms/InstSimplify/select-logical.ll
new file mode 100644
index 0000000000000..0ca0f8f69ea55
--- /dev/null
+++ b/llvm/test/Transforms/InstSimplify/select-logical.ll
@@ -0,0 +1,122 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt < %s -instsimplify -S | FileCheck %s
+
+define i1 @logical_and_of_or_commute0(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_of_or_commute0(
+; CHECK-NEXT:    [[YNOT:%.*]] = xor i1 [[Y:%.*]], true
+; CHECK-NEXT:    [[XORY:%.*]] = select i1 [[X:%.*]], i1 true, i1 [[Y]]
+; CHECK-NEXT:    [[XORYNOT:%.*]] = select i1 [[X]], i1 true, i1 [[YNOT]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[XORY]], i1 [[XORYNOT]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %ynot = xor i1 %y, -1
+  %xory = select i1 %x, i1 true, i1 %y
+  %xorynot = select i1 %x, i1 true, i1 %ynot
+  %and = select i1 %xory, i1 %xorynot, i1 false
+  ret i1 %and
+}
+
+define <2 x i1> @logical_and_of_or_commute1(<2 x i1> %x, <2 x i1> %y) {
+; CHECK-LABEL: @logical_and_of_or_commute1(
+; CHECK-NEXT:    [[YNOT:%.*]] = xor <2 x i1> [[Y:%.*]], <i1 true, i1 poison>
+; CHECK-NEXT:    [[XORY:%.*]] = select <2 x i1> [[Y]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[X:%.*]]
+; CHECK-NEXT:    [[XORYNOT:%.*]] = select <2 x i1> [[X]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[YNOT]]
+; CHECK-NEXT:    [[AND:%.*]] = select <2 x i1> [[XORY]], <2 x i1> [[XORYNOT]], <2 x i1> zeroinitializer
+; CHECK-NEXT:    ret <2 x i1> [[AND]]
+;
+  %ynot = xor <2 x i1> %y, <i1 -1, i1 poison>
+  %xory = select <2 x i1> %y, <2 x i1> <i1 true, i1 true>, <2 x i1> %x
+  %xorynot = select <2 x i1> %x, <2 x i1> <i1 true, i1 true>, <2 x i1> %ynot
+  %and = select <2 x i1> %xory, <2 x i1> %xorynot, <2 x i1> zeroinitializer
+  ret <2 x i1> %and
+}
+
+define i1 @logical_and_of_or_commute2(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_of_or_commute2(
+; CHECK-NEXT:    [[YNOT:%.*]] = xor i1 [[Y:%.*]], true
+; CHECK-NEXT:    [[XORY:%.*]] = select i1 [[X:%.*]], i1 true, i1 [[Y]]
+; CHECK-NEXT:    [[XORYNOT:%.*]] = select i1 [[YNOT]], i1 true, i1 [[X]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[XORY]], i1 [[XORYNOT]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %ynot = xor i1 %y, -1
+  %xory = select i1 %x, i1 true, i1 %y
+  %xorynot = select i1 %ynot, i1 true, i1 %x
+  %and = select i1 %xory, i1 %xorynot, i1 false
+  ret i1 %and
+}
+
+define i1 @logical_and_of_or_commute3(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_of_or_commute3(
+; CHECK-NEXT:    [[YNOT:%.*]] = xor i1 [[Y:%.*]], true
+; CHECK-NEXT:    [[XORY:%.*]] = select i1 [[Y]], i1 true, i1 [[X:%.*]]
+; CHECK-NEXT:    [[XORYNOT:%.*]] = select i1 [[YNOT]], i1 true, i1 [[X]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[XORY]], i1 [[XORYNOT]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %ynot = xor i1 %y, -1
+  %xory = select i1 %y, i1 true, i1 %x
+  %xorynot = select i1 %ynot, i1 true, i1 %x
+  %and = select i1 %xory, i1 %xorynot, i1 false
+  ret i1 %and
+}
+
+define i1 @logical_and_of_or_commute4(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_of_or_commute4(
+; CHECK-NEXT:    [[YNOT:%.*]] = xor i1 [[Y:%.*]], true
+; CHECK-NEXT:    [[XORY:%.*]] = select i1 [[X:%.*]], i1 true, i1 [[Y]]
+; CHECK-NEXT:    [[XORYNOT:%.*]] = select i1 [[X]], i1 true, i1 [[YNOT]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[XORYNOT]], i1 [[XORY]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %ynot = xor i1 %y, -1
+  %xory = select i1 %x, i1 true, i1 %y
+  %xorynot = select i1 %x, i1 true, i1 %ynot
+  %and = select i1 %xorynot, i1 %xory, i1 false
+  ret i1 %and
+}
+
+define i1 @logical_and_of_or_commute5(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_of_or_commute5(
+; CHECK-NEXT:    [[YNOT:%.*]] = xor i1 [[Y:%.*]], true
+; CHECK-NEXT:    [[XORY:%.*]] = select i1 [[Y]], i1 true, i1 [[X:%.*]]
+; CHECK-NEXT:    [[XORYNOT:%.*]] = select i1 [[X]], i1 true, i1 [[YNOT]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[XORYNOT]], i1 [[XORY]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %ynot = xor i1 %y, -1
+  %xory = select i1 %y, i1 true, i1 %x
+  %xorynot = select i1 %x, i1 true, i1 %ynot
+  %and = select i1 %xorynot, i1 %xory, i1 false
+  ret i1 %and
+}
+
+define i1 @logical_and_of_or_commute6(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_of_or_commute6(
+; CHECK-NEXT:    [[YNOT:%.*]] = xor i1 [[Y:%.*]], true
+; CHECK-NEXT:    [[XORY:%.*]] = select i1 [[X:%.*]], i1 true, i1 [[Y]]
+; CHECK-NEXT:    [[XORYNOT:%.*]] = select i1 [[YNOT]], i1 true, i1 [[X]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[XORYNOT]], i1 [[XORY]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %ynot = xor i1 %y, -1
+  %xory = select i1 %x, i1 true, i1 %y
+  %xorynot = select i1 %ynot, i1 true, i1 %x
+  %and = select i1 %xorynot, i1 %xory, i1 false
+  ret i1 %and
+}
+
+define i1 @logical_and_of_or_commute7(i1 %x, i1 %y) {
+; CHECK-LABEL: @logical_and_of_or_commute7(
+; CHECK-NEXT:    [[YNOT:%.*]] = xor i1 [[Y:%.*]], true
+; CHECK-NEXT:    [[XORY:%.*]] = select i1 [[Y]], i1 true, i1 [[X:%.*]]
+; CHECK-NEXT:    [[XORYNOT:%.*]] = select i1 [[YNOT]], i1 true, i1 [[X]]
+; CHECK-NEXT:    [[AND:%.*]] = select i1 [[XORYNOT]], i1 [[XORY]], i1 false
+; CHECK-NEXT:    ret i1 [[AND]]
+;
+  %ynot = xor i1 %y, -1
+  %xory = select i1 %y, i1 true, i1 %x
+  %xorynot = select i1 %ynot, i1 true, i1 %x
+  %and = select i1 %xorynot, i1 %xory, i1 false
+  ret i1 %and
+}


        


More information about the llvm-commits mailing list