xref: /llvm-project/llvm/test/CodeGen/AMDGPU/implicit-kernarg-backend-usage.ll (revision 41ed16c3b3362e51b7063eaef6461ab704c1ec7a)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: sed 's/CODE_OBJECT_VERSION/400/g' %s | llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 | FileCheck --check-prefix=GFX8V4 %s
3; RUN: sed 's/CODE_OBJECT_VERSION/500/g' %s | llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 | FileCheck --check-prefix=GFX8V5 %s
4; RUN: sed 's/CODE_OBJECT_VERSION/600/g' %s | llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 | FileCheck --check-prefix=GFX8V5 %s
5
6; RUN: sed 's/CODE_OBJECT_VERSION/400/g' %s | llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 | FileCheck --check-prefixes=GFX9V4 %s
7; RUN: sed 's/CODE_OBJECT_VERSION/500/g' %s | llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 | FileCheck --check-prefixes=GFX9V5 %s
8; RUN: sed 's/CODE_OBJECT_VERSION/600/g' %s | llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 | FileCheck --check-prefixes=GFX9V5 %s
9
10define amdgpu_kernel void @addrspacecast(ptr addrspace(5) %ptr.private, ptr addrspace(3) %ptr.local) {
11; GFX8V4-LABEL: addrspacecast:
12; GFX8V4:       ; %bb.0:
13; GFX8V4-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
14; GFX8V4-NEXT:    s_load_dwordx2 s[2:3], s[6:7], 0x40
15; GFX8V4-NEXT:    v_mov_b32_e32 v4, 1
16; GFX8V4-NEXT:    s_waitcnt lgkmcnt(0)
17; GFX8V4-NEXT:    s_cmp_lg_u32 s0, -1
18; GFX8V4-NEXT:    s_cselect_b32 s3, s3, 0
19; GFX8V4-NEXT:    s_cselect_b32 s0, s0, 0
20; GFX8V4-NEXT:    s_cmp_lg_u32 s1, -1
21; GFX8V4-NEXT:    v_mov_b32_e32 v0, s0
22; GFX8V4-NEXT:    v_mov_b32_e32 v1, s3
23; GFX8V4-NEXT:    s_cselect_b32 s0, s2, 0
24; GFX8V4-NEXT:    s_cselect_b32 s1, s1, 0
25; GFX8V4-NEXT:    v_mov_b32_e32 v2, s1
26; GFX8V4-NEXT:    v_mov_b32_e32 v3, s0
27; GFX8V4-NEXT:    flat_store_dword v[0:1], v4
28; GFX8V4-NEXT:    s_waitcnt vmcnt(0)
29; GFX8V4-NEXT:    v_mov_b32_e32 v0, 2
30; GFX8V4-NEXT:    flat_store_dword v[2:3], v0
31; GFX8V4-NEXT:    s_waitcnt vmcnt(0)
32; GFX8V4-NEXT:    s_endpgm
33;
34; GFX8V5-LABEL: addrspacecast:
35; GFX8V5:       ; %bb.0:
36; GFX8V5-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
37; GFX8V5-NEXT:    s_load_dwordx2 s[2:3], s[8:9], 0xc8
38; GFX8V5-NEXT:    v_mov_b32_e32 v4, 1
39; GFX8V5-NEXT:    s_waitcnt lgkmcnt(0)
40; GFX8V5-NEXT:    s_cmp_lg_u32 s0, -1
41; GFX8V5-NEXT:    s_cselect_b32 s2, s2, 0
42; GFX8V5-NEXT:    s_cselect_b32 s0, s0, 0
43; GFX8V5-NEXT:    s_cmp_lg_u32 s1, -1
44; GFX8V5-NEXT:    v_mov_b32_e32 v0, s0
45; GFX8V5-NEXT:    v_mov_b32_e32 v1, s2
46; GFX8V5-NEXT:    s_cselect_b32 s0, s3, 0
47; GFX8V5-NEXT:    s_cselect_b32 s1, s1, 0
48; GFX8V5-NEXT:    v_mov_b32_e32 v2, s1
49; GFX8V5-NEXT:    v_mov_b32_e32 v3, s0
50; GFX8V5-NEXT:    flat_store_dword v[0:1], v4
51; GFX8V5-NEXT:    s_waitcnt vmcnt(0)
52; GFX8V5-NEXT:    v_mov_b32_e32 v0, 2
53; GFX8V5-NEXT:    flat_store_dword v[2:3], v0
54; GFX8V5-NEXT:    s_waitcnt vmcnt(0)
55; GFX8V5-NEXT:    s_endpgm
56;
57; GFX9V4-LABEL: addrspacecast:
58; GFX9V4:       ; %bb.0:
59; GFX9V4-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
60; GFX9V4-NEXT:    s_mov_b64 s[2:3], src_private_base
61; GFX9V4-NEXT:    s_mov_b64 s[4:5], src_shared_base
62; GFX9V4-NEXT:    v_mov_b32_e32 v4, 1
63; GFX9V4-NEXT:    s_waitcnt lgkmcnt(0)
64; GFX9V4-NEXT:    s_cmp_lg_u32 s0, -1
65; GFX9V4-NEXT:    s_cselect_b32 s2, s3, 0
66; GFX9V4-NEXT:    s_cselect_b32 s0, s0, 0
67; GFX9V4-NEXT:    s_cmp_lg_u32 s1, -1
68; GFX9V4-NEXT:    v_mov_b32_e32 v0, s0
69; GFX9V4-NEXT:    v_mov_b32_e32 v1, s2
70; GFX9V4-NEXT:    s_cselect_b32 s0, s5, 0
71; GFX9V4-NEXT:    s_cselect_b32 s1, s1, 0
72; GFX9V4-NEXT:    v_mov_b32_e32 v2, s1
73; GFX9V4-NEXT:    v_mov_b32_e32 v3, s0
74; GFX9V4-NEXT:    flat_store_dword v[0:1], v4
75; GFX9V4-NEXT:    s_waitcnt vmcnt(0)
76; GFX9V4-NEXT:    v_mov_b32_e32 v0, 2
77; GFX9V4-NEXT:    flat_store_dword v[2:3], v0
78; GFX9V4-NEXT:    s_waitcnt vmcnt(0)
79; GFX9V4-NEXT:    s_endpgm
80;
81; GFX9V5-LABEL: addrspacecast:
82; GFX9V5:       ; %bb.0:
83; GFX9V5-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
84; GFX9V5-NEXT:    s_mov_b64 s[2:3], src_private_base
85; GFX9V5-NEXT:    s_mov_b64 s[4:5], src_shared_base
86; GFX9V5-NEXT:    v_mov_b32_e32 v4, 1
87; GFX9V5-NEXT:    s_waitcnt lgkmcnt(0)
88; GFX9V5-NEXT:    s_cmp_lg_u32 s0, -1
89; GFX9V5-NEXT:    s_cselect_b32 s2, s3, 0
90; GFX9V5-NEXT:    s_cselect_b32 s0, s0, 0
91; GFX9V5-NEXT:    s_cmp_lg_u32 s1, -1
92; GFX9V5-NEXT:    v_mov_b32_e32 v0, s0
93; GFX9V5-NEXT:    v_mov_b32_e32 v1, s2
94; GFX9V5-NEXT:    s_cselect_b32 s0, s5, 0
95; GFX9V5-NEXT:    s_cselect_b32 s1, s1, 0
96; GFX9V5-NEXT:    v_mov_b32_e32 v2, s1
97; GFX9V5-NEXT:    v_mov_b32_e32 v3, s0
98; GFX9V5-NEXT:    flat_store_dword v[0:1], v4
99; GFX9V5-NEXT:    s_waitcnt vmcnt(0)
100; GFX9V5-NEXT:    v_mov_b32_e32 v0, 2
101; GFX9V5-NEXT:    flat_store_dword v[2:3], v0
102; GFX9V5-NEXT:    s_waitcnt vmcnt(0)
103; GFX9V5-NEXT:    s_endpgm
104
105  %flat.private = addrspacecast ptr addrspace(5) %ptr.private to ptr
106  %flat.local = addrspacecast ptr addrspace(3) %ptr.local to ptr
107  store volatile i32 1, ptr %flat.private
108  store volatile i32 2, ptr %flat.local
109  ret void
110}
111
112define amdgpu_kernel void @llvm_amdgcn_is_shared(ptr %ptr) {
113; GFX8V4-LABEL: llvm_amdgcn_is_shared:
114; GFX8V4:       ; %bb.0:
115; GFX8V4-NEXT:    s_load_dword s0, s[6:7], 0x40
116; GFX8V4-NEXT:    s_load_dword s1, s[8:9], 0x4
117; GFX8V4-NEXT:    s_waitcnt lgkmcnt(0)
118; GFX8V4-NEXT:    s_cmp_eq_u32 s1, s0
119; GFX8V4-NEXT:    s_cselect_b64 s[0:1], -1, 0
120; GFX8V4-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]
121; GFX8V4-NEXT:    flat_store_dword v[0:1], v0
122; GFX8V4-NEXT:    s_waitcnt vmcnt(0)
123; GFX8V4-NEXT:    s_endpgm
124;
125; GFX8V5-LABEL: llvm_amdgcn_is_shared:
126; GFX8V5:       ; %bb.0:
127; GFX8V5-NEXT:    s_load_dword s0, s[8:9], 0xcc
128; GFX8V5-NEXT:    s_load_dword s1, s[8:9], 0x4
129; GFX8V5-NEXT:    s_waitcnt lgkmcnt(0)
130; GFX8V5-NEXT:    s_cmp_eq_u32 s1, s0
131; GFX8V5-NEXT:    s_cselect_b64 s[0:1], -1, 0
132; GFX8V5-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]
133; GFX8V5-NEXT:    flat_store_dword v[0:1], v0
134; GFX8V5-NEXT:    s_waitcnt vmcnt(0)
135; GFX8V5-NEXT:    s_endpgm
136;
137; GFX9V4-LABEL: llvm_amdgcn_is_shared:
138; GFX9V4:       ; %bb.0:
139; GFX9V4-NEXT:    s_load_dword s2, s[8:9], 0x4
140; GFX9V4-NEXT:    s_mov_b64 s[0:1], src_shared_base
141; GFX9V4-NEXT:    s_waitcnt lgkmcnt(0)
142; GFX9V4-NEXT:    s_cmp_eq_u32 s2, s1
143; GFX9V4-NEXT:    s_cselect_b64 s[0:1], -1, 0
144; GFX9V4-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]
145; GFX9V4-NEXT:    global_store_dword v[0:1], v0, off
146; GFX9V4-NEXT:    s_waitcnt vmcnt(0)
147; GFX9V4-NEXT:    s_endpgm
148;
149; GFX9V5-LABEL: llvm_amdgcn_is_shared:
150; GFX9V5:       ; %bb.0:
151; GFX9V5-NEXT:    s_load_dword s2, s[8:9], 0x4
152; GFX9V5-NEXT:    s_mov_b64 s[0:1], src_shared_base
153; GFX9V5-NEXT:    s_waitcnt lgkmcnt(0)
154; GFX9V5-NEXT:    s_cmp_eq_u32 s2, s1
155; GFX9V5-NEXT:    s_cselect_b64 s[0:1], -1, 0
156; GFX9V5-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]
157; GFX9V5-NEXT:    global_store_dword v[0:1], v0, off
158; GFX9V5-NEXT:    s_waitcnt vmcnt(0)
159; GFX9V5-NEXT:    s_endpgm
160  %is.shared = call i1 @llvm.amdgcn.is.shared(ptr %ptr)
161  %zext = zext i1 %is.shared to i32
162  store volatile i32 %zext, ptr addrspace(1) undef
163  ret void
164}
165
166define amdgpu_kernel void @llvm_amdgcn_is_private(ptr %ptr) {
167; GFX8V4-LABEL: llvm_amdgcn_is_private:
168; GFX8V4:       ; %bb.0:
169; GFX8V4-NEXT:    s_load_dword s0, s[6:7], 0x44
170; GFX8V4-NEXT:    s_load_dword s1, s[8:9], 0x4
171; GFX8V4-NEXT:    s_waitcnt lgkmcnt(0)
172; GFX8V4-NEXT:    s_cmp_eq_u32 s1, s0
173; GFX8V4-NEXT:    s_cselect_b64 s[0:1], -1, 0
174; GFX8V4-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]
175; GFX8V4-NEXT:    flat_store_dword v[0:1], v0
176; GFX8V4-NEXT:    s_waitcnt vmcnt(0)
177; GFX8V4-NEXT:    s_endpgm
178;
179; GFX8V5-LABEL: llvm_amdgcn_is_private:
180; GFX8V5:       ; %bb.0:
181; GFX8V5-NEXT:    s_load_dword s0, s[8:9], 0xc8
182; GFX8V5-NEXT:    s_load_dword s1, s[8:9], 0x4
183; GFX8V5-NEXT:    s_waitcnt lgkmcnt(0)
184; GFX8V5-NEXT:    s_cmp_eq_u32 s1, s0
185; GFX8V5-NEXT:    s_cselect_b64 s[0:1], -1, 0
186; GFX8V5-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]
187; GFX8V5-NEXT:    flat_store_dword v[0:1], v0
188; GFX8V5-NEXT:    s_waitcnt vmcnt(0)
189; GFX8V5-NEXT:    s_endpgm
190;
191; GFX9V4-LABEL: llvm_amdgcn_is_private:
192; GFX9V4:       ; %bb.0:
193; GFX9V4-NEXT:    s_load_dword s2, s[8:9], 0x4
194; GFX9V4-NEXT:    s_mov_b64 s[0:1], src_private_base
195; GFX9V4-NEXT:    s_waitcnt lgkmcnt(0)
196; GFX9V4-NEXT:    s_cmp_eq_u32 s2, s1
197; GFX9V4-NEXT:    s_cselect_b64 s[0:1], -1, 0
198; GFX9V4-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]
199; GFX9V4-NEXT:    global_store_dword v[0:1], v0, off
200; GFX9V4-NEXT:    s_waitcnt vmcnt(0)
201; GFX9V4-NEXT:    s_endpgm
202;
203; GFX9V5-LABEL: llvm_amdgcn_is_private:
204; GFX9V5:       ; %bb.0:
205; GFX9V5-NEXT:    s_load_dword s2, s[8:9], 0x4
206; GFX9V5-NEXT:    s_mov_b64 s[0:1], src_private_base
207; GFX9V5-NEXT:    s_waitcnt lgkmcnt(0)
208; GFX9V5-NEXT:    s_cmp_eq_u32 s2, s1
209; GFX9V5-NEXT:    s_cselect_b64 s[0:1], -1, 0
210; GFX9V5-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]
211; GFX9V5-NEXT:    global_store_dword v[0:1], v0, off
212; GFX9V5-NEXT:    s_waitcnt vmcnt(0)
213; GFX9V5-NEXT:    s_endpgm
214  %is.private = call i1 @llvm.amdgcn.is.private(ptr %ptr)
215  %zext = zext i1 %is.private to i32
216  store volatile i32 %zext, ptr addrspace(1) undef
217  ret void
218}
219
220define amdgpu_kernel void @llvm_trap() {
221; GFX8V4-LABEL: llvm_trap:
222; GFX8V4:       ; %bb.0:
223; GFX8V4-NEXT:    s_mov_b64 s[0:1], s[6:7]
224; GFX8V4-NEXT:    s_trap 2
225;
226; GFX8V5-LABEL: llvm_trap:
227; GFX8V5:       ; %bb.0:
228; GFX8V5-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0xc8
229; GFX8V5-NEXT:    s_waitcnt lgkmcnt(0)
230; GFX8V5-NEXT:    s_trap 2
231;
232; GFX9V4-LABEL: llvm_trap:
233; GFX9V4:       ; %bb.0:
234; GFX9V4-NEXT:    s_trap 2
235;
236; GFX9V5-LABEL: llvm_trap:
237; GFX9V5:       ; %bb.0:
238; GFX9V5-NEXT:    s_trap 2
239  call void @llvm.trap()
240  unreachable
241}
242
243define amdgpu_kernel void @llvm_debugtrap() {
244; GFX8V4-LABEL: llvm_debugtrap:
245; GFX8V4:       ; %bb.0:
246; GFX8V4-NEXT:    s_trap 3
247;
248; GFX8V5-LABEL: llvm_debugtrap:
249; GFX8V5:       ; %bb.0:
250; GFX8V5-NEXT:    s_trap 3
251;
252; GFX9V4-LABEL: llvm_debugtrap:
253; GFX9V4:       ; %bb.0:
254; GFX9V4-NEXT:    s_trap 3
255;
256; GFX9V5-LABEL: llvm_debugtrap:
257; GFX9V5:       ; %bb.0:
258; GFX9V5-NEXT:    s_trap 3
259  call void @llvm.debugtrap()
260  unreachable
261}
262
263define amdgpu_kernel void @llvm_amdgcn_queue_ptr(ptr addrspace(1) %ptr)  {
264; GFX8V4-LABEL: llvm_amdgcn_queue_ptr:
265; GFX8V4:       ; %bb.0:
266; GFX8V4-NEXT:    v_mov_b32_e32 v0, s6
267; GFX8V4-NEXT:    v_mov_b32_e32 v1, s7
268; GFX8V4-NEXT:    s_add_u32 s0, s8, 8
269; GFX8V4-NEXT:    flat_load_ubyte v0, v[0:1] glc
270; GFX8V4-NEXT:    s_addc_u32 s1, s9, 0
271; GFX8V4-NEXT:    s_waitcnt vmcnt(0)
272; GFX8V4-NEXT:    v_mov_b32_e32 v0, s0
273; GFX8V4-NEXT:    v_mov_b32_e32 v1, s1
274; GFX8V4-NEXT:    flat_load_ubyte v0, v[0:1] glc
275; GFX8V4-NEXT:    s_waitcnt vmcnt(0)
276; GFX8V4-NEXT:    v_mov_b32_e32 v0, s4
277; GFX8V4-NEXT:    v_mov_b32_e32 v1, s5
278; GFX8V4-NEXT:    flat_load_ubyte v0, v[0:1] glc
279; GFX8V4-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
280; GFX8V4-NEXT:    v_mov_b32_e32 v2, s10
281; GFX8V4-NEXT:    v_mov_b32_e32 v3, s11
282; GFX8V4-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
283; GFX8V4-NEXT:    v_mov_b32_e32 v0, s0
284; GFX8V4-NEXT:    v_mov_b32_e32 v1, s1
285; GFX8V4-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
286; GFX8V4-NEXT:    s_waitcnt vmcnt(0)
287; GFX8V4-NEXT:    s_endpgm
288;
289; GFX8V5-LABEL: llvm_amdgcn_queue_ptr:
290; GFX8V5:       ; %bb.0:
291; GFX8V5-NEXT:    v_mov_b32_e32 v0, s6
292; GFX8V5-NEXT:    v_mov_b32_e32 v1, s7
293; GFX8V5-NEXT:    s_add_u32 s0, s8, 8
294; GFX8V5-NEXT:    flat_load_ubyte v0, v[0:1] glc
295; GFX8V5-NEXT:    s_addc_u32 s1, s9, 0
296; GFX8V5-NEXT:    s_waitcnt vmcnt(0)
297; GFX8V5-NEXT:    v_mov_b32_e32 v0, s0
298; GFX8V5-NEXT:    v_mov_b32_e32 v1, s1
299; GFX8V5-NEXT:    flat_load_ubyte v0, v[0:1] glc
300; GFX8V5-NEXT:    s_waitcnt vmcnt(0)
301; GFX8V5-NEXT:    v_mov_b32_e32 v0, s4
302; GFX8V5-NEXT:    v_mov_b32_e32 v1, s5
303; GFX8V5-NEXT:    flat_load_ubyte v0, v[0:1] glc
304; GFX8V5-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
305; GFX8V5-NEXT:    v_mov_b32_e32 v2, s10
306; GFX8V5-NEXT:    v_mov_b32_e32 v3, s11
307; GFX8V5-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
308; GFX8V5-NEXT:    v_mov_b32_e32 v0, s0
309; GFX8V5-NEXT:    v_mov_b32_e32 v1, s1
310; GFX8V5-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
311; GFX8V5-NEXT:    s_waitcnt vmcnt(0)
312; GFX8V5-NEXT:    s_endpgm
313;
314; GFX9V4-LABEL: llvm_amdgcn_queue_ptr:
315; GFX9V4:       ; %bb.0:
316; GFX9V4-NEXT:    v_mov_b32_e32 v2, 0
317; GFX9V4-NEXT:    global_load_ubyte v0, v2, s[6:7] glc
318; GFX9V4-NEXT:    global_load_ubyte v0, v2, s[8:9] offset:8 glc
319; GFX9V4-NEXT:    global_load_ubyte v0, v2, s[4:5] glc
320; GFX9V4-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
321; GFX9V4-NEXT:    s_waitcnt vmcnt(0)
322; GFX9V4-NEXT:    v_mov_b32_e32 v0, s10
323; GFX9V4-NEXT:    v_mov_b32_e32 v1, s11
324; GFX9V4-NEXT:    ; kill: killed $sgpr6_sgpr7
325; GFX9V4-NEXT:    ; kill: killed $sgpr4_sgpr5
326; GFX9V4-NEXT:    s_waitcnt lgkmcnt(0)
327; GFX9V4-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
328; GFX9V4-NEXT:    s_waitcnt vmcnt(0)
329; GFX9V4-NEXT:    s_endpgm
330;
331; GFX9V5-LABEL: llvm_amdgcn_queue_ptr:
332; GFX9V5:       ; %bb.0:
333; GFX9V5-NEXT:    v_mov_b32_e32 v2, 0
334; GFX9V5-NEXT:    global_load_ubyte v0, v2, s[6:7] glc
335; GFX9V5-NEXT:    global_load_ubyte v0, v2, s[8:9] offset:8 glc
336; GFX9V5-NEXT:    global_load_ubyte v0, v2, s[4:5] glc
337; GFX9V5-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0
338; GFX9V5-NEXT:    s_waitcnt vmcnt(0)
339; GFX9V5-NEXT:    v_mov_b32_e32 v0, s10
340; GFX9V5-NEXT:    v_mov_b32_e32 v1, s11
341; GFX9V5-NEXT:    ; kill: killed $sgpr6_sgpr7
342; GFX9V5-NEXT:    ; kill: killed $sgpr4_sgpr5
343; GFX9V5-NEXT:    s_waitcnt lgkmcnt(0)
344; GFX9V5-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
345; GFX9V5-NEXT:    s_waitcnt vmcnt(0)
346; GFX9V5-NEXT:    s_endpgm
347  %queue.ptr = call ptr addrspace(4) @llvm.amdgcn.queue.ptr()
348  %implicitarg.ptr = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
349  %dispatch.ptr = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
350  %dispatch.id = call i64 @llvm.amdgcn.dispatch.id()
351  %queue.load = load volatile i8, ptr addrspace(4) %queue.ptr
352  %implicitarg.load = load volatile i8, ptr addrspace(4) %implicitarg.ptr
353  %dispatch.load = load volatile i8, ptr addrspace(4) %dispatch.ptr
354  store volatile i64 %dispatch.id, ptr addrspace(1) %ptr
355  ret void
356}
357
358declare noalias ptr addrspace(4) @llvm.amdgcn.queue.ptr()
359declare noalias ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
360declare i64 @llvm.amdgcn.dispatch.id()
361declare noalias ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
362declare i1 @llvm.amdgcn.is.shared(ptr)
363declare i1 @llvm.amdgcn.is.private(ptr)
364declare void @llvm.trap()
365declare void @llvm.debugtrap()
366
367!llvm.module.flags = !{!0}
368!0 = !{i32 1, !"amdhsa_code_object_version", i32 CODE_OBJECT_VERSION}
369