[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / zextload.ll
blob9cd9c4734fbe69260eda9e652eda48bbff5a1550
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx900 < %s | FileCheck --check-prefix=GFX9 %s
3 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=fiji < %s | FileCheck --check-prefix=GFX8 %s
4 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=tahiti < %s | FileCheck --check-prefix=GFX6 %s
5 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1010 < %s | FileCheck --check-prefix=GFX10 %s
6 ; RUN: llc -global-isel -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 < %s | FileCheck --check-prefix=GFX11 %s
8 define i32 @zextload_global_i1_to_i32(ptr addrspace(1) %ptr) {
9 ; GFX9-LABEL: zextload_global_i1_to_i32:
10 ; GFX9:       ; %bb.0:
11 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12 ; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off
13 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
14 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
15 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17 ; GFX8-LABEL: zextload_global_i1_to_i32:
18 ; GFX8:       ; %bb.0:
19 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20 ; GFX8-NEXT:    flat_load_ubyte v0, v[0:1]
21 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
22 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
23 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25 ; GFX6-LABEL: zextload_global_i1_to_i32:
26 ; GFX6:       ; %bb.0:
27 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28 ; GFX6-NEXT:    s_mov_b32 s6, 0
29 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
30 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
31 ; GFX6-NEXT:    buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64
32 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
33 ; GFX6-NEXT:    v_and_b32_e32 v0, 1, v0
34 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
36 ; GFX10-LABEL: zextload_global_i1_to_i32:
37 ; GFX10:       ; %bb.0:
38 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39 ; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off
40 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
41 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
42 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
44 ; GFX11-LABEL: zextload_global_i1_to_i32:
45 ; GFX11:       ; %bb.0:
46 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
47 ; GFX11-NEXT:    global_load_u8 v0, v[0:1], off
48 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
49 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
50 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
51   %load = load i1, ptr addrspace(1) %ptr
52   %ext = zext i1 %load to i32
53   ret i32 %ext
56 define i32 @zextload_global_i8_to_i32(ptr addrspace(1) %ptr) {
57 ; GFX9-LABEL: zextload_global_i8_to_i32:
58 ; GFX9:       ; %bb.0:
59 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60 ; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off
61 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
62 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
64 ; GFX8-LABEL: zextload_global_i8_to_i32:
65 ; GFX8:       ; %bb.0:
66 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
67 ; GFX8-NEXT:    flat_load_ubyte v0, v[0:1]
68 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
69 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
71 ; GFX6-LABEL: zextload_global_i8_to_i32:
72 ; GFX6:       ; %bb.0:
73 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
74 ; GFX6-NEXT:    s_mov_b32 s6, 0
75 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
76 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
77 ; GFX6-NEXT:    buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64
78 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
79 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
81 ; GFX10-LABEL: zextload_global_i8_to_i32:
82 ; GFX10:       ; %bb.0:
83 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
84 ; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off
85 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
86 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
88 ; GFX11-LABEL: zextload_global_i8_to_i32:
89 ; GFX11:       ; %bb.0:
90 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
91 ; GFX11-NEXT:    global_load_u8 v0, v[0:1], off
92 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
93 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
94   %load = load i8, ptr addrspace(1) %ptr
95   %ext = zext i8 %load to i32
96   ret i32 %ext
99 define i32 @zextload_global_i16_to_i32(ptr addrspace(1) %ptr) {
100 ; GFX9-LABEL: zextload_global_i16_to_i32:
101 ; GFX9:       ; %bb.0:
102 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
103 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
104 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
105 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
107 ; GFX8-LABEL: zextload_global_i16_to_i32:
108 ; GFX8:       ; %bb.0:
109 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
110 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
111 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
112 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
114 ; GFX6-LABEL: zextload_global_i16_to_i32:
115 ; GFX6:       ; %bb.0:
116 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117 ; GFX6-NEXT:    s_mov_b32 s6, 0
118 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
119 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
120 ; GFX6-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
121 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
122 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
124 ; GFX10-LABEL: zextload_global_i16_to_i32:
125 ; GFX10:       ; %bb.0:
126 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
127 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
128 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
129 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
131 ; GFX11-LABEL: zextload_global_i16_to_i32:
132 ; GFX11:       ; %bb.0:
133 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
134 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off
135 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
136 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
137   %load = load i16, ptr addrspace(1) %ptr
138   %ext = zext i16 %load to i32
139   ret i32 %ext
142 define i64 @zextload_global_i1_to_i64(ptr addrspace(1) %ptr) {
143 ; GFX9-LABEL: zextload_global_i1_to_i64:
144 ; GFX9:       ; %bb.0:
145 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
146 ; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off
147 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
148 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
149 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
150 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
152 ; GFX8-LABEL: zextload_global_i1_to_i64:
153 ; GFX8:       ; %bb.0:
154 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
155 ; GFX8-NEXT:    flat_load_ubyte v0, v[0:1]
156 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
157 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
158 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
159 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
161 ; GFX6-LABEL: zextload_global_i1_to_i64:
162 ; GFX6:       ; %bb.0:
163 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
164 ; GFX6-NEXT:    s_mov_b32 s6, 0
165 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
166 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
167 ; GFX6-NEXT:    buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64
168 ; GFX6-NEXT:    v_mov_b32_e32 v1, 0
169 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
170 ; GFX6-NEXT:    v_and_b32_e32 v0, 1, v0
171 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
173 ; GFX10-LABEL: zextload_global_i1_to_i64:
174 ; GFX10:       ; %bb.0:
175 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
176 ; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off
177 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
178 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
179 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
180 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
182 ; GFX11-LABEL: zextload_global_i1_to_i64:
183 ; GFX11:       ; %bb.0:
184 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
185 ; GFX11-NEXT:    global_load_u8 v0, v[0:1], off
186 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
187 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 1, v0
188 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
189   %load = load i1, ptr addrspace(1) %ptr
190   %ext = zext i1 %load to i64
191   ret i64 %ext
194 define i64 @zextload_global_i8_to_i64(ptr addrspace(1) %ptr) {
195 ; GFX9-LABEL: zextload_global_i8_to_i64:
196 ; GFX9:       ; %bb.0:
197 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
198 ; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off
199 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
200 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
201 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
203 ; GFX8-LABEL: zextload_global_i8_to_i64:
204 ; GFX8:       ; %bb.0:
205 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
206 ; GFX8-NEXT:    flat_load_ubyte v0, v[0:1]
207 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
208 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
209 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
211 ; GFX6-LABEL: zextload_global_i8_to_i64:
212 ; GFX6:       ; %bb.0:
213 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
214 ; GFX6-NEXT:    s_mov_b32 s6, 0
215 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
216 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
217 ; GFX6-NEXT:    buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64
218 ; GFX6-NEXT:    v_mov_b32_e32 v1, 0
219 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
220 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
222 ; GFX10-LABEL: zextload_global_i8_to_i64:
223 ; GFX10:       ; %bb.0:
224 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
225 ; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off
226 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
227 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
228 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
230 ; GFX11-LABEL: zextload_global_i8_to_i64:
231 ; GFX11:       ; %bb.0:
232 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
233 ; GFX11-NEXT:    global_load_u8 v0, v[0:1], off
234 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
235 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
236 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
237   %load = load i8, ptr addrspace(1) %ptr
238   %ext = zext i8 %load to i64
239   ret i64 %ext
242 define i64 @zextload_global_i16_to_i64(ptr addrspace(1) %ptr) {
243 ; GFX9-LABEL: zextload_global_i16_to_i64:
244 ; GFX9:       ; %bb.0:
245 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
246 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
247 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
248 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
249 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
251 ; GFX8-LABEL: zextload_global_i16_to_i64:
252 ; GFX8:       ; %bb.0:
253 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
254 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
255 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
256 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
257 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
259 ; GFX6-LABEL: zextload_global_i16_to_i64:
260 ; GFX6:       ; %bb.0:
261 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
262 ; GFX6-NEXT:    s_mov_b32 s6, 0
263 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
264 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
265 ; GFX6-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
266 ; GFX6-NEXT:    v_mov_b32_e32 v1, 0
267 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
268 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
270 ; GFX10-LABEL: zextload_global_i16_to_i64:
271 ; GFX10:       ; %bb.0:
272 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
273 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
274 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
275 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
276 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
278 ; GFX11-LABEL: zextload_global_i16_to_i64:
279 ; GFX11:       ; %bb.0:
280 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
281 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off
282 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
283 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
284 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
285   %load = load i16, ptr addrspace(1) %ptr
286   %ext = zext i16 %load to i64
287   ret i64 %ext
290 define i64 @zextload_global_i32_to_i64(ptr addrspace(1) %ptr) {
291 ; GFX9-LABEL: zextload_global_i32_to_i64:
292 ; GFX9:       ; %bb.0:
293 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
294 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
295 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
296 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
297 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
299 ; GFX8-LABEL: zextload_global_i32_to_i64:
300 ; GFX8:       ; %bb.0:
301 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
302 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
303 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
304 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
305 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
307 ; GFX6-LABEL: zextload_global_i32_to_i64:
308 ; GFX6:       ; %bb.0:
309 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
310 ; GFX6-NEXT:    s_mov_b32 s6, 0
311 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
312 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
313 ; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
314 ; GFX6-NEXT:    v_mov_b32_e32 v1, 0
315 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
316 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
318 ; GFX10-LABEL: zextload_global_i32_to_i64:
319 ; GFX10:       ; %bb.0:
320 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
321 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
322 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
323 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
324 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
326 ; GFX11-LABEL: zextload_global_i32_to_i64:
327 ; GFX11:       ; %bb.0:
328 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
329 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
330 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
331 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
332 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
333   %load = load i32, ptr addrspace(1) %ptr
334   %ext = zext i32 %load to i64
335   ret i64 %ext
338 define i96 @zextload_global_i32_to_i96(ptr addrspace(1) %ptr) {
339 ; GFX9-LABEL: zextload_global_i32_to_i96:
340 ; GFX9:       ; %bb.0:
341 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
342 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
343 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
344 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
345 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
346 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
348 ; GFX8-LABEL: zextload_global_i32_to_i96:
349 ; GFX8:       ; %bb.0:
350 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
351 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
352 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
353 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0
354 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
355 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
357 ; GFX6-LABEL: zextload_global_i32_to_i96:
358 ; GFX6:       ; %bb.0:
359 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
360 ; GFX6-NEXT:    s_mov_b32 s6, 0
361 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
362 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
363 ; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
364 ; GFX6-NEXT:    v_mov_b32_e32 v1, 0
365 ; GFX6-NEXT:    v_mov_b32_e32 v2, 0
366 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
367 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
369 ; GFX10-LABEL: zextload_global_i32_to_i96:
370 ; GFX10:       ; %bb.0:
371 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
372 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
373 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
374 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
375 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
376 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
378 ; GFX11-LABEL: zextload_global_i32_to_i96:
379 ; GFX11:       ; %bb.0:
380 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
381 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
382 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, 0
383 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
384 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
385   %load = load i32, ptr addrspace(1) %ptr
386   %ext = zext i32 %load to i96
387   ret i96 %ext
390 define i128 @zextload_global_i32_to_i128(ptr addrspace(1) %ptr) {
391 ; GFX9-LABEL: zextload_global_i32_to_i128:
392 ; GFX9:       ; %bb.0:
393 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
394 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
395 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
396 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
397 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
398 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
399 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
401 ; GFX8-LABEL: zextload_global_i32_to_i128:
402 ; GFX8:       ; %bb.0:
403 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
404 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
405 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
406 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0
407 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0
408 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
409 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
411 ; GFX6-LABEL: zextload_global_i32_to_i128:
412 ; GFX6:       ; %bb.0:
413 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
414 ; GFX6-NEXT:    s_mov_b32 s6, 0
415 ; GFX6-NEXT:    s_mov_b32 s7, 0xf000
416 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
417 ; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
418 ; GFX6-NEXT:    v_mov_b32_e32 v1, 0
419 ; GFX6-NEXT:    v_mov_b32_e32 v2, 0
420 ; GFX6-NEXT:    v_mov_b32_e32 v3, 0
421 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
422 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
424 ; GFX10-LABEL: zextload_global_i32_to_i128:
425 ; GFX10:       ; %bb.0:
426 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
427 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
428 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
429 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
430 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
431 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
432 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
434 ; GFX11-LABEL: zextload_global_i32_to_i128:
435 ; GFX11:       ; %bb.0:
436 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
437 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
438 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, 0
439 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0
440 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
441 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
442   %load = load i32, ptr addrspace(1) %ptr
443   %ext = zext i32 %load to i128
444   ret i128 %ext