[llvm] 3bae69e - [VectorCombine][X86] Add additional length changing foldBitcastShuf tests

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 6 04:06:02 PDT 2023


Author: Simon Pilgrim
Date: 2023-10-06T11:59:50+01:00
New Revision: 3bae69ec8c45ce94f206b6094af46a329c0248ce

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

LOG: [VectorCombine][X86] Add additional length changing foldBitcastShuf tests

Made these TODO instead of negative

Added: 
    

Modified: 
    llvm/test/Transforms/VectorCombine/X86/shuffle-inseltpoison.ll
    llvm/test/Transforms/VectorCombine/X86/shuffle.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/VectorCombine/X86/shuffle-inseltpoison.ll b/llvm/test/Transforms/VectorCombine/X86/shuffle-inseltpoison.ll
index 367e7b21138572a..318aa33d6b11c38 100644
--- a/llvm/test/Transforms/VectorCombine/X86/shuffle-inseltpoison.ll
+++ b/llvm/test/Transforms/VectorCombine/X86/shuffle-inseltpoison.ll
@@ -33,10 +33,10 @@ define <4 x float> @bitcast_shuf_same_size(<4 x i32> %v) {
   ret <4 x float> %r
 }
 
-; Negative test - length-changing shuffle
+; TODO - length-changing shuffle
 
-define <16 x i8> @bitcast_shuf_narrow_element_wrong_size(<2 x i32> %v) {
-; CHECK-LABEL: @bitcast_shuf_narrow_element_wrong_size(
+define <16 x i8> @bitcast_shuf_narrow_element_subvector(<2 x i32> %v) {
+; CHECK-LABEL: @bitcast_shuf_narrow_element_subvector(
 ; CHECK-NEXT:    [[SHUF:%.*]] = shufflevector <2 x i32> [[V:%.*]], <2 x i32> poison, <4 x i32> <i32 1, i32 0, i32 1, i32 0>
 ; CHECK-NEXT:    [[R:%.*]] = bitcast <4 x i32> [[SHUF]] to <16 x i8>
 ; CHECK-NEXT:    ret <16 x i8> [[R]]
@@ -46,6 +46,28 @@ define <16 x i8> @bitcast_shuf_narrow_element_wrong_size(<2 x i32> %v) {
   ret <16 x i8> %r
 }
 
+define <16 x i16> @bitcast_shuf_narrow_element_concat_subvectors(<2 x i64> %v) {
+; CHECK-LABEL: @bitcast_shuf_narrow_element_concat_subvectors(
+; CHECK-NEXT:    [[SHUF:%.*]] = shufflevector <2 x i64> [[V:%.*]], <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
+; CHECK-NEXT:    [[R:%.*]] = bitcast <4 x i64> [[SHUF]] to <16 x i16>
+; CHECK-NEXT:    ret <16 x i16> [[R]]
+;
+  %shuf = shufflevector <2 x i64> %v, <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
+  %r = bitcast <4 x i64> %shuf to <16 x i16>
+  ret <16 x i16> %r
+}
+
+define <16 x i8> @bitcast_shuf_extract_subvector(<8 x i32> %v) {
+; CHECK-LABEL: @bitcast_shuf_extract_subvector(
+; CHECK-NEXT:    [[SHUF:%.*]] = shufflevector <8 x i32> [[V:%.*]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
+; CHECK-NEXT:    [[R:%.*]] = bitcast <4 x i32> [[SHUF]] to <16 x i8>
+; CHECK-NEXT:    ret <16 x i8> [[R]]
+;
+  %shuf = shufflevector <8 x i32> %v, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
+  %r = bitcast <4 x i32> %shuf to <16 x i8>
+  ret <16 x i8> %r
+}
+
 ; Negative test - must cast to vector type
 
 define i128 @bitcast_shuf_narrow_element_wrong_type(<4 x i32> %v) {

diff  --git a/llvm/test/Transforms/VectorCombine/X86/shuffle.ll b/llvm/test/Transforms/VectorCombine/X86/shuffle.ll
index 61ac2b1eca32a8a..e094d62c80a5ed2 100644
--- a/llvm/test/Transforms/VectorCombine/X86/shuffle.ll
+++ b/llvm/test/Transforms/VectorCombine/X86/shuffle.ll
@@ -33,10 +33,10 @@ define <4 x float> @bitcast_shuf_same_size(<4 x i32> %v) {
   ret <4 x float> %r
 }
 
-; Negative test - length-changing shuffle
+; TODO - Length-changing shuffle
 
-define <16 x i8> @bitcast_shuf_narrow_element_wrong_size(<2 x i32> %v) {
-; CHECK-LABEL: @bitcast_shuf_narrow_element_wrong_size(
+define <16 x i8> @bitcast_shuf_narrow_element_subvector(<2 x i32> %v) {
+; CHECK-LABEL: @bitcast_shuf_narrow_element_subvector(
 ; CHECK-NEXT:    [[SHUF:%.*]] = shufflevector <2 x i32> [[V:%.*]], <2 x i32> poison, <4 x i32> <i32 1, i32 0, i32 1, i32 0>
 ; CHECK-NEXT:    [[R:%.*]] = bitcast <4 x i32> [[SHUF]] to <16 x i8>
 ; CHECK-NEXT:    ret <16 x i8> [[R]]
@@ -46,6 +46,28 @@ define <16 x i8> @bitcast_shuf_narrow_element_wrong_size(<2 x i32> %v) {
   ret <16 x i8> %r
 }
 
+define <16 x i16> @bitcast_shuf_narrow_element_concat_subvectors(<2 x i64> %v) {
+; CHECK-LABEL: @bitcast_shuf_narrow_element_concat_subvectors(
+; CHECK-NEXT:    [[SHUF:%.*]] = shufflevector <2 x i64> [[V:%.*]], <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
+; CHECK-NEXT:    [[R:%.*]] = bitcast <4 x i64> [[SHUF]] to <16 x i16>
+; CHECK-NEXT:    ret <16 x i16> [[R]]
+;
+  %shuf = shufflevector <2 x i64> %v, <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
+  %r = bitcast <4 x i64> %shuf to <16 x i16>
+  ret <16 x i16> %r
+}
+
+define <16 x i8> @bitcast_shuf_extract_subvector(<8 x i32> %v) {
+; CHECK-LABEL: @bitcast_shuf_extract_subvector(
+; CHECK-NEXT:    [[SHUF:%.*]] = shufflevector <8 x i32> [[V:%.*]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
+; CHECK-NEXT:    [[R:%.*]] = bitcast <4 x i32> [[SHUF]] to <16 x i8>
+; CHECK-NEXT:    ret <16 x i8> [[R]]
+;
+  %shuf = shufflevector <8 x i32> %v, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
+  %r = bitcast <4 x i32> %shuf to <16 x i8>
+  ret <16 x i8> %r
+}
+
 ; Negative test - must cast to vector type
 
 define i128 @bitcast_shuf_narrow_element_wrong_type(<4 x i32> %v) {


        


More information about the llvm-commits mailing list