[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