xref: /llvm-project/llvm/test/CodeGen/AMDGPU/flat-for-global-subtarget-feature.ll (revision 4490003a22658dcd12527029b2c8682b63d8a9d6)
1; RUN: llc < %s -mtriple=amdgcn--amdhsa -mcpu=kaveri -mattr=+flat-for-global | FileCheck -check-prefix=HSA -check-prefix=HSA-DEFAULT -check-prefix=ALL %s
2; RUN: llc < %s -mtriple=amdgcn--amdhsa -mcpu=kaveri -mattr=-flat-for-global | FileCheck -check-prefix=HSA -check-prefix=HSA-NODEFAULT -check-prefix=ALL %s
3; RUN: llc < %s -mtriple=amdgcn-- -mcpu=tonga | FileCheck -check-prefix=HSA-NOADDR64 -check-prefix=ALL %s
4; RUN: llc < %s -mtriple=amdgcn-- -mcpu=kaveri -mattr=-flat-for-global | FileCheck -check-prefix=NOHSA-DEFAULT -check-prefix=ALL %s
5; RUN: llc < %s -mtriple=amdgcn-- -mcpu=kaveri -mattr=+flat-for-global | FileCheck -check-prefix=NOHSA-NODEFAULT -check-prefix=ALL %s
6; RUN: llc < %s -mtriple=amdgcn-- -mcpu=tonga | FileCheck -check-prefix=NOHSA-NOADDR64 -check-prefix=ALL %s
7
8
9; There are no stack objects even though flat is used by default, so
10; flat_scratch_init should be disabled.
11
12; ALL-LABEL: {{^}}test:
13
14; ALL-NOT: flat_scr
15
16; HSA-DEFAULT: flat_store_dword
17; HSA-NODEFAULT: buffer_store_dword
18; HSA-NOADDR64: flat_store_dword
19
20; HSA: .amdhsa_user_sgpr_flat_scratch_init 0
21
22; NOHSA-DEFAULT: buffer_store_dword
23; NOHSA-NODEFAULT: flat_store_dword
24; NOHSA-NOADDR64: flat_store_dword
25define amdgpu_kernel void @test(ptr addrspace(1) %out) {
26entry:
27  store i32 0, ptr addrspace(1) %out
28  ret void
29}
30
31; HSA-DEFAULT: flat_store_dword
32; HSA-NODEFAULT: buffer_store_dword
33; HSA-NOADDR64: flat_store_dword
34
35; NOHSA-DEFAULT: buffer_store_dword
36; NOHSA-NODEFAULT: flat_store_dword
37; NOHSA-NOADDR64: flat_store_dword
38define amdgpu_kernel void @test_addr64(ptr addrspace(1) %out) {
39entry:
40  %out.addr = alloca ptr addrspace(1), align 4, addrspace(5)
41
42  store ptr addrspace(1) %out, ptr addrspace(5) %out.addr, align 4
43  %ld0 = load ptr addrspace(1), ptr addrspace(5) %out.addr, align 4
44
45  store i32 1, ptr addrspace(1) %ld0, align 4
46
47  %ld1 = load ptr addrspace(1), ptr addrspace(5) %out.addr, align 4
48  %arrayidx1 = getelementptr inbounds i32, ptr addrspace(1) %ld1, i32 1
49  store i32 2, ptr addrspace(1) %arrayidx1, align 4
50
51  ret void
52}
53
54!llvm.module.flags = !{!0}
55!0 = !{i32 1, !"amdhsa_code_object_version", i32 400}
56