[llvm] d381533 - [Instcombine] Add select canonicalization tests. NFC

David Green via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 19 04:38:15 PST 2019


Author: David Green
Date: 2019-12-19T12:36:46Z
New Revision: d38153325f3d23b81be9c9916afc3a45270094aa

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

LOG: [Instcombine] Add select canonicalization tests. NFC

Added: 
    llvm/test/Transforms/InstCombine/select-imm-canon.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/select-imm-canon.ll b/llvm/test/Transforms/InstCombine/select-imm-canon.ll
new file mode 100644
index 000000000000..1633512b70e2
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/select-imm-canon.ll
@@ -0,0 +1,70 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+define i8 @single(i32 %A) {
+; CHECK-LABEL: @single(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[L1:%.*]] = icmp slt i32 [[A:%.*]], -128
+; CHECK-NEXT:    [[L2:%.*]] = select i1 [[L1]], i32 128, i32 [[A]]
+; CHECK-NEXT:    [[CONV7:%.*]] = trunc i32 [[L2]] to i8
+; CHECK-NEXT:    ret i8 [[CONV7]]
+;
+entry:
+  %l1 = icmp slt i32 %A, -128
+  %l2 = select i1 %l1, i32 128, i32 %A
+  %conv7 = trunc i32 %l2 to i8
+  ret i8 %conv7
+}
+
+define i8 @double(i32 %A) {
+; CHECK-LABEL: @double(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[L1:%.*]] = icmp slt i32 [[A:%.*]], -128
+; CHECK-NEXT:    [[L2:%.*]] = select i1 [[L1]], i32 128, i32 [[A]]
+; CHECK-NEXT:    [[DOTINV:%.*]] = icmp sgt i32 [[A]], 127
+; CHECK-NEXT:    [[SPEC_SELECT_I:%.*]] = select i1 [[DOTINV]], i32 127, i32 [[L2]]
+; CHECK-NEXT:    [[CONV7:%.*]] = trunc i32 [[SPEC_SELECT_I]] to i8
+; CHECK-NEXT:    ret i8 [[CONV7]]
+;
+entry:
+  %l1 = icmp slt i32 %A, -128
+  %l2 = select i1 %l1, i32 128, i32 %A
+  %.inv = icmp sgt i32 %A, 127
+  %spec.select.i = select i1 %.inv, i32 127, i32 %l2
+  %conv7 = trunc i32 %spec.select.i to i8
+  ret i8 %conv7
+}
+
+define i8 @thisdoesnotloop(i32 %A, i32 %B) {
+; CHECK-LABEL: @thisdoesnotloop(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[L1:%.*]] = icmp slt i32 [[A:%.*]], -128
+; CHECK-NEXT:    [[L2:%.*]] = select i1 [[L1]], i32 128, i32 [[B:%.*]]
+; CHECK-NEXT:    [[CONV7:%.*]] = trunc i32 [[L2]] to i8
+; CHECK-NEXT:    ret i8 [[CONV7]]
+;
+entry:
+  %l1 = icmp slt i32 %A, -128
+  %l2 = select i1 %l1, i32 128, i32 %B
+  %conv7 = trunc i32 %l2 to i8
+  ret i8 %conv7
+}
+
+define i8 @original(i32 %A, i32 %B) {
+; CHECK-LABEL: @original(
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i32 [[A:%.*]], -128
+; CHECK-NEXT:    [[TMP2:%.*]] = select i1 [[TMP1]], i32 128, i32 [[A]]
+; CHECK-NEXT:    [[DOTINV:%.*]] = icmp sgt i32 [[A]], 127
+; CHECK-NEXT:    [[SPEC_SELECT_I:%.*]] = select i1 [[DOTINV]], i32 127, i32 [[TMP2]]
+; CHECK-NEXT:    [[CONV7:%.*]] = trunc i32 [[SPEC_SELECT_I]] to i8
+; CHECK-NEXT:    ret i8 [[CONV7]]
+;
+  %cmp4.i = icmp slt i32 127, %A
+  %cmp6.i = icmp sle i32 -128, %A
+  %retval.0.i = select i1 %cmp4.i, i32 127, i32 -128
+  %not.cmp4.i = xor i1 %cmp4.i, true
+  %cleanup.dest.slot.0.i = and i1 %cmp6.i, %not.cmp4.i
+  %spec.select.i = select i1 %cleanup.dest.slot.0.i, i32 %A, i32 %retval.0.i
+  %conv7 = trunc i32 %spec.select.i to i8
+  ret i8 %conv7
+}


        


More information about the llvm-commits mailing list