OSDN Git Service

AMDGPU: Improve alias analysis for GDS
authorNicolai Haehnle <nhaehnle@gmail.com>
Wed, 17 Jul 2019 11:22:19 +0000 (11:22 +0000)
committerNicolai Haehnle <nhaehnle@gmail.com>
Wed, 17 Jul 2019 11:22:19 +0000 (11:22 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366313 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp
test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll

index de54db3..bba132c 100644 (file)
@@ -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}
 };
 
index 1f64208..25ec7af 100644 (file)
@@ -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
 }