[llvm] 9ab2969 - [NFC][InstCombine] Pre-commit tests for D137934
Thomas Symalla via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 21 07:05:28 PST 2022
Author: Thomas Symalla
Date: 2022-11-21T16:05:19+01:00
New Revision: 9ab2969ec7afb462208c91c44913a92c0a70ba66
URL: https://github.com/llvm/llvm-project/commit/9ab2969ec7afb462208c91c44913a92c0a70ba66
DIFF: https://github.com/llvm/llvm-project/commit/9ab2969ec7afb462208c91c44913a92c0a70ba66.diff
LOG: [NFC][InstCombine] Pre-commit tests for D137934
Various InstCombine tests to show diffs with the new
extractelement / select folding.
Added:
Modified:
llvm/test/Transforms/InstCombine/extractelement.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/extractelement.ll b/llvm/test/Transforms/InstCombine/extractelement.ll
index aa236c57ee703..63277d1ede510 100644
--- a/llvm/test/Transforms/InstCombine/extractelement.ll
+++ b/llvm/test/Transforms/InstCombine/extractelement.ll
@@ -794,6 +794,28 @@ define i32 @extelt_select_const_operand_vector(i1 %c) {
ret i32 %r
}
+define float @extelt_select_const_operand_vector_float(i1 %c) {
+; ANY-LABEL: @extelt_select_const_operand_vector_float(
+; ANY-NEXT: [[S:%.*]] = select i1 [[C:%.*]], <3 x float> <float poison, float poison, float 4.000000e+00>, <3 x float> <float poison, float poison, float 7.000000e+00>
+; ANY-NEXT: [[R:%.*]] = extractelement <3 x float> [[S]], i64 2
+; ANY-NEXT: ret float [[R]]
+;
+ %s = select i1 %c, <3 x float> <float 2.0, float 3.0, float 4.0>, <3 x float> <float 5.0, float 6.0, float 7.0>
+ %r = extractelement <3 x float> %s, i32 2
+ ret float %r
+}
+
+define i32 @extelt_vecselect_const_operand_vector(<3 x i1> %c) {
+; ANY-LABEL: @extelt_vecselect_const_operand_vector(
+; ANY-NEXT: [[S:%.*]] = select <3 x i1> [[C:%.*]], <3 x i32> <i32 poison, i32 poison, i32 4>, <3 x i32> <i32 poison, i32 poison, i32 7>
+; ANY-NEXT: [[R:%.*]] = extractelement <3 x i32> [[S]], i64 2
+; ANY-NEXT: ret i32 [[R]]
+;
+ %s = select <3 x i1> %c, <3 x i32> <i32 2, i32 3, i32 4>, <3 x i32> <i32 5, i32 6, i32 7>
+ %r = extractelement <3 x i32> %s, i32 2
+ ret i32 %r
+}
+
define i32 @extelt_select_const_operand_extractelt_use(i1 %c) {
; ANY-LABEL: @extelt_select_const_operand_extractelt_use(
; ANY-NEXT: [[S:%.*]] = select i1 [[C:%.*]], <3 x i32> <i32 poison, i32 poison, i32 4>, <3 x i32> <i32 poison, i32 poison, i32 7>
@@ -825,3 +847,77 @@ define i32 @extelt_select_const_operand_select_use(i1 %c) {
%r = mul i32 %e, %e.2
ret i32 %r
}
+
+define i32 @extelt_select_const_operand_vector_cond_index(i1 %c) {
+; ANY-LABEL: @extelt_select_const_operand_vector_cond_index(
+; ANY-NEXT: [[E:%.*]] = select i1 [[C:%.*]], i32 3, i32 4
+; ANY-NEXT: [[S:%.*]] = select i1 [[C]], <3 x i32> <i32 2, i32 3, i32 4>, <3 x i32> <i32 5, i32 6, i32 7>
+; ANY-NEXT: [[R:%.*]] = extractelement <3 x i32> [[S]], i32 [[E]]
+; ANY-NEXT: ret i32 [[R]]
+;
+ %e = select i1 %c, i32 3, i32 4
+ %s = select i1 %c, <3 x i32> <i32 2, i32 3, i32 4>, <3 x i32> <i32 5, i32 6, i32 7>
+ %r = extractelement <3 x i32> %s, i32 %e
+ ret i32 %r
+}
+
+define i32 @extelt_select_const_operand_vector_var_index(i1 %c, i32 %e) {
+; ANY-LABEL: @extelt_select_const_operand_vector_var_index(
+; ANY-NEXT: [[S:%.*]] = select i1 [[C:%.*]], <3 x i32> <i32 2, i32 3, i32 4>, <3 x i32> <i32 5, i32 6, i32 7>
+; ANY-NEXT: [[R:%.*]] = extractelement <3 x i32> [[S]], i32 [[E:%.*]]
+; ANY-NEXT: ret i32 [[R]]
+;
+ %s = select i1 %c, <3 x i32> <i32 2, i32 3, i32 4>, <3 x i32> <i32 5, i32 6, i32 7>
+ %r = extractelement <3 x i32> %s, i32 %e
+ ret i32 %r
+}
+
+define i32 @extelt_select_var_const_operand_vector(i1 %c, <3 x i32> %v) {
+; ANY-LABEL: @extelt_select_var_const_operand_vector(
+; ANY-NEXT: [[S:%.*]] = select i1 [[C:%.*]], <3 x i32> [[V:%.*]], <3 x i32> <i32 poison, i32 6, i32 poison>
+; ANY-NEXT: [[R:%.*]] = extractelement <3 x i32> [[S]], i64 1
+; ANY-NEXT: ret i32 [[R]]
+;
+ %s = select i1 %c, <3 x i32> %v, <3 x i32> <i32 5, i32 6, i32 7>
+ %r = extractelement <3 x i32> %s, i32 1
+ ret i32 %r
+}
+
+define i32 @extelt_select_const_var_operand_vector(i1 %c, <3 x i32> %v) {
+; ANY-LABEL: @extelt_select_const_var_operand_vector(
+; ANY-NEXT: [[S:%.*]] = select i1 [[C:%.*]], <3 x i32> <i32 5, i32 poison, i32 poison>, <3 x i32> [[V:%.*]]
+; ANY-NEXT: [[R:%.*]] = extractelement <3 x i32> [[S]], i64 0
+; ANY-NEXT: ret i32 [[R]]
+;
+ %s = select i1 %c, <3 x i32> <i32 5, i32 6, i32 7>, <3 x i32> %v
+ %r = extractelement <3 x i32> %s, i32 0
+ ret i32 %r
+}
+
+declare void @use_select(<3 x i32>)
+
+define i32 @extelt_select_const_var_operands_vector_extra_use(i1 %c, <3 x i32> %x) {
+; ANY-LABEL: @extelt_select_const_var_operands_vector_extra_use(
+; ANY-NEXT: [[S:%.*]] = select i1 [[C:%.*]], <3 x i32> <i32 42, i32 5, i32 4>, <3 x i32> [[X:%.*]]
+; ANY-NEXT: call void @use_select(<3 x i32> [[S]])
+; ANY-NEXT: [[R:%.*]] = extractelement <3 x i32> [[S]], i64 0
+; ANY-NEXT: ret i32 [[R]]
+;
+ %s = select i1 %c, <3 x i32> <i32 42, i32 5, i32 4>, <3 x i32> %x
+ call void @use_select(<3 x i32> %s)
+ %r = extractelement <3 x i32> %s, i64 0
+ ret i32 %r
+}
+
+define i32 @extelt_select_const_operands_vector_extra_use_2(i1 %c) {
+; ANY-LABEL: @extelt_select_const_operands_vector_extra_use_2(
+; ANY-NEXT: [[S:%.*]] = select i1 [[C:%.*]], <3 x i32> <i32 42, i32 5, i32 4>, <3 x i32> <i32 5, i32 6, i32 7>
+; ANY-NEXT: call void @use_select(<3 x i32> [[S]])
+; ANY-NEXT: [[R:%.*]] = extractelement <3 x i32> [[S]], i64 0
+; ANY-NEXT: ret i32 [[R]]
+;
+ %s = select i1 %c, <3 x i32> <i32 42, i32 5, i32 4>, <3 x i32> <i32 5, i32 6, i32 7>
+ call void @use_select(<3 x i32> %s)
+ %r = extractelement <3 x i32> %s, i64 0
+ ret i32 %r
+}
More information about the llvm-commits
mailing list