diff options
| author | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2019-08-01 22:18:56 +0000 |
|---|---|---|
| committer | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2019-08-01 22:18:56 +0000 |
| commit | eee9312a85c020f90beb186fe95835e36ae8ce1c (patch) | |
| tree | 7d31ae2f30d7052c4e0bea84cf4507ca9fb0ec8d /llvm/test/Transforms/LoadStoreVectorizer/AMDGPU | |
| parent | ac7e5788ca03dac225fd92ac937593454bd36d21 (diff) | |
| download | bcm5719-llvm-eee9312a85c020f90beb186fe95835e36ae8ce1c.tar.gz bcm5719-llvm-eee9312a85c020f90beb186fe95835e36ae8ce1c.zip | |
Relax load store vectorizer pointer strip checks
The previous change to fix crash in the vectorizer introduced
performance regressions. The condition to preserve pointer
address space during the search is too tight, we only need to
match the size.
Differential Revision: https://reviews.llvm.org/D65600
llvm-svn: 367624
Diffstat (limited to 'llvm/test/Transforms/LoadStoreVectorizer/AMDGPU')
| -rw-r--r-- | llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/vect-ptr-ptr-size-mismatch.ll | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/vect-ptr-ptr-size-mismatch.ll b/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/vect-ptr-ptr-size-mismatch.ll index 197a439102f..1e9ffdba341 100644 --- a/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/vect-ptr-ptr-size-mismatch.ll +++ b/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/vect-ptr-ptr-size-mismatch.ll @@ -1,18 +1,57 @@ -; RUN: opt -mtriple=amdgcn-amd-amdhsa -load-store-vectorizer -S < %s | FileCheck %s +; RUN: opt -load-store-vectorizer -S < %s | FileCheck %s -target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32" +target datalayout = "e-p:64:64-p1:64:64-p5:32:32" -; CHECK-LABEL: @test +; Size mismatch between the 32 bit pointer in address space 5 and 64 bit +; pointer in address space 0 it was cast to caused below test to crash. +; The p5:32:32 portion of the data layout is critical for the test. + +; CHECK-LABEL: @cast_to_ptr ; CHECK: store i32* undef, i32** %tmp9, align 8 ; CHECK: store i32* undef, i32** %tmp7, align 8 -define amdgpu_kernel void @test() { +define void @cast_to_ptr() { entry: - %a10.ascast.i = addrspacecast i32* addrspace(5)* null to i32** + %ascast = addrspacecast i32* addrspace(5)* null to i32** %tmp4 = icmp eq i32 undef, 0 %tmp6 = select i1 false, i32** undef, i32** undef %tmp7 = select i1 %tmp4, i32** null, i32** %tmp6 - %tmp9 = select i1 %tmp4, i32** %a10.ascast.i, i32** null + %tmp9 = select i1 %tmp4, i32** %ascast, i32** null store i32* undef, i32** %tmp9, align 8 store i32* undef, i32** %tmp7, align 8 unreachable } + +; CHECK-LABEL: @cast_to_cast +; CHECK: %tmp4 = load i32*, i32** %tmp1, align 8 +; CHECK: %tmp5 = load i32*, i32** %tmp3, align 8 +define void @cast_to_cast() { +entry: + %a.ascast = addrspacecast i32* addrspace(5)* undef to i32** + %b.ascast = addrspacecast i32* addrspace(5)* null to i32** + %tmp1 = select i1 false, i32** %a.ascast, i32** undef + %tmp3 = select i1 false, i32** %b.ascast, i32** undef + %tmp4 = load i32*, i32** %tmp1, align 8 + %tmp5 = load i32*, i32** %tmp3, align 8 + unreachable +} + +; CHECK-LABEL: @all_to_cast +; CHECK: load <4 x float> +define void @all_to_cast(i8* nocapture readonly align 16 dereferenceable(16) %alloc1) { +entry: + %alloc16 = addrspacecast i8* %alloc1 to i8 addrspace(1)* + %tmp = bitcast i8 addrspace(1)* %alloc16 to float addrspace(1)* + %tmp1 = load float, float addrspace(1)* %tmp, align 16, !invariant.load !0 + %tmp6 = getelementptr inbounds i8, i8 addrspace(1)* %alloc16, i64 4 + %tmp7 = bitcast i8 addrspace(1)* %tmp6 to float addrspace(1)* + %tmp8 = load float, float addrspace(1)* %tmp7, align 4, !invariant.load !0 + %tmp15 = getelementptr inbounds i8, i8 addrspace(1)* %alloc16, i64 8 + %tmp16 = bitcast i8 addrspace(1)* %tmp15 to float addrspace(1)* + %tmp17 = load float, float addrspace(1)* %tmp16, align 8, !invariant.load !0 + %tmp24 = getelementptr inbounds i8, i8 addrspace(1)* %alloc16, i64 12 + %tmp25 = bitcast i8 addrspace(1)* %tmp24 to float addrspace(1)* + %tmp26 = load float, float addrspace(1)* %tmp25, align 4, !invariant.load !0 + ret void +} + +!0 = !{} |

