xref: /llvm-project/llvm/test/CodeGen/AMDGPU/annotate-kernel-features-hsa-call.ll (revision f4037277bb0220cb1dece91d21d4fdc2995eae7a)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals
2; RUN: opt -mtriple=amdgcn-unknown-amdhsa -S -amdgpu-annotate-kernel-features < %s | FileCheck -check-prefixes=AKF_HSA %s
3; RUN: opt -mtriple=amdgcn-unknown-amdhsa -S -passes=amdgpu-attributor < %s | FileCheck -check-prefixes=ATTRIBUTOR_HSA %s
4
5; TODO: The test contains UB which is refined by the Attributor and should be removed.
6
7declare i32 @llvm.amdgcn.workgroup.id.x() #0
8declare i32 @llvm.amdgcn.workgroup.id.y() #0
9declare i32 @llvm.amdgcn.workgroup.id.z() #0
10
11declare i32 @llvm.amdgcn.workitem.id.x() #0
12declare i32 @llvm.amdgcn.workitem.id.y() #0
13declare i32 @llvm.amdgcn.workitem.id.z() #0
14
15declare ptr addrspace(4) @llvm.amdgcn.dispatch.ptr() #0
16declare ptr addrspace(4) @llvm.amdgcn.queue.ptr() #0
17declare ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() #0
18declare ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr() #0
19declare i64 @llvm.amdgcn.dispatch.id() #0
20
21define void @use_workitem_id_x() #1 {
22; AKF_HSA-LABEL: define {{[^@]+}}@use_workitem_id_x
23; AKF_HSA-SAME: () #[[ATTR1:[0-9]+]] {
24; AKF_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()
25; AKF_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
26; AKF_HSA-NEXT:    ret void
27;
28; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_x
29; ATTRIBUTOR_HSA-SAME: () #[[ATTR1:[0-9]+]] {
30; ATTRIBUTOR_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()
31; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
32; ATTRIBUTOR_HSA-NEXT:    ret void
33;
34  %val = call i32 @llvm.amdgcn.workitem.id.x()
35  store volatile i32 %val, ptr addrspace(1) undef
36  ret void
37}
38
39define void @use_workitem_id_y() #1 {
40; AKF_HSA-LABEL: define {{[^@]+}}@use_workitem_id_y
41; AKF_HSA-SAME: () #[[ATTR1]] {
42; AKF_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.y()
43; AKF_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
44; AKF_HSA-NEXT:    ret void
45;
46; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_y
47; ATTRIBUTOR_HSA-SAME: () #[[ATTR2:[0-9]+]] {
48; ATTRIBUTOR_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.y()
49; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
50; ATTRIBUTOR_HSA-NEXT:    ret void
51;
52  %val = call i32 @llvm.amdgcn.workitem.id.y()
53  store volatile i32 %val, ptr addrspace(1) undef
54  ret void
55}
56
57define void @use_workitem_id_z() #1 {
58; AKF_HSA-LABEL: define {{[^@]+}}@use_workitem_id_z
59; AKF_HSA-SAME: () #[[ATTR1]] {
60; AKF_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.z()
61; AKF_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
62; AKF_HSA-NEXT:    ret void
63;
64; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_z
65; ATTRIBUTOR_HSA-SAME: () #[[ATTR3:[0-9]+]] {
66; ATTRIBUTOR_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.z()
67; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
68; ATTRIBUTOR_HSA-NEXT:    ret void
69;
70  %val = call i32 @llvm.amdgcn.workitem.id.z()
71  store volatile i32 %val, ptr addrspace(1) undef
72  ret void
73}
74
75define void @use_workgroup_id_x() #1 {
76; AKF_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_x
77; AKF_HSA-SAME: () #[[ATTR1]] {
78; AKF_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.x()
79; AKF_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
80; AKF_HSA-NEXT:    ret void
81;
82; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_x
83; ATTRIBUTOR_HSA-SAME: () #[[ATTR4:[0-9]+]] {
84; ATTRIBUTOR_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.x()
85; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
86; ATTRIBUTOR_HSA-NEXT:    ret void
87;
88  %val = call i32 @llvm.amdgcn.workgroup.id.x()
89  store volatile i32 %val, ptr addrspace(1) undef
90  ret void
91}
92
93define void @use_workgroup_id_y() #1 {
94; AKF_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y
95; AKF_HSA-SAME: () #[[ATTR1]] {
96; AKF_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.y()
97; AKF_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
98; AKF_HSA-NEXT:    ret void
99;
100; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y
101; ATTRIBUTOR_HSA-SAME: () #[[ATTR5:[0-9]+]] {
102; ATTRIBUTOR_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.y()
103; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
104; ATTRIBUTOR_HSA-NEXT:    ret void
105;
106  %val = call i32 @llvm.amdgcn.workgroup.id.y()
107  store volatile i32 %val, ptr addrspace(1) undef
108  ret void
109}
110
111define void @use_workgroup_id_z() #1 {
112; AKF_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_z
113; AKF_HSA-SAME: () #[[ATTR1]] {
114; AKF_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.z()
115; AKF_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
116; AKF_HSA-NEXT:    ret void
117;
118; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_z
119; ATTRIBUTOR_HSA-SAME: () #[[ATTR6:[0-9]+]] {
120; ATTRIBUTOR_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.z()
121; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
122; ATTRIBUTOR_HSA-NEXT:    ret void
123;
124  %val = call i32 @llvm.amdgcn.workgroup.id.z()
125  store volatile i32 %val, ptr addrspace(1) undef
126  ret void
127}
128
129define void @use_dispatch_ptr() #1 {
130; AKF_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr
131; AKF_HSA-SAME: () #[[ATTR1]] {
132; AKF_HSA-NEXT:    [[DISPATCH_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
133; AKF_HSA-NEXT:    store volatile ptr addrspace(4) [[DISPATCH_PTR]], ptr addrspace(1) undef, align 8
134; AKF_HSA-NEXT:    ret void
135;
136; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr
137; ATTRIBUTOR_HSA-SAME: () #[[ATTR7:[0-9]+]] {
138; ATTRIBUTOR_HSA-NEXT:    [[DISPATCH_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
139; ATTRIBUTOR_HSA-NEXT:    store volatile ptr addrspace(4) [[DISPATCH_PTR]], ptr addrspace(1) undef, align 8
140; ATTRIBUTOR_HSA-NEXT:    ret void
141;
142  %dispatch.ptr = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
143  store volatile ptr addrspace(4) %dispatch.ptr, ptr addrspace(1) undef
144  ret void
145}
146
147define void @use_queue_ptr() #1 {
148; AKF_HSA-LABEL: define {{[^@]+}}@use_queue_ptr
149; AKF_HSA-SAME: () #[[ATTR1]] {
150; AKF_HSA-NEXT:    [[QUEUE_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.queue.ptr()
151; AKF_HSA-NEXT:    store volatile ptr addrspace(4) [[QUEUE_PTR]], ptr addrspace(1) undef, align 8
152; AKF_HSA-NEXT:    ret void
153;
154; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_queue_ptr
155; ATTRIBUTOR_HSA-SAME: () #[[ATTR8:[0-9]+]] {
156; ATTRIBUTOR_HSA-NEXT:    [[QUEUE_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.queue.ptr()
157; ATTRIBUTOR_HSA-NEXT:    store volatile ptr addrspace(4) [[QUEUE_PTR]], ptr addrspace(1) undef, align 8
158; ATTRIBUTOR_HSA-NEXT:    ret void
159;
160  %queue.ptr = call ptr addrspace(4) @llvm.amdgcn.queue.ptr()
161  store volatile ptr addrspace(4) %queue.ptr, ptr addrspace(1) undef
162  ret void
163}
164
165define void @use_dispatch_id() #1 {
166; AKF_HSA-LABEL: define {{[^@]+}}@use_dispatch_id
167; AKF_HSA-SAME: () #[[ATTR1]] {
168; AKF_HSA-NEXT:    [[VAL:%.*]] = call i64 @llvm.amdgcn.dispatch.id()
169; AKF_HSA-NEXT:    store volatile i64 [[VAL]], ptr addrspace(1) undef, align 8
170; AKF_HSA-NEXT:    ret void
171;
172; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_id
173; ATTRIBUTOR_HSA-SAME: () #[[ATTR9:[0-9]+]] {
174; ATTRIBUTOR_HSA-NEXT:    [[VAL:%.*]] = call i64 @llvm.amdgcn.dispatch.id()
175; ATTRIBUTOR_HSA-NEXT:    store volatile i64 [[VAL]], ptr addrspace(1) undef, align 8
176; ATTRIBUTOR_HSA-NEXT:    ret void
177;
178  %val = call i64 @llvm.amdgcn.dispatch.id()
179  store volatile i64 %val, ptr addrspace(1) undef
180  ret void
181}
182
183define void @use_workgroup_id_y_workgroup_id_z() #1 {
184; AKF_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y_workgroup_id_z
185; AKF_HSA-SAME: () #[[ATTR1]] {
186; AKF_HSA-NEXT:    [[VAL0:%.*]] = call i32 @llvm.amdgcn.workgroup.id.y()
187; AKF_HSA-NEXT:    [[VAL1:%.*]] = call i32 @llvm.amdgcn.workgroup.id.z()
188; AKF_HSA-NEXT:    store volatile i32 [[VAL0]], ptr addrspace(1) undef, align 4
189; AKF_HSA-NEXT:    store volatile i32 [[VAL1]], ptr addrspace(1) undef, align 4
190; AKF_HSA-NEXT:    ret void
191;
192; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y_workgroup_id_z
193; ATTRIBUTOR_HSA-SAME: () #[[ATTR10:[0-9]+]] {
194; ATTRIBUTOR_HSA-NEXT:    [[VAL0:%.*]] = call i32 @llvm.amdgcn.workgroup.id.y()
195; ATTRIBUTOR_HSA-NEXT:    [[VAL1:%.*]] = call i32 @llvm.amdgcn.workgroup.id.z()
196; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL0]], ptr addrspace(1) undef, align 4
197; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL1]], ptr addrspace(1) undef, align 4
198; ATTRIBUTOR_HSA-NEXT:    ret void
199;
200  %val0 = call i32 @llvm.amdgcn.workgroup.id.y()
201  %val1 = call i32 @llvm.amdgcn.workgroup.id.z()
202  store volatile i32 %val0, ptr addrspace(1) undef
203  store volatile i32 %val1, ptr addrspace(1) undef
204  ret void
205}
206
207define void @func_indirect_use_workitem_id_x() #1 {
208; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_x
209; AKF_HSA-SAME: () #[[ATTR1]] {
210; AKF_HSA-NEXT:    call void @use_workitem_id_x()
211; AKF_HSA-NEXT:    ret void
212;
213; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_x
214; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] {
215; ATTRIBUTOR_HSA-NEXT:    call void @use_workitem_id_x()
216; ATTRIBUTOR_HSA-NEXT:    ret void
217;
218  call void @use_workitem_id_x()
219  ret void
220}
221
222define void @kernel_indirect_use_workitem_id_x() #1 {
223; AKF_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workitem_id_x
224; AKF_HSA-SAME: () #[[ATTR1]] {
225; AKF_HSA-NEXT:    call void @use_workitem_id_x()
226; AKF_HSA-NEXT:    ret void
227;
228; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workitem_id_x
229; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] {
230; ATTRIBUTOR_HSA-NEXT:    call void @use_workitem_id_x()
231; ATTRIBUTOR_HSA-NEXT:    ret void
232;
233  call void @use_workitem_id_x()
234  ret void
235}
236
237define void @func_indirect_use_workitem_id_y() #1 {
238; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_y
239; AKF_HSA-SAME: () #[[ATTR1]] {
240; AKF_HSA-NEXT:    call void @use_workitem_id_y()
241; AKF_HSA-NEXT:    ret void
242;
243; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_y
244; ATTRIBUTOR_HSA-SAME: () #[[ATTR2]] {
245; ATTRIBUTOR_HSA-NEXT:    call void @use_workitem_id_y()
246; ATTRIBUTOR_HSA-NEXT:    ret void
247;
248  call void @use_workitem_id_y()
249  ret void
250}
251
252define void @func_indirect_use_workitem_id_z() #1 {
253; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_z
254; AKF_HSA-SAME: () #[[ATTR1]] {
255; AKF_HSA-NEXT:    call void @use_workitem_id_z()
256; AKF_HSA-NEXT:    ret void
257;
258; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_z
259; ATTRIBUTOR_HSA-SAME: () #[[ATTR3]] {
260; ATTRIBUTOR_HSA-NEXT:    call void @use_workitem_id_z()
261; ATTRIBUTOR_HSA-NEXT:    ret void
262;
263  call void @use_workitem_id_z()
264  ret void
265}
266
267define void @func_indirect_use_workgroup_id_x() #1 {
268; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_x
269; AKF_HSA-SAME: () #[[ATTR1]] {
270; AKF_HSA-NEXT:    call void @use_workgroup_id_x()
271; AKF_HSA-NEXT:    ret void
272;
273; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_x
274; ATTRIBUTOR_HSA-SAME: () #[[ATTR4]] {
275; ATTRIBUTOR_HSA-NEXT:    call void @use_workgroup_id_x()
276; ATTRIBUTOR_HSA-NEXT:    ret void
277;
278  call void @use_workgroup_id_x()
279  ret void
280}
281
282define void @kernel_indirect_use_workgroup_id_x() #1 {
283; AKF_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workgroup_id_x
284; AKF_HSA-SAME: () #[[ATTR1]] {
285; AKF_HSA-NEXT:    call void @use_workgroup_id_x()
286; AKF_HSA-NEXT:    ret void
287;
288; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workgroup_id_x
289; ATTRIBUTOR_HSA-SAME: () #[[ATTR4]] {
290; ATTRIBUTOR_HSA-NEXT:    call void @use_workgroup_id_x()
291; ATTRIBUTOR_HSA-NEXT:    ret void
292;
293  call void @use_workgroup_id_x()
294  ret void
295}
296
297define void @func_indirect_use_workgroup_id_y() #1 {
298; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y
299; AKF_HSA-SAME: () #[[ATTR1]] {
300; AKF_HSA-NEXT:    call void @use_workgroup_id_y()
301; AKF_HSA-NEXT:    ret void
302;
303; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y
304; ATTRIBUTOR_HSA-SAME: () #[[ATTR5]] {
305; ATTRIBUTOR_HSA-NEXT:    call void @use_workgroup_id_y()
306; ATTRIBUTOR_HSA-NEXT:    ret void
307;
308  call void @use_workgroup_id_y()
309  ret void
310}
311
312define void @func_indirect_use_workgroup_id_z() #1 {
313; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_z
314; AKF_HSA-SAME: () #[[ATTR1]] {
315; AKF_HSA-NEXT:    call void @use_workgroup_id_z()
316; AKF_HSA-NEXT:    ret void
317;
318; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_z
319; ATTRIBUTOR_HSA-SAME: () #[[ATTR6]] {
320; ATTRIBUTOR_HSA-NEXT:    call void @use_workgroup_id_z()
321; ATTRIBUTOR_HSA-NEXT:    ret void
322;
323  call void @use_workgroup_id_z()
324  ret void
325}
326
327define void @func_indirect_indirect_use_workgroup_id_y() #1 {
328; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_indirect_use_workgroup_id_y
329; AKF_HSA-SAME: () #[[ATTR1]] {
330; AKF_HSA-NEXT:    call void @func_indirect_use_workgroup_id_y()
331; AKF_HSA-NEXT:    ret void
332;
333; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_indirect_use_workgroup_id_y
334; ATTRIBUTOR_HSA-SAME: () #[[ATTR5]] {
335; ATTRIBUTOR_HSA-NEXT:    call void @func_indirect_use_workgroup_id_y()
336; ATTRIBUTOR_HSA-NEXT:    ret void
337;
338  call void @func_indirect_use_workgroup_id_y()
339  ret void
340}
341
342define void @indirect_x2_use_workgroup_id_y() #1 {
343; AKF_HSA-LABEL: define {{[^@]+}}@indirect_x2_use_workgroup_id_y
344; AKF_HSA-SAME: () #[[ATTR1]] {
345; AKF_HSA-NEXT:    call void @func_indirect_indirect_use_workgroup_id_y()
346; AKF_HSA-NEXT:    ret void
347;
348; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_x2_use_workgroup_id_y
349; ATTRIBUTOR_HSA-SAME: () #[[ATTR5]] {
350; ATTRIBUTOR_HSA-NEXT:    call void @func_indirect_indirect_use_workgroup_id_y()
351; ATTRIBUTOR_HSA-NEXT:    ret void
352;
353  call void @func_indirect_indirect_use_workgroup_id_y()
354  ret void
355}
356
357define void @func_indirect_use_dispatch_ptr() #1 {
358; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr
359; AKF_HSA-SAME: () #[[ATTR1]] {
360; AKF_HSA-NEXT:    call void @use_dispatch_ptr()
361; AKF_HSA-NEXT:    ret void
362;
363; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr
364; ATTRIBUTOR_HSA-SAME: () #[[ATTR7]] {
365; ATTRIBUTOR_HSA-NEXT:    call void @use_dispatch_ptr()
366; ATTRIBUTOR_HSA-NEXT:    ret void
367;
368  call void @use_dispatch_ptr()
369  ret void
370}
371
372define void @func_indirect_use_queue_ptr() #1 {
373; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_queue_ptr
374; AKF_HSA-SAME: () #[[ATTR1]] {
375; AKF_HSA-NEXT:    call void @use_queue_ptr()
376; AKF_HSA-NEXT:    ret void
377;
378; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_queue_ptr
379; ATTRIBUTOR_HSA-SAME: () #[[ATTR8]] {
380; ATTRIBUTOR_HSA-NEXT:    call void @use_queue_ptr()
381; ATTRIBUTOR_HSA-NEXT:    ret void
382;
383  call void @use_queue_ptr()
384  ret void
385}
386
387define void @func_indirect_use_dispatch_id() #1 {
388; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_id
389; AKF_HSA-SAME: () #[[ATTR1]] {
390; AKF_HSA-NEXT:    call void @use_dispatch_id()
391; AKF_HSA-NEXT:    ret void
392;
393; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_id
394; ATTRIBUTOR_HSA-SAME: () #[[ATTR9]] {
395; ATTRIBUTOR_HSA-NEXT:    call void @use_dispatch_id()
396; ATTRIBUTOR_HSA-NEXT:    ret void
397;
398  call void @use_dispatch_id()
399  ret void
400}
401
402define void @func_indirect_use_workgroup_id_y_workgroup_id_z() #1 {
403; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y_workgroup_id_z
404; AKF_HSA-SAME: () #[[ATTR1]] {
405; AKF_HSA-NEXT:    call void @func_indirect_use_workgroup_id_y_workgroup_id_z()
406; AKF_HSA-NEXT:    ret void
407;
408; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y_workgroup_id_z
409; ATTRIBUTOR_HSA-SAME: () #[[ATTR11:[0-9]+]] {
410; ATTRIBUTOR_HSA-NEXT:    call void @func_indirect_use_workgroup_id_y_workgroup_id_z()
411; ATTRIBUTOR_HSA-NEXT:    ret void
412;
413  call void @func_indirect_use_workgroup_id_y_workgroup_id_z()
414  ret void
415}
416
417define void @recursive_use_workitem_id_y() #1 {
418; AKF_HSA-LABEL: define {{[^@]+}}@recursive_use_workitem_id_y
419; AKF_HSA-SAME: () #[[ATTR1]] {
420; AKF_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.y()
421; AKF_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
422; AKF_HSA-NEXT:    call void @recursive_use_workitem_id_y()
423; AKF_HSA-NEXT:    ret void
424;
425; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@recursive_use_workitem_id_y
426; ATTRIBUTOR_HSA-SAME: () #[[ATTR2]] {
427; ATTRIBUTOR_HSA-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.y()
428; ATTRIBUTOR_HSA-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) undef, align 4
429; ATTRIBUTOR_HSA-NEXT:    call void @recursive_use_workitem_id_y()
430; ATTRIBUTOR_HSA-NEXT:    ret void
431;
432  %val = call i32 @llvm.amdgcn.workitem.id.y()
433  store volatile i32 %val, ptr addrspace(1) undef
434  call void @recursive_use_workitem_id_y()
435  ret void
436}
437
438define void @call_recursive_use_workitem_id_y() #1 {
439; AKF_HSA-LABEL: define {{[^@]+}}@call_recursive_use_workitem_id_y
440; AKF_HSA-SAME: () #[[ATTR1]] {
441; AKF_HSA-NEXT:    call void @recursive_use_workitem_id_y()
442; AKF_HSA-NEXT:    ret void
443;
444; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@call_recursive_use_workitem_id_y
445; ATTRIBUTOR_HSA-SAME: () #[[ATTR2]] {
446; ATTRIBUTOR_HSA-NEXT:    call void @recursive_use_workitem_id_y()
447; ATTRIBUTOR_HSA-NEXT:    ret void
448;
449  call void @recursive_use_workitem_id_y()
450  ret void
451}
452
453define void @use_group_to_flat_addrspacecast(ptr addrspace(3) %ptr) #1 {
454; AKF_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast
455; AKF_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] {
456; AKF_HSA-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)
457; AKF_HSA-NEXT:    store volatile i32 0, ptr addrspace(4) [[STOF]], align 4
458; AKF_HSA-NEXT:    ret void
459;
460; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast
461; ATTRIBUTOR_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR12:[0-9]+]] {
462; ATTRIBUTOR_HSA-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)
463; ATTRIBUTOR_HSA-NEXT:    store volatile i32 0, ptr addrspace(4) [[STOF]], align 4
464; ATTRIBUTOR_HSA-NEXT:    ret void
465;
466  %stof = addrspacecast ptr addrspace(3) %ptr to ptr addrspace(4)
467  store volatile i32 0, ptr addrspace(4) %stof
468  ret void
469}
470
471
472define void @use_group_to_flat_addrspacecast_gfx9(ptr addrspace(3) %ptr) #2 {
473; AKF_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_gfx9
474; AKF_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR2:[0-9]+]] {
475; AKF_HSA-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)
476; AKF_HSA-NEXT:    store volatile i32 0, ptr addrspace(4) [[STOF]], align 4
477; AKF_HSA-NEXT:    ret void
478;
479; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_gfx9
480; ATTRIBUTOR_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR13:[0-9]+]] {
481; ATTRIBUTOR_HSA-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)
482; ATTRIBUTOR_HSA-NEXT:    store volatile i32 0, ptr addrspace(4) [[STOF]], align 4
483; ATTRIBUTOR_HSA-NEXT:    ret void
484;
485  %stof = addrspacecast ptr addrspace(3) %ptr to ptr addrspace(4)
486  store volatile i32 0, ptr addrspace(4) %stof
487  ret void
488}
489
490define void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(ptr addrspace(3) %ptr) #2 {
491; AKF_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_queue_ptr_gfx9
492; AKF_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR2]] {
493; AKF_HSA-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)
494; AKF_HSA-NEXT:    store volatile i32 0, ptr addrspace(4) [[STOF]], align 4
495; AKF_HSA-NEXT:    call void @func_indirect_use_queue_ptr()
496; AKF_HSA-NEXT:    ret void
497;
498; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_queue_ptr_gfx9
499; ATTRIBUTOR_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR14:[0-9]+]] {
500; ATTRIBUTOR_HSA-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)
501; ATTRIBUTOR_HSA-NEXT:    store volatile i32 0, ptr addrspace(4) [[STOF]], align 4
502; ATTRIBUTOR_HSA-NEXT:    call void @func_indirect_use_queue_ptr()
503; ATTRIBUTOR_HSA-NEXT:    ret void
504;
505  %stof = addrspacecast ptr addrspace(3) %ptr to ptr addrspace(4)
506  store volatile i32 0, ptr addrspace(4) %stof
507  call void @func_indirect_use_queue_ptr()
508  ret void
509}
510
511define void @indirect_use_group_to_flat_addrspacecast() #1 {
512; AKF_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast
513; AKF_HSA-SAME: () #[[ATTR1]] {
514; AKF_HSA-NEXT:    call void @use_group_to_flat_addrspacecast(ptr addrspace(3) null)
515; AKF_HSA-NEXT:    ret void
516;
517; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast
518; ATTRIBUTOR_HSA-SAME: () #[[ATTR12]] {
519; ATTRIBUTOR_HSA-NEXT:    call void @use_group_to_flat_addrspacecast(ptr addrspace(3) null)
520; ATTRIBUTOR_HSA-NEXT:    ret void
521;
522  call void @use_group_to_flat_addrspacecast(ptr addrspace(3) null)
523  ret void
524}
525
526define void @indirect_use_group_to_flat_addrspacecast_gfx9() #1 {
527; AKF_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_gfx9
528; AKF_HSA-SAME: () #[[ATTR1]] {
529; AKF_HSA-NEXT:    call void @use_group_to_flat_addrspacecast_gfx9(ptr addrspace(3) null)
530; AKF_HSA-NEXT:    ret void
531;
532; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_gfx9
533; ATTRIBUTOR_HSA-SAME: () #[[ATTR11]] {
534; ATTRIBUTOR_HSA-NEXT:    call void @use_group_to_flat_addrspacecast_gfx9(ptr addrspace(3) null)
535; ATTRIBUTOR_HSA-NEXT:    ret void
536;
537  call void @use_group_to_flat_addrspacecast_gfx9(ptr addrspace(3) null)
538  ret void
539}
540
541define void @indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9() #1 {
542; AKF_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9
543; AKF_HSA-SAME: () #[[ATTR1]] {
544; AKF_HSA-NEXT:    call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(ptr addrspace(3) null)
545; AKF_HSA-NEXT:    ret void
546;
547; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9
548; ATTRIBUTOR_HSA-SAME: () #[[ATTR8]] {
549; ATTRIBUTOR_HSA-NEXT:    call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(ptr addrspace(3) null)
550; ATTRIBUTOR_HSA-NEXT:    ret void
551;
552  call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(ptr addrspace(3) null)
553  ret void
554}
555
556define void @use_kernarg_segment_ptr() #1 {
557; AKF_HSA-LABEL: define {{[^@]+}}@use_kernarg_segment_ptr
558; AKF_HSA-SAME: () #[[ATTR1]] {
559; AKF_HSA-NEXT:    [[KERNARG_SEGMENT_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr()
560; AKF_HSA-NEXT:    store volatile ptr addrspace(4) [[KERNARG_SEGMENT_PTR]], ptr addrspace(1) undef, align 8
561; AKF_HSA-NEXT:    ret void
562;
563; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_kernarg_segment_ptr
564; ATTRIBUTOR_HSA-SAME: () #[[ATTR11]] {
565; ATTRIBUTOR_HSA-NEXT:    [[KERNARG_SEGMENT_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr()
566; ATTRIBUTOR_HSA-NEXT:    store volatile ptr addrspace(4) [[KERNARG_SEGMENT_PTR]], ptr addrspace(1) undef, align 8
567; ATTRIBUTOR_HSA-NEXT:    ret void
568;
569  %kernarg.segment.ptr = call ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr()
570  store volatile ptr addrspace(4) %kernarg.segment.ptr, ptr addrspace(1) undef
571  ret void
572}
573define void @func_indirect_use_kernarg_segment_ptr() #1 {
574; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_kernarg_segment_ptr
575; AKF_HSA-SAME: () #[[ATTR1]] {
576; AKF_HSA-NEXT:    call void @use_kernarg_segment_ptr()
577; AKF_HSA-NEXT:    ret void
578;
579; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_kernarg_segment_ptr
580; ATTRIBUTOR_HSA-SAME: () #[[ATTR11]] {
581; ATTRIBUTOR_HSA-NEXT:    call void @use_kernarg_segment_ptr()
582; ATTRIBUTOR_HSA-NEXT:    ret void
583;
584  call void @use_kernarg_segment_ptr()
585  ret void
586}
587
588define amdgpu_kernel void @kern_use_implicitarg_ptr() #1 {
589; AKF_HSA-LABEL: define {{[^@]+}}@kern_use_implicitarg_ptr
590; AKF_HSA-SAME: () #[[ATTR1]] {
591; AKF_HSA-NEXT:    [[IMPLICITARG_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
592; AKF_HSA-NEXT:    store volatile ptr addrspace(4) [[IMPLICITARG_PTR]], ptr addrspace(1) undef, align 8
593; AKF_HSA-NEXT:    ret void
594;
595; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_use_implicitarg_ptr
596; ATTRIBUTOR_HSA-SAME: () #[[ATTR12]] {
597; ATTRIBUTOR_HSA-NEXT:    [[IMPLICITARG_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
598; ATTRIBUTOR_HSA-NEXT:    store volatile ptr addrspace(4) [[IMPLICITARG_PTR]], ptr addrspace(1) undef, align 8
599; ATTRIBUTOR_HSA-NEXT:    ret void
600;
601  %implicitarg.ptr = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
602  store volatile ptr addrspace(4) %implicitarg.ptr, ptr addrspace(1) undef
603  ret void
604}
605
606define void @use_implicitarg_ptr() #1 {
607; AKF_HSA-LABEL: define {{[^@]+}}@use_implicitarg_ptr
608; AKF_HSA-SAME: () #[[ATTR1]] {
609; AKF_HSA-NEXT:    [[IMPLICITARG_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
610; AKF_HSA-NEXT:    store volatile ptr addrspace(4) [[IMPLICITARG_PTR]], ptr addrspace(1) undef, align 8
611; AKF_HSA-NEXT:    ret void
612;
613; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_implicitarg_ptr
614; ATTRIBUTOR_HSA-SAME: () #[[ATTR12]] {
615; ATTRIBUTOR_HSA-NEXT:    [[IMPLICITARG_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
616; ATTRIBUTOR_HSA-NEXT:    store volatile ptr addrspace(4) [[IMPLICITARG_PTR]], ptr addrspace(1) undef, align 8
617; ATTRIBUTOR_HSA-NEXT:    ret void
618;
619  %implicitarg.ptr = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()
620  store volatile ptr addrspace(4) %implicitarg.ptr, ptr addrspace(1) undef
621  ret void
622}
623
624define void @func_indirect_use_implicitarg_ptr() #1 {
625; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_implicitarg_ptr
626; AKF_HSA-SAME: () #[[ATTR1]] {
627; AKF_HSA-NEXT:    call void @use_implicitarg_ptr()
628; AKF_HSA-NEXT:    ret void
629;
630; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_implicitarg_ptr
631; ATTRIBUTOR_HSA-SAME: () #[[ATTR12]] {
632; ATTRIBUTOR_HSA-NEXT:    call void @use_implicitarg_ptr()
633; ATTRIBUTOR_HSA-NEXT:    ret void
634;
635  call void @use_implicitarg_ptr()
636  ret void
637}
638
639declare void @external.func() #3
640
641; This function gets deleted.
642define internal void @defined.func() #3 {
643; AKF_HSA-LABEL: define {{[^@]+}}@defined.func
644; AKF_HSA-SAME: () #[[ATTR3:[0-9]+]] {
645; AKF_HSA-NEXT:    ret void
646;
647; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@defined.func
648; ATTRIBUTOR_HSA-SAME: () #[[ATTR16:[0-9]+]] {
649; ATTRIBUTOR_HSA-NEXT:    ret void
650;
651  ret void
652}
653
654define void @func_call_external() #3 {
655; AKF_HSA-LABEL: define {{[^@]+}}@func_call_external
656; AKF_HSA-SAME: () #[[ATTR3]] {
657; AKF_HSA-NEXT:    call void @external.func()
658; AKF_HSA-NEXT:    ret void
659;
660; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_external
661; ATTRIBUTOR_HSA-SAME: () #[[ATTR15:[0-9]+]] {
662; ATTRIBUTOR_HSA-NEXT:    call void @external.func()
663; ATTRIBUTOR_HSA-NEXT:    ret void
664;
665  call void @external.func()
666  ret void
667}
668
669define void @func_call_defined() #3 {
670; AKF_HSA-LABEL: define {{[^@]+}}@func_call_defined
671; AKF_HSA-SAME: () #[[ATTR3]] {
672; AKF_HSA-NEXT:    call void @defined.func()
673; AKF_HSA-NEXT:    ret void
674;
675; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_defined
676; ATTRIBUTOR_HSA-SAME: () #[[ATTR16]] {
677; ATTRIBUTOR_HSA-NEXT:    call void @defined.func()
678; ATTRIBUTOR_HSA-NEXT:    ret void
679;
680  call void @defined.func()
681  ret void
682}
683define void @func_call_asm() #3 {
684; AKF_HSA-LABEL: define {{[^@]+}}@func_call_asm
685; AKF_HSA-SAME: () #[[ATTR3]] {
686; AKF_HSA-NEXT:    call void asm sideeffect "", ""() #[[ATTR3]]
687; AKF_HSA-NEXT:    ret void
688;
689; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_asm
690; ATTRIBUTOR_HSA-SAME: () #[[ATTR16]] {
691; ATTRIBUTOR_HSA-NEXT:    call void asm sideeffect "", ""() #[[ATTR26:[0-9]+]]
692; ATTRIBUTOR_HSA-NEXT:    ret void
693;
694  call void asm sideeffect "", ""() #3
695  ret void
696}
697
698define amdgpu_kernel void @kern_call_external() #3 {
699; AKF_HSA-LABEL: define {{[^@]+}}@kern_call_external
700; AKF_HSA-SAME: () #[[ATTR4:[0-9]+]] {
701; AKF_HSA-NEXT:    call void @external.func()
702; AKF_HSA-NEXT:    ret void
703;
704; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_call_external
705; ATTRIBUTOR_HSA-SAME: () #[[ATTR15]] {
706; ATTRIBUTOR_HSA-NEXT:    call void @external.func()
707; ATTRIBUTOR_HSA-NEXT:    ret void
708;
709  call void @external.func()
710  ret void
711}
712
713define amdgpu_kernel void @func_kern_defined() #3 {
714; AKF_HSA-LABEL: define {{[^@]+}}@func_kern_defined
715; AKF_HSA-SAME: () #[[ATTR4]] {
716; AKF_HSA-NEXT:    call void @defined.func()
717; AKF_HSA-NEXT:    ret void
718;
719; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_kern_defined
720; ATTRIBUTOR_HSA-SAME: () #[[ATTR17:[0-9]+]] {
721; ATTRIBUTOR_HSA-NEXT:    call void @defined.func()
722; ATTRIBUTOR_HSA-NEXT:    ret void
723;
724  call void @defined.func()
725  ret void
726}
727
728define i32 @use_dispatch_ptr_ret_type() #1 {
729; AKF_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr_ret_type
730; AKF_HSA-SAME: () #[[ATTR1]] {
731; AKF_HSA-NEXT:    [[DISPATCH_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
732; AKF_HSA-NEXT:    store volatile ptr addrspace(4) [[DISPATCH_PTR]], ptr addrspace(1) undef, align 8
733; AKF_HSA-NEXT:    ret i32 0
734;
735; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr_ret_type
736; ATTRIBUTOR_HSA-SAME: () #[[ATTR7]] {
737; ATTRIBUTOR_HSA-NEXT:    [[DISPATCH_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
738; ATTRIBUTOR_HSA-NEXT:    store volatile ptr addrspace(4) [[DISPATCH_PTR]], ptr addrspace(1) undef, align 8
739; ATTRIBUTOR_HSA-NEXT:    ret i32 0
740;
741  %dispatch.ptr = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()
742  store volatile ptr addrspace(4) %dispatch.ptr, ptr addrspace(1) undef
743  ret i32 0
744}
745
746define float @func_indirect_use_dispatch_ptr_constexpr_cast_func() #1 {
747; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr_constexpr_cast_func
748; AKF_HSA-SAME: () #[[ATTR1]] {
749; AKF_HSA-NEXT:    [[F:%.*]] = call float @use_dispatch_ptr_ret_type()
750; AKF_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
751; AKF_HSA-NEXT:    ret float [[FADD]]
752;
753; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr_constexpr_cast_func
754; ATTRIBUTOR_HSA-SAME: () #[[ATTR7]] {
755; ATTRIBUTOR_HSA-NEXT:    [[F:%.*]] = call float @use_dispatch_ptr_ret_type()
756; ATTRIBUTOR_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
757; ATTRIBUTOR_HSA-NEXT:    ret float [[FADD]]
758;
759  %f = call float @use_dispatch_ptr_ret_type()
760  %fadd = fadd float %f, 1.0
761  ret float %fadd
762}
763
764define float @func_indirect_call(ptr %fptr) #3 {
765; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_call
766; AKF_HSA-SAME: (ptr [[FPTR:%.*]]) #[[ATTR3]] {
767; AKF_HSA-NEXT:    [[F:%.*]] = call float [[FPTR]]()
768; AKF_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
769; AKF_HSA-NEXT:    ret float [[FADD]]
770;
771; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_call
772; ATTRIBUTOR_HSA-SAME: (ptr [[FPTR:%.*]]) #[[ATTR15]] {
773; ATTRIBUTOR_HSA-NEXT:    [[F:%.*]] = call float [[FPTR]]()
774; ATTRIBUTOR_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
775; ATTRIBUTOR_HSA-NEXT:    ret float [[FADD]]
776;
777  %f = call float %fptr()
778  %fadd = fadd float %f, 1.0
779  ret float %fadd
780}
781
782declare float @extern() #3
783define float @func_extern_call() #3 {
784; AKF_HSA-LABEL: define {{[^@]+}}@func_extern_call
785; AKF_HSA-SAME: () #[[ATTR3]] {
786; AKF_HSA-NEXT:    [[F:%.*]] = call float @extern()
787; AKF_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
788; AKF_HSA-NEXT:    ret float [[FADD]]
789;
790; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_extern_call
791; ATTRIBUTOR_HSA-SAME: () #[[ATTR15]] {
792; ATTRIBUTOR_HSA-NEXT:    [[F:%.*]] = call float @extern()
793; ATTRIBUTOR_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
794; ATTRIBUTOR_HSA-NEXT:    ret float [[FADD]]
795;
796  %f = call float @extern()
797  %fadd = fadd float %f, 1.0
798  ret float %fadd
799}
800
801define float @func_null_call(ptr %fptr) #3 {
802; AKF_HSA-LABEL: define {{[^@]+}}@func_null_call
803; AKF_HSA-SAME: (ptr [[FPTR:%.*]]) #[[ATTR3]] {
804; AKF_HSA-NEXT:    [[F:%.*]] = call float null()
805; AKF_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
806; AKF_HSA-NEXT:    ret float [[FADD]]
807;
808; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_null_call
809; ATTRIBUTOR_HSA-SAME: (ptr [[FPTR:%.*]]) #[[ATTR15]] {
810; ATTRIBUTOR_HSA-NEXT:    [[F:%.*]] = call float null()
811; ATTRIBUTOR_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
812; ATTRIBUTOR_HSA-NEXT:    ret float [[FADD]]
813;
814  %f = call float null()
815  %fadd = fadd float %f, 1.0
816  ret float %fadd
817}
818
819declare float @llvm.amdgcn.rcp.f32(float) #0
820
821; Calls some other recognized intrinsic
822define float @func_other_intrinsic_call(float %arg) #3 {
823; AKF_HSA-LABEL: define {{[^@]+}}@func_other_intrinsic_call
824; AKF_HSA-SAME: (float [[ARG:%.*]]) #[[ATTR3]] {
825; AKF_HSA-NEXT:    [[F:%.*]] = call float @llvm.amdgcn.rcp.f32(float [[ARG]])
826; AKF_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
827; AKF_HSA-NEXT:    ret float [[FADD]]
828;
829; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_other_intrinsic_call
830; ATTRIBUTOR_HSA-SAME: (float [[ARG:%.*]]) #[[ATTR16]] {
831; ATTRIBUTOR_HSA-NEXT:    [[F:%.*]] = call float @llvm.amdgcn.rcp.f32(float [[ARG]])
832; ATTRIBUTOR_HSA-NEXT:    [[FADD:%.*]] = fadd float [[F]], 1.000000e+00
833; ATTRIBUTOR_HSA-NEXT:    ret float [[FADD]]
834;
835  %f = call float @llvm.amdgcn.rcp.f32(float %arg)
836  %fadd = fadd float %f, 1.0
837  ret float %fadd
838}
839
840; Hostcall needs to be enabled for sanitizers
841define amdgpu_kernel void @kern_sanitize_address() #4 {
842; AKF_HSA-LABEL: define {{[^@]+}}@kern_sanitize_address
843; AKF_HSA-SAME: () #[[ATTR5:[0-9]+]] {
844; AKF_HSA-NEXT:    store volatile i32 0, ptr addrspace(1) null, align 4
845; AKF_HSA-NEXT:    ret void
846;
847; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_sanitize_address
848; ATTRIBUTOR_HSA-SAME: () #[[ATTR18:[0-9]+]] {
849; ATTRIBUTOR_HSA-NEXT:    store volatile i32 0, ptr addrspace(1) null, align 4
850; ATTRIBUTOR_HSA-NEXT:    ret void
851;
852  store volatile i32 0, ptr addrspace(1) null
853  ret void
854}
855
856; Hostcall needs to be enabled for sanitizers
857define void @func_sanitize_address() #4 {
858; AKF_HSA-LABEL: define {{[^@]+}}@func_sanitize_address
859; AKF_HSA-SAME: () #[[ATTR5]] {
860; AKF_HSA-NEXT:    store volatile i32 0, ptr addrspace(1) null, align 4
861; AKF_HSA-NEXT:    ret void
862;
863; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_sanitize_address
864; ATTRIBUTOR_HSA-SAME: () #[[ATTR18]] {
865; ATTRIBUTOR_HSA-NEXT:    store volatile i32 0, ptr addrspace(1) null, align 4
866; ATTRIBUTOR_HSA-NEXT:    ret void
867;
868  store volatile i32 0, ptr addrspace(1) null
869  ret void
870}
871
872; Hostcall needs to be enabled for sanitizers
873define void @func_indirect_sanitize_address() #3 {
874; AKF_HSA-LABEL: define {{[^@]+}}@func_indirect_sanitize_address
875; AKF_HSA-SAME: () #[[ATTR3]] {
876; AKF_HSA-NEXT:    call void @func_sanitize_address()
877; AKF_HSA-NEXT:    ret void
878;
879; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_sanitize_address
880; ATTRIBUTOR_HSA-SAME: () #[[ATTR19:[0-9]+]] {
881; ATTRIBUTOR_HSA-NEXT:    call void @func_sanitize_address()
882; ATTRIBUTOR_HSA-NEXT:    ret void
883;
884  call void @func_sanitize_address()
885  ret void
886}
887
888; Hostcall needs to be enabled for sanitizers
889define amdgpu_kernel void @kern_indirect_sanitize_address() #3 {
890; AKF_HSA-LABEL: define {{[^@]+}}@kern_indirect_sanitize_address
891; AKF_HSA-SAME: () #[[ATTR4]] {
892; AKF_HSA-NEXT:    call void @func_sanitize_address()
893; AKF_HSA-NEXT:    ret void
894;
895; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_indirect_sanitize_address
896; ATTRIBUTOR_HSA-SAME: () #[[ATTR19]] {
897; ATTRIBUTOR_HSA-NEXT:    call void @func_sanitize_address()
898; ATTRIBUTOR_HSA-NEXT:    ret void
899;
900  call void @func_sanitize_address()
901  ret void
902}
903
904; Marked with amdgpu-no-implicitarg-ptr, and
905; sanitize_address. sanitize_address wins and requires the pointer.
906declare void @extern_func_sanitize_address() #5
907
908define amdgpu_kernel void @kern_decl_sanitize_address() #3 {
909; AKF_HSA-LABEL: define {{[^@]+}}@kern_decl_sanitize_address
910; AKF_HSA-SAME: () #[[ATTR4]] {
911; AKF_HSA-NEXT:    call void @extern_func_sanitize_address()
912; AKF_HSA-NEXT:    ret void
913;
914; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_decl_sanitize_address
915; ATTRIBUTOR_HSA-SAME: () #[[ATTR15]] {
916; ATTRIBUTOR_HSA-NEXT:    call void @extern_func_sanitize_address()
917; ATTRIBUTOR_HSA-NEXT:    ret void
918;
919  call void @extern_func_sanitize_address()
920  ret void
921}
922
923declare void @enqueue_block_decl() #6
924
925define internal void @enqueue_block_def() #6 {
926; AKF_HSA-LABEL: define {{[^@]+}}@enqueue_block_def
927; AKF_HSA-SAME: () #[[ATTR7:[0-9]+]] {
928; AKF_HSA-NEXT:    ret void
929;
930; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@enqueue_block_def
931; ATTRIBUTOR_HSA-SAME: () #[[ATTR22:[0-9]+]] {
932; ATTRIBUTOR_HSA-NEXT:    ret void
933;
934  ret void
935}
936
937define amdgpu_kernel void @kern_call_enqueued_block_decl() {
938; AKF_HSA-LABEL: define {{[^@]+}}@kern_call_enqueued_block_decl
939; AKF_HSA-SAME: () #[[ATTR8:[0-9]+]] {
940; AKF_HSA-NEXT:    call void @enqueue_block_decl()
941; AKF_HSA-NEXT:    ret void
942;
943; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_call_enqueued_block_decl
944; ATTRIBUTOR_HSA-SAME: () #[[ATTR23:[0-9]+]] {
945; ATTRIBUTOR_HSA-NEXT:    call void @enqueue_block_decl()
946; ATTRIBUTOR_HSA-NEXT:    ret void
947;
948  call void @enqueue_block_decl()
949  ret void
950}
951
952define amdgpu_kernel void @kern_call_enqueued_block_def() {
953; AKF_HSA-LABEL: define {{[^@]+}}@kern_call_enqueued_block_def
954; AKF_HSA-SAME: () #[[ATTR8]] {
955; AKF_HSA-NEXT:    call void @enqueue_block_def()
956; AKF_HSA-NEXT:    ret void
957;
958; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_call_enqueued_block_def
959; ATTRIBUTOR_HSA-SAME: () #[[ATTR24:[0-9]+]] {
960; ATTRIBUTOR_HSA-NEXT:    call void @enqueue_block_def()
961; ATTRIBUTOR_HSA-NEXT:    ret void
962;
963  call void @enqueue_block_def()
964  ret void
965}
966
967define void @unused_enqueue_block() {
968; AKF_HSA-LABEL: define {{[^@]+}}@unused_enqueue_block() {
969; AKF_HSA-NEXT:    ret void
970;
971; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@unused_enqueue_block
972; ATTRIBUTOR_HSA-SAME: () #[[ATTR25:[0-9]+]] {
973; ATTRIBUTOR_HSA-NEXT:    ret void
974;
975  ret void
976}
977
978define internal void @known_func() {
979; AKF_HSA-LABEL: define {{[^@]+}}@known_func() {
980; AKF_HSA-NEXT:    ret void
981;
982; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@known_func
983; ATTRIBUTOR_HSA-SAME: () #[[ATTR25]] {
984; ATTRIBUTOR_HSA-NEXT:    ret void
985;
986  ret void
987}
988
989; Should never happen
990define amdgpu_kernel void @kern_callsite_enqueue_block() {
991; AKF_HSA-LABEL: define {{[^@]+}}@kern_callsite_enqueue_block
992; AKF_HSA-SAME: () #[[ATTR8]] {
993; AKF_HSA-NEXT:    call void @known_func() #[[ATTR7]]
994; AKF_HSA-NEXT:    ret void
995;
996; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_callsite_enqueue_block
997; ATTRIBUTOR_HSA-SAME: () #[[ATTR24]] {
998; ATTRIBUTOR_HSA-NEXT:    call void @known_func() #[[ATTR27:[0-9]+]]
999; ATTRIBUTOR_HSA-NEXT:    ret void
1000;
1001  call void @known_func() #6
1002  ret void
1003}
1004
1005attributes #0 = { nounwind readnone speculatable }
1006attributes #1 = { nounwind "target-cpu"="fiji" }
1007attributes #2 = { nounwind "target-cpu"="gfx900" }
1008attributes #3 = { nounwind }
1009attributes #4 = { nounwind sanitize_address }
1010attributes #5 = { nounwind sanitize_address "amdgpu-no-implicitarg-ptr" }
1011attributes #6 = { "enqueued-block" }
1012
1013
1014!llvm.module.flags = !{!0}
1015!0 = !{i32 1, !"amdhsa_code_object_version", i32 500}
1016;.
1017; AKF_HSA: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
1018; AKF_HSA: attributes #[[ATTR1]] = { nounwind "target-cpu"="fiji" }
1019; AKF_HSA: attributes #[[ATTR2]] = { nounwind "target-cpu"="gfx900" }
1020; AKF_HSA: attributes #[[ATTR3]] = { nounwind }
1021; AKF_HSA: attributes #[[ATTR4]] = { nounwind "amdgpu-calls" }
1022; AKF_HSA: attributes #[[ATTR5]] = { nounwind sanitize_address }
1023; AKF_HSA: attributes #[[ATTR6:[0-9]+]] = { nounwind sanitize_address "amdgpu-no-implicitarg-ptr" }
1024; AKF_HSA: attributes #[[ATTR7]] = { "enqueued-block" }
1025; AKF_HSA: attributes #[[ATTR8]] = { "amdgpu-calls" }
1026;.
1027; ATTRIBUTOR_HSA: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
1028; ATTRIBUTOR_HSA: attributes #[[ATTR1]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1029; ATTRIBUTOR_HSA: attributes #[[ATTR2]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1030; ATTRIBUTOR_HSA: attributes #[[ATTR3]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1031; ATTRIBUTOR_HSA: attributes #[[ATTR4]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1032; ATTRIBUTOR_HSA: attributes #[[ATTR5]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1033; ATTRIBUTOR_HSA: attributes #[[ATTR6]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1034; ATTRIBUTOR_HSA: attributes #[[ATTR7]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1035; ATTRIBUTOR_HSA: attributes #[[ATTR8]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1036; ATTRIBUTOR_HSA: attributes #[[ATTR9]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1037; ATTRIBUTOR_HSA: attributes #[[ATTR10]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1038; ATTRIBUTOR_HSA: attributes #[[ATTR11]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1039; ATTRIBUTOR_HSA: attributes #[[ATTR12]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }
1040; ATTRIBUTOR_HSA: attributes #[[ATTR13]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" }
1041; ATTRIBUTOR_HSA: attributes #[[ATTR14]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" }
1042; ATTRIBUTOR_HSA: attributes #[[ATTR15]] = { nounwind "uniform-work-group-size"="false" }
1043; ATTRIBUTOR_HSA: attributes #[[ATTR16]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }
1044; ATTRIBUTOR_HSA: attributes #[[ATTR17]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
1045; ATTRIBUTOR_HSA: attributes #[[ATTR18]] = { nounwind sanitize_address "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }
1046; ATTRIBUTOR_HSA: attributes #[[ATTR19]] = { nounwind "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }
1047; ATTRIBUTOR_HSA: attributes #[[ATTR20:[0-9]+]] = { nounwind sanitize_address "amdgpu-no-implicitarg-ptr" "uniform-work-group-size"="false" }
1048; ATTRIBUTOR_HSA: attributes #[[ATTR21:[0-9]+]] = { "enqueued-block" "uniform-work-group-size"="false" }
1049; ATTRIBUTOR_HSA: attributes #[[ATTR22]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "enqueued-block" "uniform-work-group-size"="false" }
1050; ATTRIBUTOR_HSA: attributes #[[ATTR23]] = { "uniform-work-group-size"="false" }
1051; ATTRIBUTOR_HSA: attributes #[[ATTR24]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "amdgpu-waves-per-eu"="4,10" "uniform-work-group-size"="false" }
1052; ATTRIBUTOR_HSA: attributes #[[ATTR25]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }
1053; ATTRIBUTOR_HSA: attributes #[[ATTR26]] = { nounwind }
1054; ATTRIBUTOR_HSA: attributes #[[ATTR27]] = { "enqueued-block" }
1055;.
1056; AKF_HSA: [[META0:![0-9]+]] = !{i32 1, !"amdhsa_code_object_version", i32 500}
1057;.
1058; ATTRIBUTOR_HSA: [[META0:![0-9]+]] = !{i32 1, !"amdhsa_code_object_version", i32 500}
1059;.
1060