1; RUN: opt -mtriple=amdgcn-- -data-layout=A5 -aa-eval -amdgpu-aa -amdgpu-aa-wrapper -disable-basic-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s 2; RUN: opt -mtriple=r600-- -data-layout=A5 -aa-eval -amdgpu-aa -amdgpu-aa-wrapper -disable-basic-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s 3; RUN: opt -mtriple=amdgcn-- -data-layout=A5 -passes=aa-eval -aa-pipeline=amdgpu-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s 4; RUN: opt -mtriple=r600-- -data-layout=A5 -passes=aa-eval -aa-pipeline=amdgpu-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s 5 6; CHECK: NoAlias: i8 addrspace(1)* %p1, i8 addrspace(5)* %p 7 8define void @test(i8 addrspace(5)* %p, i8 addrspace(1)* %p1) { 9 ret void 10} 11 12; CHECK: MayAlias: i8 addrspace(1)* %p1, i8 addrspace(4)* %p 13 14define void @test_constant_vs_global(i8 addrspace(4)* %p, i8 addrspace(1)* %p1) { 15 ret void 16} 17 18; CHECK: MayAlias: i8 addrspace(1)* %p, i8 addrspace(4)* %p1 19 20define void @test_global_vs_constant(i8 addrspace(1)* %p, i8 addrspace(4)* %p1) { 21 ret void 22} 23 24; CHECK: MayAlias: i8 addrspace(1)* %p1, i8 addrspace(6)* %p 25 26define void @test_constant_32bit_vs_global(i8 addrspace(6)* %p, i8 addrspace(1)* %p1) { 27 ret void 28} 29 30; CHECK: MayAlias: i8 addrspace(4)* %p1, i8 addrspace(6)* %p 31 32define void @test_constant_32bit_vs_constant(i8 addrspace(6)* %p, i8 addrspace(4)* %p1) { 33 ret void 34} 35 36; CHECK: MayAlias: i8 addrspace(999)* %p0, i8* %p 37define void @test_0_999(i8 addrspace(0)* %p, i8 addrspace(999)* %p0) { 38 ret void 39} 40 41; CHECK: MayAlias: i8 addrspace(999)* %p, i8* %p1 42define void @test_999_0(i8 addrspace(999)* %p, i8 addrspace(0)* %p1) { 43 ret void 44} 45 46; CHECK: MayAlias: i8 addrspace(1)* %p, i8 addrspace(999)* %p1 47define void @test_1_999(i8 addrspace(1)* %p, i8 addrspace(999)* %p1) { 48 ret void 49} 50 51; CHECK: MayAlias: i8 addrspace(1)* %p1, i8 addrspace(999)* %p 52define void @test_999_1(i8 addrspace(999)* %p, i8 addrspace(1)* %p1) { 53 ret void 54} 55 56; CHECK: NoAlias: i8 addrspace(2)* %p, i8* %p1 57define void @test_region_vs_flat(i8 addrspace(2)* %p, i8 addrspace(0)* %p1) { 58 ret void 59} 60 61; CHECK: NoAlias: i8 addrspace(1)* %p1, i8 addrspace(2)* %p 62define void @test_region_vs_global(i8 addrspace(2)* %p, i8 addrspace(1)* %p1) { 63 ret void 64} 65 66; CHECK: MayAlias: i8 addrspace(2)* %p, i8 addrspace(2)* %p1 67define void @test_region(i8 addrspace(2)* %p, i8 addrspace(2)* %p1) { 68 ret void 69} 70 71; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(3)* %p1 72define void @test_region_vs_group(i8 addrspace(2)* %p, i8 addrspace(3)* %p1) { 73 ret void 74} 75 76; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(4)* %p1 77define void @test_region_vs_constant(i8 addrspace(2)* %p, i8 addrspace(4)* %p1) { 78 ret void 79} 80 81; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(5)* %p1 82define void @test_region_vs_private(i8 addrspace(2)* %p, i8 addrspace(5)* %p1) { 83 ret void 84} 85 86; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(6)* %p1 87define void @test_region_vs_const32(i8 addrspace(2)* %p, i8 addrspace(6)* %p1) { 88 ret void 89} 90 91; CHECK: MayAlias: i8 addrspace(7)* %p, i8* %p1 92define void @test_7_0(i8 addrspace(7)* %p, i8 addrspace(0)* %p1) { 93 ret void 94} 95 96; CHECK: MayAlias: i8 addrspace(1)* %p1, i8 addrspace(7)* %p 97define void @test_7_1(i8 addrspace(7)* %p, i8 addrspace(1)* %p1) { 98 ret void 99} 100 101; CHECK: NoAlias: i8 addrspace(2)* %p1, i8 addrspace(7)* %p 102define void @test_7_2(i8 addrspace(7)* %p, i8 addrspace(2)* %p1) { 103 ret void 104} 105 106; CHECK: NoAlias: i8 addrspace(3)* %p1, i8 addrspace(7)* %p 107define void @test_7_3(i8 addrspace(7)* %p, i8 addrspace(3)* %p1) { 108 ret void 109} 110 111; CHECK: MayAlias: i8 addrspace(4)* %p1, i8 addrspace(7)* %p 112define void @test_7_4(i8 addrspace(7)* %p, i8 addrspace(4)* %p1) { 113 ret void 114} 115 116; CHECK: NoAlias: i8 addrspace(5)* %p1, i8 addrspace(7)* %p 117define void @test_7_5(i8 addrspace(7)* %p, i8 addrspace(5)* %p1) { 118 ret void 119} 120 121; CHECK: MayAlias: i8 addrspace(6)* %p1, i8 addrspace(7)* %p 122define void @test_7_6(i8 addrspace(7)* %p, i8 addrspace(6)* %p1) { 123 ret void 124} 125 126; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(7)* %p1 127define void @test_7_7(i8 addrspace(7)* %p, i8 addrspace(7)* %p1) { 128 ret void 129} 130 131@cst = internal addrspace(4) global i8* undef, align 4 132 133; CHECK-LABEL: Function: test_8_0 134; CHECK: NoAlias: i8 addrspace(3)* %p, i8* %p1 135; CHECK: NoAlias: i8 addrspace(3)* %p, i8* addrspace(4)* @cst 136; CHECK: MayAlias: i8* %p1, i8* addrspace(4)* @cst 137define void @test_8_0(i8 addrspace(3)* %p) { 138 %p1 = load i8*, i8* addrspace(4)* @cst 139 ret void 140} 141 142; CHECK-LABEL: Function: test_8_1 143; CHECK: NoAlias: i8 addrspace(5)* %p, i8* %p1 144; CHECK: NoAlias: i8 addrspace(5)* %p, i8* addrspace(4)* @cst 145; CHECK: MayAlias: i8* %p1, i8* addrspace(4)* @cst 146define void @test_8_1(i8 addrspace(5)* %p) { 147 %p1 = load i8*, i8* addrspace(4)* @cst 148 ret void 149} 150 151; CHECK-LABEL: Function: test_8_2 152; CHECK: NoAlias: i8 addrspace(5)* %p1, i8* %p 153define amdgpu_kernel void @test_8_2(i8* %p) { 154 %p1 = alloca i8, align 1, addrspace(5) 155 ret void 156} 157 158; CHECK-LABEL: Function: test_8_3 159; CHECK: MayAlias: i8 addrspace(5)* %p1, i8* %p 160; TODO: So far, %p1 may still alias to %p. As it's not captured at all, it 161; should be NoAlias. 162define void @test_8_3(i8* %p) { 163 %p1 = alloca i8, align 1, addrspace(5) 164 ret void 165} 166 167@shm = internal addrspace(3) global i8 undef, align 4 168 169; CHECK-LABEL: Function: test_8_4 170; CHECK: NoAlias: i8 addrspace(3)* %p1, i8* %p 171; CHECK: NoAlias: i8 addrspace(3)* @shm, i8* %p 172; CHECK: MayAlias: i8 addrspace(3)* %p1, i8 addrspace(3)* @shm 173define amdgpu_kernel void @test_8_4(i8* %p) { 174 %p1 = getelementptr i8, i8 addrspace(3)* @shm, i32 0 175 ret void 176} 177 178; CHECK-LABEL: Function: test_8_5 179; CHECK: MayAlias: i8 addrspace(3)* %p1, i8* %p 180; CHECK: MayAlias: i8 addrspace(3)* @shm, i8* %p 181; CHECK: MayAlias: i8 addrspace(3)* %p1, i8 addrspace(3)* @shm 182; TODO: So far, %p1 may still alias to %p. As it's not captured at all, it 183; should be NoAlias. 184define void @test_8_5(i8* %p) { 185 %p1 = getelementptr i8, i8 addrspace(3)* @shm, i32 0 186 ret void 187} 188