xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/annotate-kernel-features.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -mtriple=amdgcn-unknown-unknown -amdgpu-annotate-kernel-features < %s | FileCheck -check-prefix=NOHSA -check-prefix=ALL %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tgid.x() #0
4*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tgid.y() #0
5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tgid.z() #0
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.x() #0
8*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.y() #0
9*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.z() #0
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.local.size.x() #0
12*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.local.size.y() #0
13*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.local.size.z() #0
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tgid_x(i32 addrspace(1)* %ptr) #1 {
16*9880d681SAndroid Build Coastguard Workerdefine void @use_tgid_x(i32 addrspace(1)* %ptr) #1 {
17*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.tgid.x()
18*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
19*9880d681SAndroid Build Coastguard Worker  ret void
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tgid_y(i32 addrspace(1)* %ptr) #2 {
23*9880d681SAndroid Build Coastguard Workerdefine void @use_tgid_y(i32 addrspace(1)* %ptr) #1 {
24*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.tgid.y()
25*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
26*9880d681SAndroid Build Coastguard Worker  ret void
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; ALL: define void @multi_use_tgid_y(i32 addrspace(1)* %ptr) #2 {
30*9880d681SAndroid Build Coastguard Workerdefine void @multi_use_tgid_y(i32 addrspace(1)* %ptr) #1 {
31*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tgid.y()
32*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
33*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tgid.y()
34*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
35*9880d681SAndroid Build Coastguard Worker  ret void
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tgid_x_y(i32 addrspace(1)* %ptr) #2 {
39*9880d681SAndroid Build Coastguard Workerdefine void @use_tgid_x_y(i32 addrspace(1)* %ptr) #1 {
40*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tgid.x()
41*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tgid.y()
42*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
43*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
44*9880d681SAndroid Build Coastguard Worker  ret void
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tgid_z(i32 addrspace(1)* %ptr) #3 {
48*9880d681SAndroid Build Coastguard Workerdefine void @use_tgid_z(i32 addrspace(1)* %ptr) #1 {
49*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.tgid.z()
50*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
51*9880d681SAndroid Build Coastguard Worker  ret void
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tgid_x_z(i32 addrspace(1)* %ptr) #3 {
55*9880d681SAndroid Build Coastguard Workerdefine void @use_tgid_x_z(i32 addrspace(1)* %ptr) #1 {
56*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tgid.x()
57*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tgid.z()
58*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
59*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
60*9880d681SAndroid Build Coastguard Worker  ret void
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tgid_y_z(i32 addrspace(1)* %ptr) #4 {
64*9880d681SAndroid Build Coastguard Workerdefine void @use_tgid_y_z(i32 addrspace(1)* %ptr) #1 {
65*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tgid.y()
66*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tgid.z()
67*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
68*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
69*9880d681SAndroid Build Coastguard Worker  ret void
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tgid_x_y_z(i32 addrspace(1)* %ptr) #4 {
73*9880d681SAndroid Build Coastguard Workerdefine void @use_tgid_x_y_z(i32 addrspace(1)* %ptr) #1 {
74*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tgid.x()
75*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tgid.y()
76*9880d681SAndroid Build Coastguard Worker  %val2 = call i32 @llvm.r600.read.tgid.z()
77*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
78*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
79*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val2, i32 addrspace(1)* %ptr
80*9880d681SAndroid Build Coastguard Worker  ret void
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tidig_x(i32 addrspace(1)* %ptr) #1 {
84*9880d681SAndroid Build Coastguard Workerdefine void @use_tidig_x(i32 addrspace(1)* %ptr) #1 {
85*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.tidig.x()
86*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
87*9880d681SAndroid Build Coastguard Worker  ret void
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tidig_y(i32 addrspace(1)* %ptr) #5 {
91*9880d681SAndroid Build Coastguard Workerdefine void @use_tidig_y(i32 addrspace(1)* %ptr) #1 {
92*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.tidig.y()
93*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
94*9880d681SAndroid Build Coastguard Worker  ret void
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tidig_z(i32 addrspace(1)* %ptr) #6 {
98*9880d681SAndroid Build Coastguard Workerdefine void @use_tidig_z(i32 addrspace(1)* %ptr) #1 {
99*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.tidig.z()
100*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
101*9880d681SAndroid Build Coastguard Worker  ret void
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tidig_x_tgid_x(i32 addrspace(1)* %ptr) #1 {
105*9880d681SAndroid Build Coastguard Workerdefine void @use_tidig_x_tgid_x(i32 addrspace(1)* %ptr) #1 {
106*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tidig.x()
107*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tgid.x()
108*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
109*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
110*9880d681SAndroid Build Coastguard Worker  ret void
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tidig_y_tgid_y(i32 addrspace(1)* %ptr) #7 {
114*9880d681SAndroid Build Coastguard Workerdefine void @use_tidig_y_tgid_y(i32 addrspace(1)* %ptr) #1 {
115*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tidig.y()
116*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tgid.y()
117*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
118*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
119*9880d681SAndroid Build Coastguard Worker  ret void
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_tidig_x_y_z(i32 addrspace(1)* %ptr) #8 {
123*9880d681SAndroid Build Coastguard Workerdefine void @use_tidig_x_y_z(i32 addrspace(1)* %ptr) #1 {
124*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tidig.x()
125*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tidig.y()
126*9880d681SAndroid Build Coastguard Worker  %val2 = call i32 @llvm.r600.read.tidig.z()
127*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
128*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
129*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val2, i32 addrspace(1)* %ptr
130*9880d681SAndroid Build Coastguard Worker  ret void
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Worker; ALL: define void @use_all_workitems(i32 addrspace(1)* %ptr) #9 {
134*9880d681SAndroid Build Coastguard Workerdefine void @use_all_workitems(i32 addrspace(1)* %ptr) #1 {
135*9880d681SAndroid Build Coastguard Worker  %val0 = call i32 @llvm.r600.read.tidig.x()
136*9880d681SAndroid Build Coastguard Worker  %val1 = call i32 @llvm.r600.read.tidig.y()
137*9880d681SAndroid Build Coastguard Worker  %val2 = call i32 @llvm.r600.read.tidig.z()
138*9880d681SAndroid Build Coastguard Worker  %val3 = call i32 @llvm.r600.read.tgid.x()
139*9880d681SAndroid Build Coastguard Worker  %val4 = call i32 @llvm.r600.read.tgid.y()
140*9880d681SAndroid Build Coastguard Worker  %val5 = call i32 @llvm.r600.read.tgid.z()
141*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val0, i32 addrspace(1)* %ptr
142*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val1, i32 addrspace(1)* %ptr
143*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val2, i32 addrspace(1)* %ptr
144*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val3, i32 addrspace(1)* %ptr
145*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val4, i32 addrspace(1)* %ptr
146*9880d681SAndroid Build Coastguard Worker  store volatile i32 %val5, i32 addrspace(1)* %ptr
147*9880d681SAndroid Build Coastguard Worker  ret void
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker; HSA: define void @use_get_local_size_x(i32 addrspace(1)* %ptr) #10 {
151*9880d681SAndroid Build Coastguard Worker; NOHSA: define void @use_get_local_size_x(i32 addrspace(1)* %ptr) #1 {
152*9880d681SAndroid Build Coastguard Workerdefine void @use_get_local_size_x(i32 addrspace(1)* %ptr) #1 {
153*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.local.size.x()
154*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
155*9880d681SAndroid Build Coastguard Worker  ret void
156*9880d681SAndroid Build Coastguard Worker}
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker; HSA: define void @use_get_local_size_y(i32 addrspace(1)* %ptr) #10 {
159*9880d681SAndroid Build Coastguard Worker; NOHSA: define void @use_get_local_size_y(i32 addrspace(1)* %ptr) #1 {
160*9880d681SAndroid Build Coastguard Workerdefine void @use_get_local_size_y(i32 addrspace(1)* %ptr) #1 {
161*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.local.size.y()
162*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
163*9880d681SAndroid Build Coastguard Worker  ret void
164*9880d681SAndroid Build Coastguard Worker}
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker; HSA: define void @use_get_local_size_z(i32 addrspace(1)* %ptr) #10 {
167*9880d681SAndroid Build Coastguard Worker; NOHSA: define void @use_get_local_size_z(i32 addrspace(1)* %ptr) #1 {
168*9880d681SAndroid Build Coastguard Workerdefine void @use_get_local_size_z(i32 addrspace(1)* %ptr) #1 {
169*9880d681SAndroid Build Coastguard Worker  %val = call i32 @llvm.r600.read.local.size.z()
170*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %ptr
171*9880d681SAndroid Build Coastguard Worker  ret void
172*9880d681SAndroid Build Coastguard Worker}
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone }
175*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind }
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker; HSA: attributes #0 = { nounwind readnone }
178*9880d681SAndroid Build Coastguard Worker; HSA: attributes #1 = { nounwind }
179*9880d681SAndroid Build Coastguard Worker; HSA: attributes #2 = { nounwind "amdgpu-work-group-id-y" }
180*9880d681SAndroid Build Coastguard Worker; HSA: attributes #3 = { nounwind "amdgpu-work-group-id-z" }
181*9880d681SAndroid Build Coastguard Worker; HSA: attributes #4 = { nounwind "amdgpu-work-group-id-y" "amdgpu-work-group-id-z" }
182*9880d681SAndroid Build Coastguard Worker; HSA: attributes #5 = { nounwind "amdgpu-work-item-id-y" }
183*9880d681SAndroid Build Coastguard Worker; HSA: attributes #6 = { nounwind "amdgpu-work-item-id-z" }
184*9880d681SAndroid Build Coastguard Worker; HSA: attributes #7 = { nounwind "amdgpu-work-group-id-y" "amdgpu-work-item-id-y" }
185*9880d681SAndroid Build Coastguard Worker; HSA: attributes #8 = { nounwind "amdgpu-work-item-id-y" "amdgpu-work-item-id-z" }
186*9880d681SAndroid Build Coastguard Worker; HSA: attributes #9 = { nounwind "amdgpu-work-group-id-y" "amdgpu-work-group-id-z" "amdgpu-work-item-id-y" "amdgpu-work-item-id-z" }
187*9880d681SAndroid Build Coastguard Worker; HSA: attributes #10 = { nounwind "amdgpu-dispatch-ptr" }
188