[llvm] [SLP]Add subvector vectorization for non-load nodes (PR #108430)
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 1 13:03:55 PDT 2024
aeubanks wrote:
here's a diff of the relevant function after slp-vectorizer with and without this patch reverted, and with inst names all set to `%0` for minimal diffing purposes. I'll keep digging, but perhaps you can see something from this diff?
```
177a178,181
> %0 = insertelement <2 x i32> poison, i32 %lshr166, i32 0
> %0 = insertelement <2 x i32> %0, i32 %trunc176, i32 1
> %0 = and <2 x i32> %0, <i32 255, i32 255>
> %0 = icmp eq <2 x i32> %0, zeroinitializer
188,194c192
< %0 = insertelement <2 x i32> poison, i32 %lshr166, i32 0
< %0 = insertelement <2 x i32> %0, i32 %trunc176, i32 1
< %0 = and <2 x i32> %0, <i32 255, i32 255>
< %0 = icmp eq <2 x i32> %0, zeroinitializer
< %0 = zext <2 x i8> %0 to <2 x i32>
< %0 = shufflevector <2 x i32> %0, <2 x i32> %0, <8 x i32> <i32 poison, i32 poison, i32 0, i32 1, i32 poison, i32 poison, i32 2, i32 3>
< %0 = insertelement <8 x i32> %0, i32 %trunc111, i32 0
---
> %0 = insertelement <8 x i32> poison, i32 %trunc111, i32 0
197a196,199
> %0 = shufflevector <2 x i32> %0, <2 x i32> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
> %0 = shufflevector <8 x i32> %0, <8 x i32> %0, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 4, i32 5, i32 8, i32 9>
> %0 = sext <2 x i8> %0 to <2 x i32>
> %0 = call <8 x i32> @llvm.vector.insert.v8i32.v2i32(<8 x i32> %0, <2 x i32> %0, i64 2)
204a207,208
> %0 = shufflevector <2 x i1> %0, <2 x i1> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
> %0 = shufflevector <8 x i1> %0, <8 x i1> %0, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 4, i32 5, i32 8, i32 9>
206d209
< %0 = call <8 x i1> @llvm.vector.insert.v8i1.v2i1(<8 x i1> %0, <2 x i1> %0, i64 6)
238c241,243
< %0 = call <8 x i64> @llvm.vector.insert.v8i64.v4i64(<8 x i64> poison, <4 x i64> %0, i64 0)
---
> %0 = shufflevector <2 x i64> %0, <2 x i64> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
> %0 = shufflevector <8 x i64> %0, <8 x i64> poison, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 0, i32 1>
> %0 = call <8 x i64> @llvm.vector.insert.v8i64.v4i64(<8 x i64> %0, <4 x i64> %0, i64 0)
240d244
< %0 = call <8 x i64> @llvm.vector.insert.v8i64.v2i64(<8 x i64> %0, <2 x i64> %0, i64 6)
```
https://github.com/llvm/llvm-project/pull/108430
More information about the llvm-commits
mailing list