338 lines · plain
1; 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 %s2; 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 %s3 4; CHECK-LABEL: Function: test5; CHECK: NoAlias: i8 addrspace(5)* %p, i8 addrspace(1)* %p16 7define void @test(ptr addrspace(5) %p, ptr addrspace(1) %p1) {8 load i8, ptr addrspace(5) %p9 load i8, ptr addrspace(1) %p110 ret void11}12 13; CHECK-LABEL: Function: test_constant_vs_global14; CHECK: MayAlias: i8 addrspace(4)* %p, i8 addrspace(1)* %p115 16define void @test_constant_vs_global(ptr addrspace(4) %p, ptr addrspace(1) %p1) {17 load i8, ptr addrspace(4) %p18 load i8, ptr addrspace(1) %p119 ret void20}21 22; CHECK: MayAlias: i8 addrspace(1)* %p, i8 addrspace(4)* %p123 24define void @test_global_vs_constant(ptr addrspace(1) %p, ptr addrspace(4) %p1) {25 load i8, ptr addrspace(1) %p26 load i8, ptr addrspace(4) %p127 ret void28}29 30; CHECK: MayAlias: i8 addrspace(6)* %p, i8 addrspace(1)* %p131 32define void @test_constant_32bit_vs_global(ptr addrspace(6) %p, ptr addrspace(1) %p1) {33 load i8, ptr addrspace(6) %p34 load i8, ptr addrspace(1) %p135 ret void36}37 38; CHECK: MayAlias: i8 addrspace(6)* %p, i8 addrspace(4)* %p139 40define void @test_constant_32bit_vs_constant(ptr addrspace(6) %p, ptr addrspace(4) %p1) {41 load i8, ptr addrspace(6) %p42 load i8, ptr addrspace(4) %p143 ret void44}45 46; CHECK: MayAlias: i8* %p, i8 addrspace(999)* %p047define void @test_0_999(ptr addrspace(0) %p, ptr addrspace(999) %p0) {48 load i8, ptr addrspace(0) %p49 load i8, ptr addrspace(999) %p050 ret void51}52 53; CHECK: MayAlias: i8 addrspace(999)* %p, i8* %p154define void @test_999_0(ptr addrspace(999) %p, ptr addrspace(0) %p1) {55 load i8, ptr addrspace(999) %p56 load i8, ptr addrspace(0) %p157 ret void58}59 60; CHECK: MayAlias: i8 addrspace(1)* %p, i8 addrspace(999)* %p161define void @test_1_999(ptr addrspace(1) %p, ptr addrspace(999) %p1) {62 load i8, ptr addrspace(1) %p63 load i8, ptr addrspace(999) %p164 ret void65}66 67; CHECK: MayAlias: i8 addrspace(999)* %p, i8 addrspace(1)* %p168define void @test_999_1(ptr addrspace(999) %p, ptr addrspace(1) %p1) {69 load i8, ptr addrspace(999) %p70 load i8, ptr addrspace(1) %p171 ret void72}73 74; CHECK: NoAlias: i8 addrspace(2)* %p, i8* %p175define void @test_region_vs_flat(ptr addrspace(2) %p, ptr addrspace(0) %p1) {76 load i8, ptr addrspace(2) %p77 load i8, ptr addrspace(0) %p178 ret void79}80 81; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(1)* %p182define void @test_region_vs_global(ptr addrspace(2) %p, ptr addrspace(1) %p1) {83 load i8, ptr addrspace(2) %p84 load i8, ptr addrspace(1) %p185 ret void86}87 88; CHECK: MayAlias: i8 addrspace(2)* %p, i8 addrspace(2)* %p189define void @test_region(ptr addrspace(2) %p, ptr addrspace(2) %p1) {90 load i8, ptr addrspace(2) %p91 load i8, ptr addrspace(2) %p192 ret void93}94 95; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(3)* %p196define void @test_region_vs_group(ptr addrspace(2) %p, ptr addrspace(3) %p1) {97 load i8, ptr addrspace(2) %p98 load i8, ptr addrspace(3) %p199 ret void100}101 102; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(4)* %p1103define void @test_region_vs_constant(ptr addrspace(2) %p, ptr addrspace(4) %p1) {104 load i8, ptr addrspace(2) %p105 load i8, ptr addrspace(4) %p1106 ret void107}108 109; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(5)* %p1110define void @test_region_vs_private(ptr addrspace(2) %p, ptr addrspace(5) %p1) {111 load i8, ptr addrspace(2) %p112 load i8, ptr addrspace(5) %p1113 ret void114}115 116; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(6)* %p1117define void @test_region_vs_const32(ptr addrspace(2) %p, ptr addrspace(6) %p1) {118 load i8, ptr addrspace(2) %p119 load i8, ptr addrspace(6) %p1120 ret void121}122 123; CHECK: MayAlias: i8 addrspace(7)* %p, i8* %p1124define void @test_7_0(ptr addrspace(7) %p, ptr addrspace(0) %p1) {125 load i8, ptr addrspace(7) %p126 load i8, ptr addrspace(0) %p1127 ret void128}129 130; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(1)* %p1131define void @test_7_1(ptr addrspace(7) %p, ptr addrspace(1) %p1) {132 load i8, ptr addrspace(7) %p133 load i8, ptr addrspace(1) %p1134 ret void135}136 137; CHECK: NoAlias: i8 addrspace(7)* %p, i8 addrspace(2)* %p1138define void @test_7_2(ptr addrspace(7) %p, ptr addrspace(2) %p1) {139 load i8, ptr addrspace(7) %p140 load i8, ptr addrspace(2) %p1141 ret void142}143 144; CHECK: NoAlias: i8 addrspace(7)* %p, i8 addrspace(3)* %p1145define void @test_7_3(ptr addrspace(7) %p, ptr addrspace(3) %p1) {146 load i8, ptr addrspace(7) %p147 load i8, ptr addrspace(3) %p1148 ret void149}150 151; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(4)* %p1152define void @test_7_4(ptr addrspace(7) %p, ptr addrspace(4) %p1) {153 load i8, ptr addrspace(7) %p154 load i8, ptr addrspace(4) %p1155 ret void156}157 158; CHECK: NoAlias: i8 addrspace(7)* %p, i8 addrspace(5)* %p1159define void @test_7_5(ptr addrspace(7) %p, ptr addrspace(5) %p1) {160 load i8, ptr addrspace(7) %p161 load i8, ptr addrspace(5) %p1162 ret void163}164 165; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(6)* %p1166define void @test_7_6(ptr addrspace(7) %p, ptr addrspace(6) %p1) {167 load i8, ptr addrspace(7) %p168 load i8, ptr addrspace(6) %p1169 ret void170}171 172; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(7)* %p1173define void @test_7_7(ptr addrspace(7) %p, ptr addrspace(7) %p1) {174 load i8, ptr addrspace(7) %p175 load i8, ptr addrspace(7) %p1176 ret void177}178 179@cst = internal addrspace(4) global ptr poison, align 4180 181; CHECK-LABEL: Function: test_8_0182; CHECK-DAG: NoAlias: i8 addrspace(3)* %p, i8* %p1183; CHECK-DAG: NoAlias: i8 addrspace(3)* %p, ptr addrspace(4)* @cst184; CHECK-DAG: MayAlias: i8* %p1, ptr addrspace(4)* @cst185define void @test_8_0(ptr addrspace(3) %p) {186 %p1 = load ptr, ptr addrspace(4) @cst187 load i8, ptr addrspace(3) %p188 load i8, ptr %p1189 ret void190}191 192; CHECK-LABEL: Function: test_8_1193; CHECK-DAG: NoAlias: i8 addrspace(5)* %p, i8* %p1194; CHECK-DAG: NoAlias: i8 addrspace(5)* %p, ptr addrspace(4)* @cst195; CHECK-DAG: MayAlias: i8* %p1, ptr addrspace(4)* @cst196define void @test_8_1(ptr addrspace(5) %p) {197 %p1 = load ptr, ptr addrspace(4) @cst198 load i8, ptr addrspace(5) %p199 load i8, ptr %p1200 ret void201}202 203; CHECK-LABEL: Function: test_8_2204; CHECK: NoAlias: i8* %p, i8 addrspace(5)* %p1205define amdgpu_kernel void @test_8_2(ptr %p) {206 %p1 = alloca i8, align 1, addrspace(5)207 load i8, ptr %p208 load i8, ptr addrspace(5) %p1209 ret void210}211 212; CHECK-LABEL: Function: test_8_3213; CHECK: MayAlias: i8* %p, i8 addrspace(5)* %p1214; TODO: So far, %p1 may still alias to %p. As it's not captured at all, it215; should be NoAlias.216define void @test_8_3(ptr %p) {217 %p1 = alloca i8, align 1, addrspace(5)218 load i8, ptr %p219 load i8, ptr addrspace(5) %p1220 ret void221}222 223@shm = internal addrspace(3) global [2 x i8] poison, align 4224 225; CHECK-LABEL: Function: test_8_4226; CHECK: NoAlias: i8* %p, i8 addrspace(3)* %p1227; CHECK: NoAlias: i8* %p, i8 addrspace(3)* @shm228; CHECK: MayAlias: i8 addrspace(3)* %p1, i8 addrspace(3)* @shm229define amdgpu_kernel void @test_8_4(ptr %p) {230 %p1 = getelementptr [2 x i8], ptr addrspace(3) @shm, i32 0, i32 1231 load i8, ptr %p232 load i8, ptr addrspace(3) %p1233 load i8, ptr addrspace(3) @shm234 ret void235}236 237; CHECK-LABEL: Function: test_8_5238; CHECK: MayAlias: i8* %p, i8 addrspace(3)* %p1239; CHECK: MayAlias: i8* %p, i8 addrspace(3)* @shm240; CHECK: MayAlias: i8 addrspace(3)* %p1, i8 addrspace(3)* @shm241 242; TODO: So far, @shm may still alias to %p. As it's not captured at all, it243; should be NoAlias.244define void @test_8_5(ptr %p) {245 %p1 = getelementptr [2 x i8], ptr addrspace(3) @shm, i32 0, i32 1246 load i8, ptr %p247 load i8, ptr addrspace(3) %p1248 load i8, ptr addrspace(3) @shm249 ret void250}251 252; CHECK: MayAlias: i8 addrspace(9)* %p, i8* %p1253define void @test_9_0(ptr addrspace(9) %p, ptr addrspace(0) %p1) {254 load i8, ptr addrspace(9) %p255 load i8, ptr addrspace(0) %p1256 ret void257}258 259; CHECK: MayAlias: i8 addrspace(9)* %p, i8 addrspace(1)* %p1260define void @test_9_1(ptr addrspace(9) %p, ptr addrspace(1) %p1) {261 load i8, ptr addrspace(9) %p262 load i8, ptr addrspace(1) %p1263 ret void264}265 266; CHECK: NoAlias: i8 addrspace(9)* %p, i8 addrspace(2)* %p1267define void @test_9_2(ptr addrspace(9) %p, ptr addrspace(2) %p1) {268 load i8, ptr addrspace(9) %p269 load i8, ptr addrspace(2) %p1270 ret void271}272 273; CHECK: NoAlias: i8 addrspace(9)* %p, i8 addrspace(3)* %p1274define void @test_9_3(ptr addrspace(9) %p, ptr addrspace(3) %p1) {275 load i8, ptr addrspace(9) %p276 load i8, ptr addrspace(3) %p1277 ret void278}279 280; CHECK: MayAlias: i8 addrspace(9)* %p, i8 addrspace(4)* %p1281define void @test_9_4(ptr addrspace(9) %p, ptr addrspace(4) %p1) {282 load i8, ptr addrspace(9) %p283 load i8, ptr addrspace(4) %p1284 ret void285}286 287; CHECK: NoAlias: i8 addrspace(9)* %p, i8 addrspace(5)* %p1288define void @test_9_5(ptr addrspace(9) %p, ptr addrspace(5) %p1) {289 load i8, ptr addrspace(9) %p290 load i8, ptr addrspace(5) %p1291 ret void292}293 294; CHECK: MayAlias: i8 addrspace(9)* %p, i8 addrspace(6)* %p1295define void @test_9_6(ptr addrspace(9) %p, ptr addrspace(6) %p1) {296 load i8, ptr addrspace(9) %p297 load i8, ptr addrspace(6) %p1298 ret void299}300 301; CHECK: MayAlias: i8 addrspace(9)* %p, i8 addrspace(7)* %p1302define void @test_9_7(ptr addrspace(9) %p, ptr addrspace(7) %p1) {303 load i8, ptr addrspace(9) %p304 load i8, ptr addrspace(7) %p1305 ret void306}307 308; CHECK: MayAlias: i8 addrspace(9)* %p, i8 addrspace(8)* %p1309define void @test_9_8(ptr addrspace(9) %p, ptr addrspace(8) %p1) {310 load i8, ptr addrspace(9) %p311 load i8, ptr addrspace(8) %p1312 ret void313}314 315; CHECK: MayAlias: i8 addrspace(9)* %p, i8 addrspace(9)* %p1316define void @test_9_9(ptr addrspace(9) %p, ptr addrspace(9) %p1) {317 load i8, ptr addrspace(9) %p318 load i8, ptr addrspace(9) %p1319 ret void320}321 322; CHECK-LABEL: Function: test_kernel_arg_local_ptr323; CHECK: MayAlias: i32 addrspace(3)* %arg, i32 addrspace(3)* %arg1324; CHECK: MayAlias: i32 addrspace(3)* %arg, i32* %arg2325; CHECK: MayAlias: i32 addrspace(3)* %arg1, i32* %arg2326define amdgpu_kernel void @test_kernel_arg_local_ptr(ptr addrspace(3) %arg) {327entry:328 %load1 = load i32, ptr addrspace(3) %arg, align 4329 %arg.plus.1 = getelementptr inbounds nuw i8, ptr addrspace(3) %arg, i64 1330 %arg1 = getelementptr inbounds nuw i8, ptr addrspace(3) %arg.plus.1, i64 -1331 %load2 = load i32, ptr addrspace(3) %arg1, align 4332 %arg.plus.4 = getelementptr inbounds nuw i8, ptr addrspace(3) %arg, i64 4333 %acast = addrspacecast ptr addrspace(3) %arg.plus.4 to ptr334 %arg2 = getelementptr inbounds i8, ptr %acast, i64 -4335 %load3 = load i32, ptr %arg2, align 4336 ret void337}338