diff options
| author | Nicolai Haehnle <nhaehnle@gmail.com> | 2019-07-17 11:22:19 +0000 |
|---|---|---|
| committer | Nicolai Haehnle <nhaehnle@gmail.com> | 2019-07-17 11:22:19 +0000 |
| commit | a256b8b7d77cdc9cf4675dcd784d008cb545b10b (patch) | |
| tree | 8a66334cf858f455e0d9947e00d02b5ca82e5550 /llvm | |
| parent | 52c39396151978ca946e2a80d9118c8672bace14 (diff) | |
| download | bcm5719-llvm-a256b8b7d77cdc9cf4675dcd784d008cb545b10b.tar.gz bcm5719-llvm-a256b8b7d77cdc9cf4675dcd784d008cb545b10b.zip | |
AMDGPU: Improve alias analysis for GDS
Summary: GDS cannot alias anything else.
Original patch by: Marek Olšák
Reviewers: arsenm, mareko
Subscribers: kzhuravl, jvesely, wdng, yaxunl, dstuttard, tpr, t-tye, Petar.Avramovic, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D64114
Change-Id: I07bfbd96f5d5c37a6dfba7997df12f291dd794b0
llvm-svn: 366313
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp | 8 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll | 51 |
2 files changed, 47 insertions, 12 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp index de54db3b1b0..bba132c3bc4 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp @@ -56,13 +56,13 @@ void AMDGPUAAWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const { // These arrays are indexed by address space value enum elements 0 ... to 7 static const AliasResult ASAliasRules[8][8] = { /* Flat Global Region Group Constant Private Constant 32-bit Buffer Fat Ptr */ - /* Flat */ {MayAlias, MayAlias, MayAlias, MayAlias, MayAlias, MayAlias, MayAlias, MayAlias}, + /* Flat */ {MayAlias, MayAlias, NoAlias, MayAlias, MayAlias, MayAlias, MayAlias, MayAlias}, /* Global */ {MayAlias, MayAlias, NoAlias , NoAlias , MayAlias, NoAlias , MayAlias, MayAlias}, - /* Region */ {MayAlias, NoAlias , NoAlias , NoAlias , MayAlias, NoAlias , MayAlias, NoAlias}, + /* Region */ {NoAlias, NoAlias , MayAlias, NoAlias , NoAlias, NoAlias , NoAlias, NoAlias}, /* Group */ {MayAlias, NoAlias , NoAlias , MayAlias, NoAlias , NoAlias , NoAlias , NoAlias}, - /* Constant */ {MayAlias, MayAlias, MayAlias, NoAlias , NoAlias , NoAlias , MayAlias, MayAlias}, + /* Constant */ {MayAlias, MayAlias, NoAlias, NoAlias , NoAlias , NoAlias , MayAlias, MayAlias}, /* Private */ {MayAlias, NoAlias , NoAlias , NoAlias , NoAlias , MayAlias, NoAlias , NoAlias}, - /* Constant 32-bit */ {MayAlias, MayAlias, MayAlias, NoAlias , MayAlias, NoAlias , NoAlias , MayAlias}, + /* Constant 32-bit */ {MayAlias, MayAlias, NoAlias, NoAlias , MayAlias, NoAlias , NoAlias , MayAlias}, /* Buffer Fat Ptr */ {MayAlias, MayAlias, NoAlias , NoAlias , MayAlias, NoAlias , MayAlias, MayAlias} }; diff --git a/llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll b/llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll index 1f64208cf99..25ec7af9d23 100644 --- a/llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll +++ b/llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll @@ -51,42 +51,77 @@ define void @test_999_1(i8 addrspace(999)* %p, i8 addrspace(1)* %p1) { ret void } +; CHECK: NoAlias: i8 addrspace(2)* %p, i8* %p1 +define void @test_region_vs_flat(i8 addrspace(2)* %p, i8 addrspace(0)* %p1) { + ret void +} + +; CHECK: NoAlias: i8 addrspace(1)* %p1, i8 addrspace(2)* %p +define void @test_region_vs_global(i8 addrspace(2)* %p, i8 addrspace(1)* %p1) { + ret void +} + +; CHECK: MayAlias: i8 addrspace(2)* %p, i8 addrspace(2)* %p1 +define void @test_region(i8 addrspace(2)* %p, i8 addrspace(2)* %p1) { + ret void +} + +; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(3)* %p1 +define void @test_region_vs_group(i8 addrspace(2)* %p, i8 addrspace(3)* %p1) { + ret void +} + +; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(4)* %p1 +define void @test_region_vs_constant(i8 addrspace(2)* %p, i8 addrspace(4)* %p1) { + ret void +} + +; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(5)* %p1 +define void @test_region_vs_private(i8 addrspace(2)* %p, i8 addrspace(5)* %p1) { + ret void +} + +; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(6)* %p1 +define void @test_region_vs_const32(i8 addrspace(2)* %p, i8 addrspace(6)* %p1) { + ret void +} + ; CHECK: MayAlias: i8 addrspace(7)* %p, i8* %p1 define void @test_7_0(i8 addrspace(7)* %p, i8 addrspace(0)* %p1) { - ret void + ret void } ; CHECK: MayAlias: i8 addrspace(1)* %p1, i8 addrspace(7)* %p define void @test_7_1(i8 addrspace(7)* %p, i8 addrspace(1)* %p1) { - ret void + ret void } ; CHECK: NoAlias: i8 addrspace(2)* %p1, i8 addrspace(7)* %p define void @test_7_2(i8 addrspace(7)* %p, i8 addrspace(2)* %p1) { - ret void + ret void } ; CHECK: NoAlias: i8 addrspace(3)* %p1, i8 addrspace(7)* %p define void @test_7_3(i8 addrspace(7)* %p, i8 addrspace(3)* %p1) { - ret void + ret void } ; CHECK: MayAlias: i8 addrspace(4)* %p1, i8 addrspace(7)* %p define void @test_7_4(i8 addrspace(7)* %p, i8 addrspace(4)* %p1) { - ret void + ret void } ; CHECK: NoAlias: i8 addrspace(5)* %p1, i8 addrspace(7)* %p define void @test_7_5(i8 addrspace(7)* %p, i8 addrspace(5)* %p1) { - ret void + ret void } ; CHECK: MayAlias: i8 addrspace(6)* %p1, i8 addrspace(7)* %p define void @test_7_6(i8 addrspace(7)* %p, i8 addrspace(6)* %p1) { - ret void + ret void } ; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(7)* %p1 define void @test_7_7(i8 addrspace(7)* %p, i8 addrspace(7)* %p1) { - ret void + ret void } |

