[llvm] [SLP] The order of store chains needs to consider the size of the values. (PR #101810)

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 5 05:31:06 PDT 2024


alexey-bataev wrote:

> > I don't see test update
> 
> The existing test cases are fine.
> 
> There is a new pattern :
> 
> ```
> ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux < %s | FileCheck %s
> define void @test(ptr %p) {
> entry:
>     %idx1 = getelementptr i8, ptr %p, i64 1
>     store i8 0, ptr %idx1, align 4
>     %idx.64.9 = getelementptr i64, ptr %p, i64 9
>     store i64 1, ptr %idx.64.9, align 8
>     %idx2 = getelementptr i8, ptr %p, i64 2
>     store i8 0, ptr %idx2, align 4
>     %idx3 = getelementptr i8, ptr %p, i64 3
>     store i8 0, ptr %idx3, align 4
>     %idx4 = getelementptr i8, ptr %p, i64 4
>     store i8 0, ptr %idx4, align 4
>     %idx5 = getelementptr i8, ptr %p, i64 5
>     store i8 0, ptr %idx5, align 4
>     %idx6 = getelementptr i8, ptr %p, i64 6
>     store i8 0, ptr %idx6, align 4
>     %idx7 = getelementptr i8, ptr %p, i64 7
>     store i8 0, ptr %idx7, align 4
>     %idx8 = getelementptr i8, ptr %p, i64 8
>     store i8 0, ptr %idx8, align 4
>     ret void
> }
> ```
> 
> Before the patch:
> 
> ```
> define void @test(ptr %p) {
> entry:
>     %idx1 = getelementptr i8, ptr %p, i64 1
>     store i8 0, ptr %idx1, align 4
>     %idx.64.9 = getelementptr i64, ptr %p, i64 9
>     store i64 1, ptr %idx.64.9, align 8
>     %idx2 = getelementptr i8, ptr %p, i64 2
>     store <4 x i8> zeroinitializer, ptr %idx2, align 4
>     %idx6 = getelementptr i8, ptr %p, i64 6
>     store i8 0, ptr %idx6, align 4
>     %idx7 = getelementptr i8, ptr %p, i64 7
>     store i8 0, ptr %idx7, align 4
>     %idx8 = getelementptr i8, ptr %p, i64 8
>     store i8 0, ptr %idx8, align 4
>     ret void
> }
> ```
> 
> After the patch:
> 
> ```
> define void @test(ptr %p) {
> entry:
>     %idx1 = getelementptr i8, ptr %p, i64 1
>     %idx.64.9 = getelementptr i64, ptr %p, i64 9
>     store i64 1, ptr %idx.64.9, align 8
>     store <8 x i8> zeroinitializer, ptr %idx1, align 4
>     ret void
> }
> ```
> 
> > Add a test in a separate patch
> 
> I will commit the above test case in a different PR.



> > I don't see test update
> 
> The existing test cases are fine.
> 
> There is a new pattern :
> 
> ```
> ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux < %s | FileCheck %s
> define void @test(ptr %p) {
> entry:
>     %idx1 = getelementptr i8, ptr %p, i64 1
>     store i8 0, ptr %idx1, align 4
>     %idx.64.9 = getelementptr i64, ptr %p, i64 9
>     store i64 1, ptr %idx.64.9, align 8
>     %idx2 = getelementptr i8, ptr %p, i64 2
>     store i8 0, ptr %idx2, align 4
>     %idx3 = getelementptr i8, ptr %p, i64 3
>     store i8 0, ptr %idx3, align 4
>     %idx4 = getelementptr i8, ptr %p, i64 4
>     store i8 0, ptr %idx4, align 4
>     %idx5 = getelementptr i8, ptr %p, i64 5
>     store i8 0, ptr %idx5, align 4
>     %idx6 = getelementptr i8, ptr %p, i64 6
>     store i8 0, ptr %idx6, align 4
>     %idx7 = getelementptr i8, ptr %p, i64 7
>     store i8 0, ptr %idx7, align 4
>     %idx8 = getelementptr i8, ptr %p, i64 8
>     store i8 0, ptr %idx8, align 4
>     ret void
> }
> ```
> 
> Before the patch:
> 
> ```
> define void @test(ptr %p) {
> entry:
>     %idx1 = getelementptr i8, ptr %p, i64 1
>     store i8 0, ptr %idx1, align 4
>     %idx.64.9 = getelementptr i64, ptr %p, i64 9
>     store i64 1, ptr %idx.64.9, align 8
>     %idx2 = getelementptr i8, ptr %p, i64 2
>     store <4 x i8> zeroinitializer, ptr %idx2, align 4
>     %idx6 = getelementptr i8, ptr %p, i64 6
>     store i8 0, ptr %idx6, align 4
>     %idx7 = getelementptr i8, ptr %p, i64 7
>     store i8 0, ptr %idx7, align 4
>     %idx8 = getelementptr i8, ptr %p, i64 8
>     store i8 0, ptr %idx8, align 4
>     ret void
> }
> ```
> 
> After the patch:
> 
> ```
> define void @test(ptr %p) {
> entry:
>     %idx1 = getelementptr i8, ptr %p, i64 1
>     %idx.64.9 = getelementptr i64, ptr %p, i64 9
>     store i64 1, ptr %idx.64.9, align 8
>     store <8 x i8> zeroinitializer, ptr %idx1, align 4
>     ret void
> }
> ```
> 
> > Add a test in a separate patch
> 
> I will commit the above test case in a different PR.

Ok, fine, but these changes must be reflected in the tests. There are no test changes in this patch

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


More information about the llvm-commits mailing list