xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/image-resource-id.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; === 1 image arg, read_only ===================================================
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_rd_1_0:
6*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
7*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
8*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
9*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 0(
10*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_rd_1_0(%opencl.image2d_t addrspace(1)* %in, ; read_only
11*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
14*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in) #0
15*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
16*9880d681SAndroid Build Coastguard Worker  ret void
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_rd_1_0:
20*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
21*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
22*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
23*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 0(
24*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_rd_1_0(%opencl.image3d_t addrspace(1)* %in, ; read_only
25*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
26*9880d681SAndroid Build Coastguard Workerentry:
27*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
28*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in) #0
29*9880d681SAndroid Build Coastguard Worker  store i32 %0, 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; === 1 image arg, write_only ==================================================
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_wr_1_0:
36*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
37*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
38*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
39*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 0(
40*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_wr_1_0(%opencl.image2d_t addrspace(1)* %in, ; write_only
41*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
44*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in) #0
45*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
46*9880d681SAndroid Build Coastguard Worker  ret void
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_wr_1_0:
50*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
51*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
52*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
53*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 0(
54*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_wr_1_0(%opencl.image3d_t addrspace(1)* %in, ; write_only
55*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
56*9880d681SAndroid Build Coastguard Workerentry:
57*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
58*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in) #0
59*9880d681SAndroid Build Coastguard Worker  store i32 %0, 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; === 2 image args, read_only ==================================================
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_rd_2_0:
66*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
67*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
68*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
69*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 0(
70*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_rd_2_0(%opencl.image2d_t addrspace(1)* %in1, ; read_only
71*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in2, ; read_only
72*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
73*9880d681SAndroid Build Coastguard Workerentry:
74*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
75*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in1) #0
76*9880d681SAndroid Build Coastguard Worker  store i32 %0, 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; FUNC-LABEL: {{^}}test_2d_rd_2_1:
81*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
82*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
83*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
84*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 1(
85*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_rd_2_1(%opencl.image2d_t addrspace(1)* %in1, ; read_only
86*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in2, ; read_only
87*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
88*9880d681SAndroid Build Coastguard Workerentry:
89*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
90*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in2) #0
91*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
92*9880d681SAndroid Build Coastguard Worker  ret void
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_rd_2_0:
96*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
97*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
98*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
99*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 0(
100*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_rd_2_0(%opencl.image3d_t addrspace(1)* %in1, ; read_only
101*9880d681SAndroid Build Coastguard Worker                            %opencl.image3d_t addrspace(1)* %in2, ; read_only
102*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
103*9880d681SAndroid Build Coastguard Workerentry:
104*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
105*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in1) #0
106*9880d681SAndroid Build Coastguard Worker  store i32 %0, 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; FUNC-LABEL: {{^}}test_3d_rd_2_1:
111*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
112*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
113*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
114*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 1(
115*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_rd_2_1(%opencl.image3d_t addrspace(1)* %in1, ; read_only
116*9880d681SAndroid Build Coastguard Worker                            %opencl.image3d_t addrspace(1)* %in2, ; read_only
117*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
118*9880d681SAndroid Build Coastguard Workerentry:
119*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
120*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in2) #0
121*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
122*9880d681SAndroid Build Coastguard Worker  ret void
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker; === 2 image args, write_only =================================================
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_wr_2_0:
128*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
129*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
130*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
131*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 0(
132*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_wr_2_0(%opencl.image2d_t addrspace(1)* %in1, ; write_only
133*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in2, ; write_only
134*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
135*9880d681SAndroid Build Coastguard Workerentry:
136*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
137*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in1) #0
138*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
139*9880d681SAndroid Build Coastguard Worker  ret void
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_wr_2_1:
143*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
144*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
145*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
146*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 1(
147*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_wr_2_1(%opencl.image2d_t addrspace(1)* %in1, ; write_only
148*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in2, ; write_only
149*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
150*9880d681SAndroid Build Coastguard Workerentry:
151*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
152*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in2) #0
153*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
154*9880d681SAndroid Build Coastguard Worker  ret void
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_wr_2_0:
158*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
159*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
160*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
161*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 0(
162*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_wr_2_0(%opencl.image3d_t addrspace(1)* %in1, ; write_only
163*9880d681SAndroid Build Coastguard Worker                            %opencl.image3d_t addrspace(1)* %in2, ; write_only
164*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
165*9880d681SAndroid Build Coastguard Workerentry:
166*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
167*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in1) #0
168*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
169*9880d681SAndroid Build Coastguard Worker  ret void
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_wr_2_1:
173*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
174*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
175*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
176*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 1(
177*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_wr_2_1(%opencl.image3d_t addrspace(1)* %in1, ; write_only
178*9880d681SAndroid Build Coastguard Worker                            %opencl.image3d_t addrspace(1)* %in2, ; write_only
179*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
180*9880d681SAndroid Build Coastguard Workerentry:
181*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
182*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in2) #0
183*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
184*9880d681SAndroid Build Coastguard Worker  ret void
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker; === 3 image args, read_only ==================================================
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_rd_3_0:
190*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
191*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
192*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
193*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 2(
194*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_rd_3_0(%opencl.image2d_t addrspace(1)* %in1, ; read_only
195*9880d681SAndroid Build Coastguard Worker                            %opencl.image3d_t addrspace(1)* %in2, ; read_only
196*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in3, ; read_only
197*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
198*9880d681SAndroid Build Coastguard Workerentry:
199*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
200*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in3) #0
201*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
202*9880d681SAndroid Build Coastguard Worker  ret void
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_rd_3_0:
207*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
208*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
209*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
210*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 2(
211*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_rd_3_0(%opencl.image3d_t addrspace(1)* %in1, ; read_only
212*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in2, ; read_only
213*9880d681SAndroid Build Coastguard Worker                            %opencl.image3d_t addrspace(1)* %in3, ; read_only
214*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
215*9880d681SAndroid Build Coastguard Workerentry:
216*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
217*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in3) #0
218*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
219*9880d681SAndroid Build Coastguard Worker  ret void
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker; === 3 image args, write_only =================================================
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_wr_3_0:
225*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
226*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
227*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
228*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 2(
229*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_wr_3_0(%opencl.image2d_t addrspace(1)* %in1, ; write_only
230*9880d681SAndroid Build Coastguard Worker                            %opencl.image3d_t addrspace(1)* %in2, ; write_only
231*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in3, ; write_only
232*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
233*9880d681SAndroid Build Coastguard Workerentry:
234*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
235*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in3) #0
236*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
237*9880d681SAndroid Build Coastguard Worker  ret void
238*9880d681SAndroid Build Coastguard Worker}
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_wr_3_0:
242*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
243*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
244*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
245*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 2(
246*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_wr_3_0(%opencl.image3d_t addrspace(1)* %in1, ; write_only
247*9880d681SAndroid Build Coastguard Worker                            %opencl.image2d_t addrspace(1)* %in2, ; write_only
248*9880d681SAndroid Build Coastguard Worker                            %opencl.image3d_t addrspace(1)* %in3, ; write_only
249*9880d681SAndroid Build Coastguard Worker                            i32 addrspace(1)* %out) {
250*9880d681SAndroid Build Coastguard Workerentry:
251*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
252*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in3) #0
253*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
254*9880d681SAndroid Build Coastguard Worker  ret void
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker; === 3 image args, mixed ======================================================
258*9880d681SAndroid Build Coastguard Worker
259*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_mix_3_0:
260*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
261*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
262*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
263*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 1(
264*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_mix_3_0(%opencl.image2d_t addrspace(1)* %in1, ; write_only
265*9880d681SAndroid Build Coastguard Worker                             %opencl.image3d_t addrspace(1)* %in2, ; read_only
266*9880d681SAndroid Build Coastguard Worker                             %opencl.image2d_t addrspace(1)* %in3, ; read_only
267*9880d681SAndroid Build Coastguard Worker                             i32 addrspace(1)* %out) {
268*9880d681SAndroid Build Coastguard Workerentry:
269*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
270*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in3) #0
271*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
272*9880d681SAndroid Build Coastguard Worker  ret void
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_mix_3_0:
276*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
277*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
278*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
279*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 1(
280*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_mix_3_0(%opencl.image3d_t addrspace(1)* %in1, ; write_only
281*9880d681SAndroid Build Coastguard Worker                             %opencl.image2d_t addrspace(1)* %in2, ; read_only
282*9880d681SAndroid Build Coastguard Worker                             %opencl.image3d_t addrspace(1)* %in3, ; read_only
283*9880d681SAndroid Build Coastguard Worker                             i32 addrspace(1)* %out) {
284*9880d681SAndroid Build Coastguard Workerentry:
285*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
286*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in3) #0
287*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
288*9880d681SAndroid Build Coastguard Worker  ret void
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_2d_mix_3_1:
292*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
293*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
294*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
295*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 1(
296*9880d681SAndroid Build Coastguard Workerdefine void @test_2d_mix_3_1(%opencl.image2d_t addrspace(1)* %in1, ; write_only
297*9880d681SAndroid Build Coastguard Worker                             %opencl.image3d_t addrspace(1)* %in2, ; read_only
298*9880d681SAndroid Build Coastguard Worker                             %opencl.image2d_t addrspace(1)* %in3, ; write_only
299*9880d681SAndroid Build Coastguard Worker                             i32 addrspace(1)* %out) {
300*9880d681SAndroid Build Coastguard Workerentry:
301*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.2d(
302*9880d681SAndroid Build Coastguard Worker      %opencl.image2d_t addrspace(1)* %in3) #0
303*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
304*9880d681SAndroid Build Coastguard Worker  ret void
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_3d_mix_3_1:
308*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]]
309*9880d681SAndroid Build Coastguard Worker; EG: MOV [[VAL]], literal.x
310*9880d681SAndroid Build Coastguard Worker; EG-NEXT: LSHR
311*9880d681SAndroid Build Coastguard Worker; EG-NEXT: 1(
312*9880d681SAndroid Build Coastguard Workerdefine void @test_3d_mix_3_1(%opencl.image3d_t addrspace(1)* %in1, ; write_only
313*9880d681SAndroid Build Coastguard Worker                             %opencl.image2d_t addrspace(1)* %in2, ; read_only
314*9880d681SAndroid Build Coastguard Worker                             %opencl.image3d_t addrspace(1)* %in3, ; write_only
315*9880d681SAndroid Build Coastguard Worker                             i32 addrspace(1)* %out) {
316*9880d681SAndroid Build Coastguard Workerentry:
317*9880d681SAndroid Build Coastguard Worker  %0 = call i32 @llvm.OpenCL.image.get.resource.id.3d(
318*9880d681SAndroid Build Coastguard Worker      %opencl.image3d_t addrspace(1)* %in3) #0
319*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32 addrspace(1)* %out
320*9880d681SAndroid Build Coastguard Worker  ret void
321*9880d681SAndroid Build Coastguard Worker}
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Worker%opencl.image2d_t = type opaque
325*9880d681SAndroid Build Coastguard Worker%opencl.image3d_t = type opaque
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.OpenCL.image.get.resource.id.2d(%opencl.image2d_t addrspace(1)*) #0
328*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.OpenCL.image.get.resource.id.3d(%opencl.image3d_t addrspace(1)*) #0
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Workerattributes #0 = { readnone }
331*9880d681SAndroid Build Coastguard Worker
332*9880d681SAndroid Build Coastguard Worker!opencl.kernels = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13,
333*9880d681SAndroid Build Coastguard Worker                    !14, !15, !16, !17, !18, !19}
334*9880d681SAndroid Build Coastguard Worker!0 = !{void (%opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @test_2d_rd_1_0,
335*9880d681SAndroid Build Coastguard Worker       !110, !120, !130, !140, !150}
336*9880d681SAndroid Build Coastguard Worker!1 = !{void (%opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @test_3d_rd_1_0,
337*9880d681SAndroid Build Coastguard Worker       !110, !120, !131, !141, !150}
338*9880d681SAndroid Build Coastguard Worker!2 = !{void (%opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @test_2d_wr_1_0,
339*9880d681SAndroid Build Coastguard Worker       !110, !121, !130, !140, !150}
340*9880d681SAndroid Build Coastguard Worker!3 = !{void (%opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @test_3d_wr_1_0,
341*9880d681SAndroid Build Coastguard Worker       !110, !121, !131, !141, !150}
342*9880d681SAndroid Build Coastguard Worker!110 = !{!"kernel_arg_addr_space", i32 1, i32 1}
343*9880d681SAndroid Build Coastguard Worker!120 = !{!"kernel_arg_access_qual", !"read_only", !"none"}
344*9880d681SAndroid Build Coastguard Worker!121 = !{!"kernel_arg_access_qual", !"write_only", !"none"}
345*9880d681SAndroid Build Coastguard Worker!130 = !{!"kernel_arg_type", !"image2d_t", !"int*"}
346*9880d681SAndroid Build Coastguard Worker!131 = !{!"kernel_arg_type", !"image3d_t", !"int*"}
347*9880d681SAndroid Build Coastguard Worker!140 = !{!"kernel_arg_base_type", !"image2d_t", !"int*"}
348*9880d681SAndroid Build Coastguard Worker!141 = !{!"kernel_arg_base_type", !"image3d_t", !"int*"}
349*9880d681SAndroid Build Coastguard Worker!150 = !{!"kernel_arg_type_qual", !"", !""}
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Worker!4  = !{void (%opencl.image2d_t addrspace(1)*, %opencl.image2d_t addrspace(1)*,
352*9880d681SAndroid Build Coastguard Worker              i32 addrspace(1)*)* @test_2d_rd_2_0, !112, !122, !132, !142, !152}
353*9880d681SAndroid Build Coastguard Worker!5  = !{void (%opencl.image2d_t addrspace(1)*, %opencl.image2d_t addrspace(1)*,
354*9880d681SAndroid Build Coastguard Worker              i32 addrspace(1)*)* @test_2d_rd_2_1, !112, !122, !132, !142, !152}
355*9880d681SAndroid Build Coastguard Worker!6  = !{void (%opencl.image3d_t addrspace(1)*, %opencl.image3d_t addrspace(1)*,
356*9880d681SAndroid Build Coastguard Worker              i32 addrspace(1)*)* @test_3d_rd_2_0, !112, !122, !133, !143, !152}
357*9880d681SAndroid Build Coastguard Worker!7  = !{void (%opencl.image3d_t addrspace(1)*, %opencl.image3d_t addrspace(1)*,
358*9880d681SAndroid Build Coastguard Worker              i32 addrspace(1)*)* @test_3d_rd_2_1, !112, !122, !133, !143, !152}
359*9880d681SAndroid Build Coastguard Worker!8  = !{void (%opencl.image2d_t addrspace(1)*, %opencl.image2d_t addrspace(1)*,
360*9880d681SAndroid Build Coastguard Worker              i32 addrspace(1)*)* @test_2d_wr_2_0, !112, !123, !132, !142, !152}
361*9880d681SAndroid Build Coastguard Worker!9  = !{void (%opencl.image2d_t addrspace(1)*, %opencl.image2d_t addrspace(1)*,
362*9880d681SAndroid Build Coastguard Worker              i32 addrspace(1)*)* @test_2d_wr_2_1, !112, !123, !132, !142, !152}
363*9880d681SAndroid Build Coastguard Worker!10 = !{void (%opencl.image3d_t addrspace(1)*, %opencl.image3d_t addrspace(1)*,
364*9880d681SAndroid Build Coastguard Worker              i32 addrspace(1)*)* @test_3d_wr_2_0, !112, !123, !133, !143, !152}
365*9880d681SAndroid Build Coastguard Worker!11 = !{void (%opencl.image3d_t addrspace(1)*, %opencl.image3d_t addrspace(1)*,
366*9880d681SAndroid Build Coastguard Worker              i32 addrspace(1)*)* @test_3d_wr_2_1, !112, !123, !133, !143, !152}
367*9880d681SAndroid Build Coastguard Worker!112 = !{!"kernel_arg_addr_space", i32 1, i32 1, i32 1}
368*9880d681SAndroid Build Coastguard Worker!122 = !{!"kernel_arg_access_qual", !"read_only", !"read_only", !"none"}
369*9880d681SAndroid Build Coastguard Worker!123 = !{!"kernel_arg_access_qual", !"write_only", !"write_only", !"none"}
370*9880d681SAndroid Build Coastguard Worker!132 = !{!"kernel_arg_type", !"image2d_t", !"image2d_t", !"int*"}
371*9880d681SAndroid Build Coastguard Worker!133 = !{!"kernel_arg_type", !"image3d_t", !"image3d_t", !"int*"}
372*9880d681SAndroid Build Coastguard Worker!142 = !{!"kernel_arg_base_type", !"image2d_t", !"image2d_t", !"int*"}
373*9880d681SAndroid Build Coastguard Worker!143 = !{!"kernel_arg_base_type", !"image3d_t", !"image3d_t", !"int*"}
374*9880d681SAndroid Build Coastguard Worker!152 = !{!"kernel_arg_type_qual", !"", !"", !""}
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Worker!12 = !{void (%opencl.image2d_t addrspace(1)*, %opencl.image3d_t addrspace(1)*,
377*9880d681SAndroid Build Coastguard Worker              %opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @test_2d_rd_3_0,
378*9880d681SAndroid Build Coastguard Worker              !114, !124, !134, !144, !154}
379*9880d681SAndroid Build Coastguard Worker!13 = !{void (%opencl.image3d_t addrspace(1)*, %opencl.image2d_t addrspace(1)*,
380*9880d681SAndroid Build Coastguard Worker              %opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @test_3d_rd_3_0,
381*9880d681SAndroid Build Coastguard Worker              !114, !124, !135, !145, !154}
382*9880d681SAndroid Build Coastguard Worker!14 = !{void (%opencl.image2d_t addrspace(1)*, %opencl.image3d_t addrspace(1)*,
383*9880d681SAndroid Build Coastguard Worker              %opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @test_2d_wr_3_0,
384*9880d681SAndroid Build Coastguard Worker              !114, !125, !134, !144, !154}
385*9880d681SAndroid Build Coastguard Worker!15 = !{void (%opencl.image3d_t addrspace(1)*, %opencl.image2d_t addrspace(1)*,
386*9880d681SAndroid Build Coastguard Worker              %opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @test_3d_wr_3_0,
387*9880d681SAndroid Build Coastguard Worker              !114, !125, !135, !145, !154}
388*9880d681SAndroid Build Coastguard Worker!16 = !{void (%opencl.image2d_t addrspace(1)*, %opencl.image3d_t addrspace(1)*,
389*9880d681SAndroid Build Coastguard Worker              %opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @test_2d_mix_3_0,
390*9880d681SAndroid Build Coastguard Worker              !114, !126, !134, !144, !154}
391*9880d681SAndroid Build Coastguard Worker!17 = !{void (%opencl.image3d_t addrspace(1)*, %opencl.image2d_t addrspace(1)*,
392*9880d681SAndroid Build Coastguard Worker              %opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @test_3d_mix_3_0,
393*9880d681SAndroid Build Coastguard Worker              !114, !126, !135, !145, !154}
394*9880d681SAndroid Build Coastguard Worker!18 = !{void (%opencl.image2d_t addrspace(1)*, %opencl.image3d_t addrspace(1)*,
395*9880d681SAndroid Build Coastguard Worker              %opencl.image2d_t addrspace(1)*, i32 addrspace(1)*)* @test_2d_mix_3_1,
396*9880d681SAndroid Build Coastguard Worker              !114, !127, !134, !144, !154}
397*9880d681SAndroid Build Coastguard Worker!19 = !{void (%opencl.image3d_t addrspace(1)*, %opencl.image2d_t addrspace(1)*,
398*9880d681SAndroid Build Coastguard Worker              %opencl.image3d_t addrspace(1)*, i32 addrspace(1)*)* @test_3d_mix_3_1,
399*9880d681SAndroid Build Coastguard Worker              !114, !127, !135, !145, !154}
400*9880d681SAndroid Build Coastguard Worker!114 = !{!"kernel_arg_addr_space", i32 1, i32 1, i32 1, i32 1}
401*9880d681SAndroid Build Coastguard Worker!124 = !{!"kernel_arg_access_qual", !"read_only", !"read_only", !"read_only", !"none"}
402*9880d681SAndroid Build Coastguard Worker!125 = !{!"kernel_arg_access_qual", !"write_only", !"write_only", !"write_only", !"none"}
403*9880d681SAndroid Build Coastguard Worker!126 = !{!"kernel_arg_access_qual", !"write_only", !"read_only", !"read_only", !"none"}
404*9880d681SAndroid Build Coastguard Worker!127 = !{!"kernel_arg_access_qual", !"write_only", !"read_only", !"write_only", !"none"}
405*9880d681SAndroid Build Coastguard Worker!134 = !{!"kernel_arg_type", !"image2d_t", !"image3d_t", !"image2d_t", !"int*"}
406*9880d681SAndroid Build Coastguard Worker!135 = !{!"kernel_arg_type", !"image3d_t", !"image2d_t", !"image3d_t", !"int*"}
407*9880d681SAndroid Build Coastguard Worker!144 = !{!"kernel_arg_base_type", !"image2d_t", !"image3d_t", !"image2d_t", !"int*"}
408*9880d681SAndroid Build Coastguard Worker!145 = !{!"kernel_arg_base_type", !"image3d_t", !"image2d_t", !"image3d_t", !"int*"}
409*9880d681SAndroid Build Coastguard Worker!154 = !{!"kernel_arg_type_qual", !"", !"", !"", !""}
410