[llvm] [ValueTypes] Add v1 to v12 vector type support for i1, i8, i16, f16, … (PR #96481)

Kito Cheng via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 24 06:48:52 PDT 2024


================
@@ -57,61 +57,61 @@ define void @load_i64_stride5_vf2(ptr %in.vec, ptr %out.vec0, ptr %out.vec1, ptr
 ;
 ; AVX2-LABEL: load_i64_stride5_vf2:
 ; AVX2:       # %bb.0:
-; AVX2-NEXT:    vmovaps (%rdi), %ymm0
-; AVX2-NEXT:    vmovdqa (%rdi), %xmm1
-; AVX2-NEXT:    vmovdqa 32(%rdi), %xmm2
-; AVX2-NEXT:    vmovdqa 48(%rdi), %xmm3
-; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm4
-; AVX2-NEXT:    vpblendd {{.*#+}} xmm5 = xmm1[0,1],xmm2[2,3]
-; AVX2-NEXT:    vpalignr {{.*#+}} xmm1 = xmm1[8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7]
-; AVX2-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],mem[2,3],ymm0[4,5],mem[6,7]
-; AVX2-NEXT:    vpalignr {{.*#+}} xmm3 = mem[8,9,10,11,12,13,14,15],xmm4[0,1,2,3,4,5,6,7]
-; AVX2-NEXT:    vpblendd {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3]
-; AVX2-NEXT:    vmovdqa %xmm5, (%rsi)
-; AVX2-NEXT:    vmovdqa %xmm1, (%rdx)
-; AVX2-NEXT:    vextractf128 $1, %ymm0, (%rcx)
-; AVX2-NEXT:    vmovdqa %xmm3, (%r8)
-; AVX2-NEXT:    vmovdqa %xmm2, (%r9)
+; AVX2-NEXT:    vmovdqa (%rdi), %xmm0
+; AVX2-NEXT:    vmovdqa 32(%rdi), %xmm1
+; AVX2-NEXT:    vmovdqa 48(%rdi), %xmm2
+; AVX2-NEXT:    vmovdqa 64(%rdi), %xmm3
+; AVX2-NEXT:    vpblendd {{.*#+}} xmm4 = xmm0[0,1],xmm1[2,3]
+; AVX2-NEXT:    vpalignr {{.*#+}} xmm0 = xmm0[8,9,10,11,12,13,14,15],xmm2[0,1,2,3,4,5,6,7]
+; AVX2-NEXT:    vmovaps (%rdi), %ymm2
+; AVX2-NEXT:    vblendps {{.*#+}} ymm2 = ymm2[0,1],mem[2,3],ymm2[4,5],mem[6,7]
+; AVX2-NEXT:    vpalignr {{.*#+}} xmm5 = mem[8,9,10,11,12,13,14,15],xmm3[0,1,2,3,4,5,6,7]
+; AVX2-NEXT:    vpblendd {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3]
+; AVX2-NEXT:    vmovdqa %xmm4, (%rsi)
+; AVX2-NEXT:    vmovdqa %xmm0, (%rdx)
+; AVX2-NEXT:    vextractf128 $1, %ymm2, (%rcx)
+; AVX2-NEXT:    vmovdqa %xmm5, (%r8)
+; AVX2-NEXT:    vmovdqa %xmm1, (%r9)
----------------
kito-cheng wrote:

`InVT.isSimple()` become true since v10i64 added into MVT, and then trigger reduceBuildVecToShuffle for BUILD_VECTOR.

https://github.com/llvm/llvm-project/blob/main/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp#L23358-L23381

DAG dump (+ means new dumps after v10i64 added into MVT):

```diff
 t30: v2i64 = BUILD_VECTOR t27, t29
+Combining: t30: v2i64 = BUILD_VECTOR t27, t29
+Creating new node: t48: v4i64 = extract_subvector t15, Constant:i64<4>
+Creating new node: t49: v4i64 = extract_subvector t15, Constant:i64<0>
+Creating new node: t50: v4i64 = vector_shuffle<2,7,u,u> t49, t48
+Creating new node: t51: v2i64 = extract_subvector t50, Constant:i64<0>
+ ... into: t51: v2i64 = extract_subvector t50, Constant:i64<0>
+
+Combining: t51: v2i64 = extract_subvector t50, Constant:i64<0>
```

backtrace:
```
#0  (anonymous namespace)::DAGCombiner::reduceBuildVecToShuffle (this=0x7fffffffc4b0, N=0x555555709880)
    at /home/kitoc/llvm-workspace/llvm-project/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:23359
#1  0x00007fffedcfe627 in (anonymous namespace)::DAGCombiner::visitBUILD_VECTOR (this=0x7fffffffc4b0, N=0x555555709880)
    at /home/kitoc/llvm-workspace/llvm-project/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:23766
#2  0x00007fffedc6e776 in (anonymous namespace)::DAGCombiner::visit (this=0x7fffffffc4b0, N=0x555555709880)
    at /home/kitoc/llvm-workspace/llvm-project/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1950
#3  0x00007fffedc6ea1d in (anonymous namespace)::DAGCombiner::combine (this=0x7fffffffc4b0, N=0x555555709880)
    at /home/kitoc/llvm-workspace/llvm-project/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1997
#4  0x00007fffedc6db0f in (anonymous namespace)::DAGCombiner::Run (this=0x7fffffffc4b0, AtLevel=llvm::BeforeLegalizeTypes)
    at /home/kitoc/llvm-workspace/llvm-project/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1779
```

https://github.com/llvm/llvm-project/pull/96481


More information about the llvm-commits mailing list