diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2018-04-24 15:28:47 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2018-04-24 15:28:47 +0000 |
| commit | f85f5da3b2acfde2ff8a83a917db9ae1319329c2 (patch) | |
| tree | 6c9d7cebadbd6b3341555b17214b03441344eeff /llvm/test/Transforms | |
| parent | efe5afbc3dc3754f35545c9bd9c7dc54de13940d (diff) | |
| download | bcm5719-llvm-f85f5da3b2acfde2ff8a83a917db9ae1319329c2.tar.gz bcm5719-llvm-f85f5da3b2acfde2ff8a83a917db9ae1319329c2.zip | |
[LoadStoreVectorize] Ignore interleaved invariant loads.
The memory location an invariant load is using can never be clobbered by
any store, so it's safe to move the load ahead of the store.
Differential Revision: https://reviews.llvm.org/D46011
llvm-svn: 330725
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/invariant-load.ll | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/invariant-load.ll b/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/invariant-load.ll new file mode 100644 index 00000000000..ffec12acbe0 --- /dev/null +++ b/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/invariant-load.ll @@ -0,0 +1,28 @@ +; RUN: opt -mtriple=amdgcn-amd-amdhsa -basicaa -load-store-vectorizer -S -o - %s | FileCheck %s + +target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-p24:64:64-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64" + +; CHECK-LABEL: @interleave +; CHECK: load <2 x double>, <2 x double> addrspace(1)* %{{.}}, align 8{{$}} +; CHECK: store <2 x double> zeroinitializer +; CHECK: store double %add +define amdgpu_kernel void @interleave(double addrspace(1)* nocapture %a, double addrspace(1)* nocapture %b, double addrspace(1)* nocapture readonly %c) #0 { +entry: + %a.idx.1 = getelementptr inbounds double, double addrspace(1)* %a, i64 1 + %c.idx.1 = getelementptr inbounds double, double addrspace(1)* %c, i64 1 + + %ld.c = load double, double addrspace(1)* %c, align 8 + store double 0.0, double addrspace(1)* %a, align 8 ; Cannot alias invariant load + + %ld.c.idx.1 = load double, double addrspace(1)* %c.idx.1, align 8, !invariant.load !0 + store double 0.0, double addrspace(1)* %a.idx.1, align 8 + + %add = fadd double %ld.c, %ld.c.idx.1 + store double %add, double addrspace(1)* %b + + ret void +} + +attributes #0 = { nounwind } + +!0 = !{} |

