blob: 39760d9e578a85990fc1d6e8a75a1a04b569ff91 [file] [log] [blame]
Matt Arsenault6b930462017-07-13 21:43:42 +00001; RUN: opt -S -mtriple=amdgcn-unknown-amdhsa -amdgpu-annotate-kernel-features %s | FileCheck -check-prefix=HSA %s
2
3declare i32 @llvm.amdgcn.workgroup.id.y() #0
4declare i32 @llvm.amdgcn.workgroup.id.z() #0
5
6declare i32 @llvm.amdgcn.workitem.id.y() #0
7declare i32 @llvm.amdgcn.workitem.id.z() #0
8
9declare i8 addrspace(2)* @llvm.amdgcn.dispatch.ptr() #0
10declare i8 addrspace(2)* @llvm.amdgcn.queue.ptr() #0
Matt Arsenault23e4df62017-07-14 00:11:13 +000011declare i8 addrspace(2)* @llvm.amdgcn.kernarg.segment.ptr() #0
12declare i8 addrspace(2)* @llvm.amdgcn.implicitarg.ptr() #0
Matt Arsenault6b930462017-07-13 21:43:42 +000013declare i64 @llvm.amdgcn.dispatch.id() #0
14
15; HSA: define void @use_workitem_id_y() #1 {
16define void @use_workitem_id_y() #1 {
17 %val = call i32 @llvm.amdgcn.workitem.id.y()
18 store volatile i32 %val, i32 addrspace(1)* undef
19 ret void
20}
21
22; HSA: define void @use_workitem_id_z() #2 {
23define void @use_workitem_id_z() #1 {
24 %val = call i32 @llvm.amdgcn.workitem.id.z()
25 store volatile i32 %val, i32 addrspace(1)* undef
26 ret void
27}
28
29; HSA: define void @use_workgroup_id_y() #3 {
30define void @use_workgroup_id_y() #1 {
31 %val = call i32 @llvm.amdgcn.workgroup.id.y()
32 store volatile i32 %val, i32 addrspace(1)* undef
33 ret void
34}
35
36; HSA: define void @use_workgroup_id_z() #4 {
37define void @use_workgroup_id_z() #1 {
38 %val = call i32 @llvm.amdgcn.workgroup.id.z()
39 store volatile i32 %val, i32 addrspace(1)* undef
40 ret void
41}
42
43; HSA: define void @use_dispatch_ptr() #5 {
44define void @use_dispatch_ptr() #1 {
45 %dispatch.ptr = call i8 addrspace(2)* @llvm.amdgcn.dispatch.ptr()
46 store volatile i8 addrspace(2)* %dispatch.ptr, i8 addrspace(2)* addrspace(1)* undef
47 ret void
48}
49
50; HSA: define void @use_queue_ptr() #6 {
51define void @use_queue_ptr() #1 {
52 %queue.ptr = call i8 addrspace(2)* @llvm.amdgcn.queue.ptr()
53 store volatile i8 addrspace(2)* %queue.ptr, i8 addrspace(2)* addrspace(1)* undef
54 ret void
55}
56
57; HSA: define void @use_dispatch_id() #7 {
58define void @use_dispatch_id() #1 {
59 %val = call i64 @llvm.amdgcn.dispatch.id()
60 store volatile i64 %val, i64 addrspace(1)* undef
61 ret void
62}
63
64; HSA: define void @use_workgroup_id_y_workgroup_id_z() #8 {
65define void @use_workgroup_id_y_workgroup_id_z() #1 {
66 %val0 = call i32 @llvm.amdgcn.workgroup.id.y()
67 %val1 = call i32 @llvm.amdgcn.workgroup.id.z()
68 store volatile i32 %val0, i32 addrspace(1)* undef
69 store volatile i32 %val1, i32 addrspace(1)* undef
70 ret void
71}
72
73; HSA: define void @func_indirect_use_workitem_id_y() #1 {
74define void @func_indirect_use_workitem_id_y() #1 {
75 call void @use_workitem_id_y()
76 ret void
77}
78
79; HSA: define void @func_indirect_use_workitem_id_z() #2 {
80define void @func_indirect_use_workitem_id_z() #1 {
81 call void @use_workitem_id_z()
82 ret void
83}
84
85; HSA: define void @func_indirect_use_workgroup_id_y() #3 {
86define void @func_indirect_use_workgroup_id_y() #1 {
87 call void @use_workgroup_id_y()
88 ret void
89}
90
91; HSA: define void @func_indirect_use_workgroup_id_z() #4 {
92define void @func_indirect_use_workgroup_id_z() #1 {
93 call void @use_workgroup_id_z()
94 ret void
95}
96
97; HSA: define void @func_indirect_indirect_use_workgroup_id_y() #3 {
98define void @func_indirect_indirect_use_workgroup_id_y() #1 {
99 call void @func_indirect_use_workgroup_id_y()
100 ret void
101}
102
103; HSA: define void @indirect_x2_use_workgroup_id_y() #3 {
104define void @indirect_x2_use_workgroup_id_y() #1 {
105 call void @func_indirect_indirect_use_workgroup_id_y()
106 ret void
107}
108
109; HSA: define void @func_indirect_use_dispatch_ptr() #5 {
110define void @func_indirect_use_dispatch_ptr() #1 {
111 call void @use_dispatch_ptr()
112 ret void
113}
114
115; HSA: define void @func_indirect_use_queue_ptr() #6 {
116define void @func_indirect_use_queue_ptr() #1 {
117 call void @use_queue_ptr()
118 ret void
119}
120
121; HSA: define void @func_indirect_use_dispatch_id() #7 {
122define void @func_indirect_use_dispatch_id() #1 {
123 call void @use_dispatch_id()
124 ret void
125}
126
127; HSA: define void @func_indirect_use_workgroup_id_y_workgroup_id_z() #9 {
128define void @func_indirect_use_workgroup_id_y_workgroup_id_z() #1 {
129 call void @func_indirect_use_workgroup_id_y_workgroup_id_z()
130 ret void
131}
132
133; HSA: define void @recursive_use_workitem_id_y() #1 {
134define void @recursive_use_workitem_id_y() #1 {
135 %val = call i32 @llvm.amdgcn.workitem.id.y()
136 store volatile i32 %val, i32 addrspace(1)* undef
137 call void @recursive_use_workitem_id_y()
138 ret void
139}
140
141; HSA: define void @call_recursive_use_workitem_id_y() #1 {
142define void @call_recursive_use_workitem_id_y() #1 {
143 call void @recursive_use_workitem_id_y()
144 ret void
145}
146
147; HSA: define void @use_group_to_flat_addrspacecast(i32 addrspace(3)* %ptr) #6 {
148define void @use_group_to_flat_addrspacecast(i32 addrspace(3)* %ptr) #1 {
149 %stof = addrspacecast i32 addrspace(3)* %ptr to i32 addrspace(4)*
150 store volatile i32 0, i32 addrspace(4)* %stof
151 ret void
152}
153
154; HSA: define void @use_group_to_flat_addrspacecast_gfx9(i32 addrspace(3)* %ptr) #10 {
155define void @use_group_to_flat_addrspacecast_gfx9(i32 addrspace(3)* %ptr) #2 {
156 %stof = addrspacecast i32 addrspace(3)* %ptr to i32 addrspace(4)*
157 store volatile i32 0, i32 addrspace(4)* %stof
158 ret void
159}
160
161; HSA: define void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(i32 addrspace(3)* %ptr) #11 {
162define void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(i32 addrspace(3)* %ptr) #2 {
163 %stof = addrspacecast i32 addrspace(3)* %ptr to i32 addrspace(4)*
164 store volatile i32 0, i32 addrspace(4)* %stof
165 call void @func_indirect_use_queue_ptr()
166 ret void
167}
168
169; HSA: define void @indirect_use_group_to_flat_addrspacecast() #6 {
170define void @indirect_use_group_to_flat_addrspacecast() #1 {
171 call void @use_group_to_flat_addrspacecast(i32 addrspace(3)* null)
172 ret void
173}
174
175; HSA: define void @indirect_use_group_to_flat_addrspacecast_gfx9() #9 {
176define void @indirect_use_group_to_flat_addrspacecast_gfx9() #1 {
177 call void @use_group_to_flat_addrspacecast_gfx9(i32 addrspace(3)* null)
178 ret void
179}
180
181; HSA: define void @indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9() #6 {
182define void @indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9() #1 {
183 call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(i32 addrspace(3)* null)
184 ret void
185}
186
Matt Arsenault23e4df62017-07-14 00:11:13 +0000187; HSA: define void @use_kernarg_segment_ptr() #12 {
188define void @use_kernarg_segment_ptr() #1 {
189 %kernarg.segment.ptr = call i8 addrspace(2)* @llvm.amdgcn.kernarg.segment.ptr()
190 store volatile i8 addrspace(2)* %kernarg.segment.ptr, i8 addrspace(2)* addrspace(1)* undef
191 ret void
192}
193
194; HSA: define void @func_indirect_use_kernarg_segment_ptr() #12 {
195define void @func_indirect_use_kernarg_segment_ptr() #1 {
196 call void @use_kernarg_segment_ptr()
197 ret void
198}
199
200; HSA: define void @use_implicitarg_ptr() #12 {
201define void @use_implicitarg_ptr() #1 {
202 %implicitarg.ptr = call i8 addrspace(2)* @llvm.amdgcn.implicitarg.ptr()
203 store volatile i8 addrspace(2)* %implicitarg.ptr, i8 addrspace(2)* addrspace(1)* undef
204 ret void
205}
206
207; HSA: define void @func_indirect_use_implicitarg_ptr() #12 {
208define void @func_indirect_use_implicitarg_ptr() #1 {
209 call void @use_implicitarg_ptr()
210 ret void
211}
212
Matt Arsenault6b930462017-07-13 21:43:42 +0000213attributes #0 = { nounwind readnone speculatable }
214attributes #1 = { nounwind "target-cpu"="fiji" }
215attributes #2 = { nounwind "target-cpu"="gfx900" }
216
217; HSA: attributes #0 = { nounwind readnone speculatable }
218; HSA: attributes #1 = { nounwind "amdgpu-work-item-id-y" "target-cpu"="fiji" }
219; HSA: attributes #2 = { nounwind "amdgpu-work-item-id-z" "target-cpu"="fiji" }
220; HSA: attributes #3 = { nounwind "amdgpu-work-group-id-y" "target-cpu"="fiji" }
221; HSA: attributes #4 = { nounwind "amdgpu-work-group-id-z" "target-cpu"="fiji" }
222; HSA: attributes #5 = { nounwind "amdgpu-dispatch-ptr" "target-cpu"="fiji" }
223; HSA: attributes #6 = { nounwind "amdgpu-queue-ptr" "target-cpu"="fiji" }
224; HSA: attributes #7 = { nounwind "amdgpu-dispatch-id" "target-cpu"="fiji" }
225; HSA: attributes #8 = { nounwind "amdgpu-work-group-id-y" "amdgpu-work-group-id-z" "target-cpu"="fiji" }
226; HSA: attributes #9 = { nounwind "target-cpu"="fiji" }
227; HSA: attributes #10 = { nounwind "target-cpu"="gfx900" }
228; HSA: attributes #11 = { nounwind "amdgpu-queue-ptr" "target-cpu"="gfx900" }
Matt Arsenault23e4df62017-07-14 00:11:13 +0000229; HSA: attributes #12 = { nounwind "amdgpu-kernarg-segment-ptr" "target-cpu"="fiji" }