| ; 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 |
| ; 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 |
| |
| ; CHECK-LABEL: Function: test |
| ; CHECK: NoAlias: i8 addrspace(5)* %p, i8 addrspace(1)* %p1 |
| |
| define void @test(i8 addrspace(5)* %p, i8 addrspace(1)* %p1) { |
| load i8, i8 addrspace(5)* %p |
| load i8, i8 addrspace(1)* %p1 |
| ret void |
| } |
| |
| ; CHECK-LABEL: Function: test_constant_vs_global |
| ; CHECK: MayAlias: i8 addrspace(4)* %p, i8 addrspace(1)* %p1 |
| |
| define void @test_constant_vs_global(i8 addrspace(4)* %p, i8 addrspace(1)* %p1) { |
| load i8, i8 addrspace(4)* %p |
| load i8, i8 addrspace(1)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(1)* %p, i8 addrspace(4)* %p1 |
| |
| define void @test_global_vs_constant(i8 addrspace(1)* %p, i8 addrspace(4)* %p1) { |
| load i8, i8 addrspace(1)* %p |
| load i8, i8 addrspace(4)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(6)* %p, i8 addrspace(1)* %p1 |
| |
| define void @test_constant_32bit_vs_global(i8 addrspace(6)* %p, i8 addrspace(1)* %p1) { |
| load i8, i8 addrspace(6)* %p |
| load i8, i8 addrspace(1)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(6)* %p, i8 addrspace(4)* %p1 |
| |
| define void @test_constant_32bit_vs_constant(i8 addrspace(6)* %p, i8 addrspace(4)* %p1) { |
| load i8, i8 addrspace(6)* %p |
| load i8, i8 addrspace(4)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8* %p, i8 addrspace(999)* %p0 |
| define void @test_0_999(i8 addrspace(0)* %p, i8 addrspace(999)* %p0) { |
| load i8, i8 addrspace(0)* %p |
| load i8, i8 addrspace(999)* %p0 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(999)* %p, i8* %p1 |
| define void @test_999_0(i8 addrspace(999)* %p, i8 addrspace(0)* %p1) { |
| load i8, i8 addrspace(999)* %p |
| load i8, i8 addrspace(0)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(1)* %p, i8 addrspace(999)* %p1 |
| define void @test_1_999(i8 addrspace(1)* %p, i8 addrspace(999)* %p1) { |
| load i8, i8 addrspace(1)* %p |
| load i8, i8 addrspace(999)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(999)* %p, i8 addrspace(1)* %p1 |
| define void @test_999_1(i8 addrspace(999)* %p, i8 addrspace(1)* %p1) { |
| load i8, i8 addrspace(999)* %p |
| load i8, 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) { |
| load i8, i8 addrspace(2)* %p |
| load i8, i8 addrspace(0)* %p1 |
| ret void |
| } |
| |
| ; CHECK: NoAlias: i8 addrspace(2)* %p, i8 addrspace(1)* %p1 |
| define void @test_region_vs_global(i8 addrspace(2)* %p, i8 addrspace(1)* %p1) { |
| load i8, i8 addrspace(2)* %p |
| load i8, 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) { |
| load i8, i8 addrspace(2)* %p |
| load i8, 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) { |
| load i8, i8 addrspace(2)* %p |
| load i8, 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) { |
| load i8, i8 addrspace(2)* %p |
| load i8, 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) { |
| load i8, i8 addrspace(2)* %p |
| load i8, 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) { |
| load i8, i8 addrspace(2)* %p |
| load i8, 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) { |
| load i8, i8 addrspace(7)* %p |
| load i8, i8 addrspace(0)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(1)* %p1 |
| define void @test_7_1(i8 addrspace(7)* %p, i8 addrspace(1)* %p1) { |
| load i8, i8 addrspace(7)* %p |
| load i8, i8 addrspace(1)* %p1 |
| ret void |
| } |
| |
| ; CHECK: NoAlias: i8 addrspace(7)* %p, i8 addrspace(2)* %p1 |
| define void @test_7_2(i8 addrspace(7)* %p, i8 addrspace(2)* %p1) { |
| load i8, i8 addrspace(7)* %p |
| load i8, i8 addrspace(2)* %p1 |
| ret void |
| } |
| |
| ; CHECK: NoAlias: i8 addrspace(7)* %p, i8 addrspace(3)* %p1 |
| define void @test_7_3(i8 addrspace(7)* %p, i8 addrspace(3)* %p1) { |
| load i8, i8 addrspace(7)* %p |
| load i8, i8 addrspace(3)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(4)* %p1 |
| define void @test_7_4(i8 addrspace(7)* %p, i8 addrspace(4)* %p1) { |
| load i8, i8 addrspace(7)* %p |
| load i8, i8 addrspace(4)* %p1 |
| ret void |
| } |
| |
| ; CHECK: NoAlias: i8 addrspace(7)* %p, i8 addrspace(5)* %p1 |
| define void @test_7_5(i8 addrspace(7)* %p, i8 addrspace(5)* %p1) { |
| load i8, i8 addrspace(7)* %p |
| load i8, i8 addrspace(5)* %p1 |
| ret void |
| } |
| |
| ; CHECK: MayAlias: i8 addrspace(7)* %p, i8 addrspace(6)* %p1 |
| define void @test_7_6(i8 addrspace(7)* %p, i8 addrspace(6)* %p1) { |
| load i8, i8 addrspace(7)* %p |
| load i8, i8 addrspace(6)* %p1 |
| 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) { |
| load i8, i8 addrspace(7)* %p |
| load i8, i8 addrspace(7)* %p1 |
| ret void |
| } |
| |
| @cst = internal addrspace(4) global i8* undef, align 4 |
| |
| ; CHECK-LABEL: Function: test_8_0 |
| ; CHECK-DAG: NoAlias: i8 addrspace(3)* %p, i8* %p1 |
| ; CHECK-DAG: NoAlias: i8 addrspace(3)* %p, i8* addrspace(4)* @cst |
| ; CHECK-DAG: MayAlias: i8* %p1, i8* addrspace(4)* @cst |
| define void @test_8_0(i8 addrspace(3)* %p) { |
| %p1 = load i8*, i8* addrspace(4)* @cst |
| load i8, i8 addrspace(3)* %p |
| load i8, i8* %p1 |
| ret void |
| } |
| |
| ; CHECK-LABEL: Function: test_8_1 |
| ; CHECK-DAG: NoAlias: i8 addrspace(5)* %p, i8* %p1 |
| ; CHECK-DAG: NoAlias: i8 addrspace(5)* %p, i8* addrspace(4)* @cst |
| ; CHECK-DAG: MayAlias: i8* %p1, i8* addrspace(4)* @cst |
| define void @test_8_1(i8 addrspace(5)* %p) { |
| %p1 = load i8*, i8* addrspace(4)* @cst |
| load i8, i8 addrspace(5)* %p |
| load i8, i8* %p1 |
| ret void |
| } |
| |
| ; CHECK-LABEL: Function: test_8_2 |
| ; CHECK: NoAlias: i8* %p, i8 addrspace(5)* %p1 |
| define amdgpu_kernel void @test_8_2(i8* %p) { |
| %p1 = alloca i8, align 1, addrspace(5) |
| load i8, i8* %p |
| load i8, i8 addrspace(5)* %p1 |
| ret void |
| } |
| |
| ; CHECK-LABEL: Function: test_8_3 |
| ; CHECK: MayAlias: i8* %p, i8 addrspace(5)* %p1 |
| ; TODO: So far, %p1 may still alias to %p. As it's not captured at all, it |
| ; should be NoAlias. |
| define void @test_8_3(i8* %p) { |
| %p1 = alloca i8, align 1, addrspace(5) |
| load i8, i8* %p |
| load i8, i8 addrspace(5)* %p1 |
| ret void |
| } |
| |
| @shm = internal addrspace(3) global i8 undef, align 4 |
| |
| ; CHECK-LABEL: Function: test_8_4 |
| ; CHECK: NoAlias: i8* %p, i8 addrspace(3)* %p1 |
| ; CHECK: NoAlias: i8* %p, i8 addrspace(3)* @shm |
| ; CHECK: MayAlias: i8 addrspace(3)* %p1, i8 addrspace(3)* @shm |
| define amdgpu_kernel void @test_8_4(i8* %p) { |
| %p1 = getelementptr i8, i8 addrspace(3)* @shm, i32 0 |
| load i8, i8* %p |
| load i8, i8 addrspace(3)* %p1 |
| load i8, i8 addrspace(3)* @shm |
| ret void |
| } |
| |
| ; CHECK-LABEL: Function: test_8_5 |
| ; CHECK: MayAlias: i8* %p, i8 addrspace(3)* %p1 |
| ; CHECK: MayAlias: i8* %p, i8 addrspace(3)* @shm |
| ; CHECK: MayAlias: i8 addrspace(3)* %p1, i8 addrspace(3)* @shm |
| ; TODO: So far, %p1 may still alias to %p. As it's not captured at all, it |
| ; should be NoAlias. |
| define void @test_8_5(i8* %p) { |
| %p1 = getelementptr i8, i8 addrspace(3)* @shm, i32 0 |
| load i8, i8* %p |
| load i8, i8 addrspace(3)* %p1 |
| load i8, i8 addrspace(3)* @shm |
| ret void |
| } |