xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/image-attributes.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=juniper < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; === WIDTH ==================================================================
4*9880d681SAndroid Build Coastguard Worker; 9 implicit args = 9 dwords to first image argument.
5*9880d681SAndroid Build Coastguard Worker; First width at dword index 9+1 -> KC0[2].Z
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}width_2d:
8*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
9*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[2].Z
10*9880d681SAndroid Build Coastguard Workerdefine void @width_2d (%opencl.image2d_t addrspace(1)* %in,
11*9880d681SAndroid Build Coastguard Worker                       i32 addrspace(1)* %out) {
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  %0 = call [3 x i32] @llvm.OpenCL.image.get.size.2d(
14*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in) #0
15*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [3 x i32] %0, 0
16*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
17*9880d681SAndroid Build Coastguard Worker  ret void
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}width_3d:
21*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
22*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[2].Z
23*9880d681SAndroid Build Coastguard Workerdefine void @width_3d (%opencl.image3d_t addrspace(1)* %in,
24*9880d681SAndroid Build Coastguard Worker                       i32 addrspace(1)* %out) {
25*9880d681SAndroid Build Coastguard Workerentry:
26*9880d681SAndroid Build Coastguard Worker  %0 = call [3 x i32] @llvm.OpenCL.image.get.size.3d(
27*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in) #0
28*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [3 x i32] %0, 0
29*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
30*9880d681SAndroid Build Coastguard Worker  ret void
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker; === HEIGHT =================================================================
35*9880d681SAndroid Build Coastguard Worker; First height at dword index 9+2 -> KC0[2].W
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}height_2d:
38*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
39*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[2].W
40*9880d681SAndroid Build Coastguard Workerdefine void @height_2d (%opencl.image2d_t addrspace(1)* %in,
41*9880d681SAndroid Build Coastguard Worker                        i32 addrspace(1)* %out) {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %0 = call [3 x i32] @llvm.OpenCL.image.get.size.2d(
44*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in) #0
45*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [3 x i32] %0, 1
46*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
47*9880d681SAndroid Build Coastguard Worker  ret void
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}height_3d:
51*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
52*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[2].W
53*9880d681SAndroid Build Coastguard Workerdefine void @height_3d (%opencl.image3d_t addrspace(1)* %in,
54*9880d681SAndroid Build Coastguard Worker                        i32 addrspace(1)* %out) {
55*9880d681SAndroid Build Coastguard Workerentry:
56*9880d681SAndroid Build Coastguard Worker  %0 = call [3 x i32] @llvm.OpenCL.image.get.size.3d(
57*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in) #0
58*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [3 x i32] %0, 1
59*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
60*9880d681SAndroid Build Coastguard Worker  ret void
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker; === DEPTH ==================================================================
65*9880d681SAndroid Build Coastguard Worker; First depth at dword index 9+3 -> KC0[3].X
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}depth_3d:
68*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
69*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[3].X
70*9880d681SAndroid Build Coastguard Workerdefine void @depth_3d (%opencl.image3d_t addrspace(1)* %in,
71*9880d681SAndroid Build Coastguard Worker                       i32 addrspace(1)* %out) {
72*9880d681SAndroid Build Coastguard Workerentry:
73*9880d681SAndroid Build Coastguard Worker  %0 = call [3 x i32] @llvm.OpenCL.image.get.size.3d(
74*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in) #0
75*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [3 x i32] %0, 2
76*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
77*9880d681SAndroid Build Coastguard Worker  ret void
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; === CHANNEL DATA TYPE ======================================================
82*9880d681SAndroid Build Coastguard Worker; First channel data type at dword index 9+4 -> KC0[3].Y
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}data_type_2d:
85*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
86*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[3].Y
87*9880d681SAndroid Build Coastguard Workerdefine void @data_type_2d (%opencl.image2d_t addrspace(1)* %in,
88*9880d681SAndroid Build Coastguard Worker                           i32 addrspace(1)* %out) {
89*9880d681SAndroid Build Coastguard Workerentry:
90*9880d681SAndroid Build Coastguard Worker  %0 = call [2 x i32] @llvm.OpenCL.image.get.format.2d(
91*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in) #0
92*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [2 x i32] %0, 0
93*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
94*9880d681SAndroid Build Coastguard Worker  ret void
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}data_type_3d:
98*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
99*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[3].Y
100*9880d681SAndroid Build Coastguard Workerdefine void @data_type_3d (%opencl.image3d_t addrspace(1)* %in,
101*9880d681SAndroid Build Coastguard Worker                                     i32 addrspace(1)* %out) {
102*9880d681SAndroid Build Coastguard Workerentry:
103*9880d681SAndroid Build Coastguard Worker  %0 = call [2 x i32] @llvm.OpenCL.image.get.format.3d(
104*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in) #0
105*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [2 x i32] %0, 0
106*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
107*9880d681SAndroid Build Coastguard Worker  ret void
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; === CHANNEL ORDER ==========================================================
112*9880d681SAndroid Build Coastguard Worker; First channel order at dword index 9+5 -> KC0[3].Z
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}channel_order_2d:
115*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
116*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[3].Z
117*9880d681SAndroid Build Coastguard Workerdefine void @channel_order_2d (%opencl.image2d_t addrspace(1)* %in,
118*9880d681SAndroid Build Coastguard Worker                               i32 addrspace(1)* %out) {
119*9880d681SAndroid Build Coastguard Workerentry:
120*9880d681SAndroid Build Coastguard Worker  %0 = call [2 x i32] @llvm.OpenCL.image.get.format.2d(
121*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in) #0
122*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [2 x i32] %0, 1
123*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
124*9880d681SAndroid Build Coastguard Worker  ret void
125*9880d681SAndroid Build Coastguard Worker}
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}channel_order_3d:
128*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
129*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[3].Z
130*9880d681SAndroid Build Coastguard Workerdefine void @channel_order_3d (%opencl.image3d_t addrspace(1)* %in,
131*9880d681SAndroid Build Coastguard Worker                                         i32 addrspace(1)* %out) {
132*9880d681SAndroid Build Coastguard Workerentry:
133*9880d681SAndroid Build Coastguard Worker  %0 = call [2 x i32] @llvm.OpenCL.image.get.format.3d(
134*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in) #0
135*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [2 x i32] %0, 1
136*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
137*9880d681SAndroid Build Coastguard Worker  ret void
138*9880d681SAndroid Build Coastguard Worker}
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Worker; === 2ND IMAGE ==============================================================
142*9880d681SAndroid Build Coastguard Worker; 9 implicit args + 2 explicit args + 5 implicit args for 1st image argument
143*9880d681SAndroid Build Coastguard Worker;   = 16 dwords to 2nd image argument.
144*9880d681SAndroid Build Coastguard Worker; Height of the second image is at 16+2 -> KC0[4].Z
145*9880d681SAndroid Build Coastguard Worker;
146*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}image_arg_2nd:
147*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
148*9880d681SAndroid Build Coastguard Worker; EG: MOV * [[VAL]], KC0[4].Z
149*9880d681SAndroid Build Coastguard Workerdefine void @image_arg_2nd (%opencl.image3d_t addrspace(1)* %in1,
150*9880d681SAndroid Build Coastguard Worker                            i32 %x,
151*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in2,
152*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
153*9880d681SAndroid Build Coastguard Workerentry:
154*9880d681SAndroid Build Coastguard Worker  %0 = call [3 x i32] @llvm.OpenCL.image.get.size.2d(
155*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in2) #0
156*9880d681SAndroid Build Coastguard Worker  %1 = extractvalue [3 x i32] %0, 1
157*9880d681SAndroid Build Coastguard Worker  store i32 %1, i32 addrspace(1)* %out
158*9880d681SAndroid Build Coastguard Worker  ret void
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker%opencl.image2d_t = type opaque
162*9880d681SAndroid Build Coastguard Worker%opencl.image3d_t = type opaque
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdeclare [3 x i32] @llvm.OpenCL.image.get.size.2d(%opencl.image2d_t addrspace(1)*) #0
165*9880d681SAndroid Build Coastguard Workerdeclare [3 x i32] @llvm.OpenCL.image.get.size.3d(%opencl.image3d_t addrspace(1)*) #0
166*9880d681SAndroid Build Coastguard Workerdeclare [2 x i32] @llvm.OpenCL.image.get.format.2d(%opencl.image2d_t addrspace(1)*) #0
167*9880d681SAndroid Build Coastguard Workerdeclare [2 x i32] @llvm.OpenCL.image.get.format.3d(%opencl.image3d_t addrspace(1)*) #0
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Workerattributes #0 = { readnone }
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker!opencl.kernels = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
172*9880d681SAndroid Build Coastguard Worker!0 = !{void (%opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @width_2d,
173*9880d681SAndroid Build Coastguard Worker       !10, !20, !30, !40, !50}
174*9880d681SAndroid Build Coastguard Worker!1 = !{void (%opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @width_3d,
175*9880d681SAndroid Build Coastguard Worker       !10, !21, !31, !41, !50}
176*9880d681SAndroid Build Coastguard Worker!2 = !{void (%opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @height_2d,
177*9880d681SAndroid Build Coastguard Worker       !10, !20, !30, !40, !50}
178*9880d681SAndroid Build Coastguard Worker!3 = !{void (%opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @height_3d,
179*9880d681SAndroid Build Coastguard Worker       !10, !21, !31, !41, !50}
180*9880d681SAndroid Build Coastguard Worker!4 = !{void (%opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @depth_3d,
181*9880d681SAndroid Build Coastguard Worker       !10, !21, !31, !41, !50}
182*9880d681SAndroid Build Coastguard Worker!5 = !{void (%opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @data_type_2d,
183*9880d681SAndroid Build Coastguard Worker       !10, !20, !30, !40, !50}
184*9880d681SAndroid Build Coastguard Worker!6 = !{void (%opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @data_type_3d,
185*9880d681SAndroid Build Coastguard Worker       !10, !21, !31, !41, !50}
186*9880d681SAndroid Build Coastguard Worker!7 = !{void (%opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @channel_order_2d,
187*9880d681SAndroid Build Coastguard Worker       !10, !20, !30, !40, !50}
188*9880d681SAndroid Build Coastguard Worker!8 = !{void (%opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @channel_order_3d,
189*9880d681SAndroid Build Coastguard Worker       !10, !21, !31, !41, !50}
190*9880d681SAndroid Build Coastguard Worker!9 = !{void (%opencl.image3d_t addrspace(1)*, i32, %opencl.image2d_t addrspace(1)*,
191*9880d681SAndroid Build Coastguard Worker      i32 addrspace(1)*)* @image_arg_2nd, !12, !22, !32, !42, !52}
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker!10 = !{!"kernel_arg_addr_space", i32 1, i32 1}
194*9880d681SAndroid Build Coastguard Worker!20 = !{!"kernel_arg_access_qual", !"read_only", !"none"}
195*9880d681SAndroid Build Coastguard Worker!21 = !{!"kernel_arg_access_qual", !"read_only", !"none"}
196*9880d681SAndroid Build Coastguard Worker!30 = !{!"kernel_arg_type", !"image2d_t", !"int*"}
197*9880d681SAndroid Build Coastguard Worker!31 = !{!"kernel_arg_type", !"image3d_t", !"int*"}
198*9880d681SAndroid Build Coastguard Worker!40 = !{!"kernel_arg_base_type", !"image2d_t", !"int*"}
199*9880d681SAndroid Build Coastguard Worker!41 = !{!"kernel_arg_base_type", !"image3d_t", !"int*"}
200*9880d681SAndroid Build Coastguard Worker!50 = !{!"kernel_arg_type_qual", !"", !""}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker!12 = !{!"kernel_arg_addr_space", i32 1, i32 0, i32 1, i32 1}
203*9880d681SAndroid Build Coastguard Worker!22 = !{!"kernel_arg_access_qual", !"read_only", !"none", !"write_only", !"none"}
204*9880d681SAndroid Build Coastguard Worker!32 = !{!"kernel_arg_type", !"image3d_t", !"sampler_t", !"image2d_t", !"int*"}
205*9880d681SAndroid Build Coastguard Worker!42 = !{!"kernel_arg_base_type", !"image3d_t", !"sampler_t", !"image2d_t", !"int*"}
206*9880d681SAndroid Build Coastguard Worker!52 = !{!"kernel_arg_type_qual", !"", !"", !"", !""}
207