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
7
8define i32 @zextload_global_i1_to_i32(i1 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]
16;
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]
24;
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]
35;
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:    s_waitcnt_vscnt null, 0x0
40; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off
41; GFX10-NEXT:    s_waitcnt vmcnt(0)
42; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
43; GFX10-NEXT:    s_setpc_b64 s[30:31]
44  %load = load i1, i1 addrspace(1)* %ptr
45  %ext = zext i1 %load to i32
46  ret i32 %ext
47}
48
49define i32 @zextload_global_i8_to_i32(i8 addrspace(1)* %ptr) {
50; GFX9-LABEL: zextload_global_i8_to_i32:
51; GFX9:       ; %bb.0:
52; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off
54; GFX9-NEXT:    s_waitcnt vmcnt(0)
55; GFX9-NEXT:    s_setpc_b64 s[30:31]
56;
57; GFX8-LABEL: zextload_global_i8_to_i32:
58; GFX8:       ; %bb.0:
59; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60; GFX8-NEXT:    flat_load_ubyte v0, v[0:1]
61; GFX8-NEXT:    s_waitcnt vmcnt(0)
62; GFX8-NEXT:    s_setpc_b64 s[30:31]
63;
64; GFX6-LABEL: zextload_global_i8_to_i32:
65; GFX6:       ; %bb.0:
66; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
67; GFX6-NEXT:    s_mov_b32 s6, 0
68; GFX6-NEXT:    s_mov_b32 s7, 0xf000
69; GFX6-NEXT:    s_mov_b64 s[4:5], 0
70; GFX6-NEXT:    buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64
71; GFX6-NEXT:    s_waitcnt vmcnt(0)
72; GFX6-NEXT:    s_setpc_b64 s[30:31]
73;
74; GFX10-LABEL: zextload_global_i8_to_i32:
75; GFX10:       ; %bb.0:
76; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
77; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
78; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off
79; GFX10-NEXT:    s_waitcnt vmcnt(0)
80; GFX10-NEXT:    s_setpc_b64 s[30:31]
81  %load = load i8, i8 addrspace(1)* %ptr
82  %ext = zext i8 %load to i32
83  ret i32 %ext
84}
85
86define i32 @zextload_global_i16_to_i32(i16 addrspace(1)* %ptr) {
87; GFX9-LABEL: zextload_global_i16_to_i32:
88; GFX9:       ; %bb.0:
89; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
90; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
91; GFX9-NEXT:    s_waitcnt vmcnt(0)
92; GFX9-NEXT:    s_setpc_b64 s[30:31]
93;
94; GFX8-LABEL: zextload_global_i16_to_i32:
95; GFX8:       ; %bb.0:
96; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
97; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
98; GFX8-NEXT:    s_waitcnt vmcnt(0)
99; GFX8-NEXT:    s_setpc_b64 s[30:31]
100;
101; GFX6-LABEL: zextload_global_i16_to_i32:
102; GFX6:       ; %bb.0:
103; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
104; GFX6-NEXT:    s_mov_b32 s6, 0
105; GFX6-NEXT:    s_mov_b32 s7, 0xf000
106; GFX6-NEXT:    s_mov_b64 s[4:5], 0
107; GFX6-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
108; GFX6-NEXT:    s_waitcnt vmcnt(0)
109; GFX6-NEXT:    s_setpc_b64 s[30:31]
110;
111; GFX10-LABEL: zextload_global_i16_to_i32:
112; GFX10:       ; %bb.0:
113; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
114; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
115; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
116; GFX10-NEXT:    s_waitcnt vmcnt(0)
117; GFX10-NEXT:    s_setpc_b64 s[30:31]
118  %load = load i16, i16 addrspace(1)* %ptr
119  %ext = zext i16 %load to i32
120  ret i32 %ext
121}
122
123define i64 @zextload_global_i1_to_i64(i1 addrspace(1)* %ptr) {
124; GFX9-LABEL: zextload_global_i1_to_i64:
125; GFX9:       ; %bb.0:
126; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
127; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off
128; GFX9-NEXT:    v_mov_b32_e32 v1, 0
129; GFX9-NEXT:    s_waitcnt vmcnt(0)
130; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
131; GFX9-NEXT:    s_setpc_b64 s[30:31]
132;
133; GFX8-LABEL: zextload_global_i1_to_i64:
134; GFX8:       ; %bb.0:
135; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
136; GFX8-NEXT:    flat_load_ubyte v0, v[0:1]
137; GFX8-NEXT:    v_mov_b32_e32 v1, 0
138; GFX8-NEXT:    s_waitcnt vmcnt(0)
139; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
140; GFX8-NEXT:    s_setpc_b64 s[30:31]
141;
142; GFX6-LABEL: zextload_global_i1_to_i64:
143; GFX6:       ; %bb.0:
144; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
145; GFX6-NEXT:    s_mov_b32 s6, 0
146; GFX6-NEXT:    s_mov_b32 s7, 0xf000
147; GFX6-NEXT:    s_mov_b64 s[4:5], 0
148; GFX6-NEXT:    buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64
149; GFX6-NEXT:    v_mov_b32_e32 v1, 0
150; GFX6-NEXT:    s_waitcnt vmcnt(0)
151; GFX6-NEXT:    v_and_b32_e32 v0, 1, v0
152; GFX6-NEXT:    s_setpc_b64 s[30:31]
153;
154; GFX10-LABEL: zextload_global_i1_to_i64:
155; GFX10:       ; %bb.0:
156; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
157; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
158; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off
159; GFX10-NEXT:    v_mov_b32_e32 v1, 0
160; GFX10-NEXT:    s_waitcnt vmcnt(0)
161; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
162; GFX10-NEXT:    s_setpc_b64 s[30:31]
163;
164; GFX11-LABEL: zextload_global_i1_to_i64:
165; GFX11:       ; %bb.0:
166; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
167; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
168; GFX11-NEXT:    global_load_u8 v0, v[0:1], off
169; GFX11-NEXT:    s_waitcnt vmcnt(0)
170; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 1, v0
171; GFX11-NEXT:    s_setpc_b64 s[30:31]
172  %load = load i1, i1 addrspace(1)* %ptr
173  %ext = zext i1 %load to i64
174  ret i64 %ext
175}
176
177define i64 @zextload_global_i8_to_i64(i8 addrspace(1)* %ptr) {
178; GFX9-LABEL: zextload_global_i8_to_i64:
179; GFX9:       ; %bb.0:
180; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
181; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off
182; GFX9-NEXT:    v_mov_b32_e32 v1, 0
183; GFX9-NEXT:    s_waitcnt vmcnt(0)
184; GFX9-NEXT:    s_setpc_b64 s[30:31]
185;
186; GFX8-LABEL: zextload_global_i8_to_i64:
187; GFX8:       ; %bb.0:
188; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
189; GFX8-NEXT:    flat_load_ubyte v0, v[0:1]
190; GFX8-NEXT:    v_mov_b32_e32 v1, 0
191; GFX8-NEXT:    s_waitcnt vmcnt(0)
192; GFX8-NEXT:    s_setpc_b64 s[30:31]
193;
194; GFX6-LABEL: zextload_global_i8_to_i64:
195; GFX6:       ; %bb.0:
196; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
197; GFX6-NEXT:    s_mov_b32 s6, 0
198; GFX6-NEXT:    s_mov_b32 s7, 0xf000
199; GFX6-NEXT:    s_mov_b64 s[4:5], 0
200; GFX6-NEXT:    buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64
201; GFX6-NEXT:    v_mov_b32_e32 v1, 0
202; GFX6-NEXT:    s_waitcnt vmcnt(0)
203; GFX6-NEXT:    s_setpc_b64 s[30:31]
204;
205; GFX10-LABEL: zextload_global_i8_to_i64:
206; GFX10:       ; %bb.0:
207; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
208; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
209; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off
210; GFX10-NEXT:    v_mov_b32_e32 v1, 0
211; GFX10-NEXT:    s_waitcnt vmcnt(0)
212; GFX10-NEXT:    s_setpc_b64 s[30:31]
213;
214; GFX11-LABEL: zextload_global_i8_to_i64:
215; GFX11:       ; %bb.0:
216; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
217; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
218; GFX11-NEXT:    global_load_u8 v0, v[0:1], off
219; GFX11-NEXT:    v_mov_b32_e32 v1, 0
220; GFX11-NEXT:    s_waitcnt vmcnt(0)
221; GFX11-NEXT:    s_setpc_b64 s[30:31]
222  %load = load i8, i8 addrspace(1)* %ptr
223  %ext = zext i8 %load to i64
224  ret i64 %ext
225}
226
227define i64 @zextload_global_i16_to_i64(i16 addrspace(1)* %ptr) {
228; GFX9-LABEL: zextload_global_i16_to_i64:
229; GFX9:       ; %bb.0:
230; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
231; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
232; GFX9-NEXT:    v_mov_b32_e32 v1, 0
233; GFX9-NEXT:    s_waitcnt vmcnt(0)
234; GFX9-NEXT:    s_setpc_b64 s[30:31]
235;
236; GFX8-LABEL: zextload_global_i16_to_i64:
237; GFX8:       ; %bb.0:
238; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
239; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
240; GFX8-NEXT:    v_mov_b32_e32 v1, 0
241; GFX8-NEXT:    s_waitcnt vmcnt(0)
242; GFX8-NEXT:    s_setpc_b64 s[30:31]
243;
244; GFX6-LABEL: zextload_global_i16_to_i64:
245; GFX6:       ; %bb.0:
246; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
247; GFX6-NEXT:    s_mov_b32 s6, 0
248; GFX6-NEXT:    s_mov_b32 s7, 0xf000
249; GFX6-NEXT:    s_mov_b64 s[4:5], 0
250; GFX6-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
251; GFX6-NEXT:    v_mov_b32_e32 v1, 0
252; GFX6-NEXT:    s_waitcnt vmcnt(0)
253; GFX6-NEXT:    s_setpc_b64 s[30:31]
254;
255; GFX10-LABEL: zextload_global_i16_to_i64:
256; GFX10:       ; %bb.0:
257; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
258; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
259; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
260; GFX10-NEXT:    v_mov_b32_e32 v1, 0
261; GFX10-NEXT:    s_waitcnt vmcnt(0)
262; GFX10-NEXT:    s_setpc_b64 s[30:31]
263;
264; GFX11-LABEL: zextload_global_i16_to_i64:
265; GFX11:       ; %bb.0:
266; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
267; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
268; GFX11-NEXT:    global_load_u16 v0, v[0:1], off
269; GFX11-NEXT:    v_mov_b32_e32 v1, 0
270; GFX11-NEXT:    s_waitcnt vmcnt(0)
271; GFX11-NEXT:    s_setpc_b64 s[30:31]
272  %load = load i16, i16 addrspace(1)* %ptr
273  %ext = zext i16 %load to i64
274  ret i64 %ext
275}
276
277define i64 @zextload_global_i32_to_i64(i32 addrspace(1)* %ptr) {
278; GFX9-LABEL: zextload_global_i32_to_i64:
279; GFX9:       ; %bb.0:
280; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
281; GFX9-NEXT:    global_load_dword v0, v[0:1], off
282; GFX9-NEXT:    v_mov_b32_e32 v1, 0
283; GFX9-NEXT:    s_waitcnt vmcnt(0)
284; GFX9-NEXT:    s_setpc_b64 s[30:31]
285;
286; GFX8-LABEL: zextload_global_i32_to_i64:
287; GFX8:       ; %bb.0:
288; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
289; GFX8-NEXT:    flat_load_dword v0, v[0:1]
290; GFX8-NEXT:    v_mov_b32_e32 v1, 0
291; GFX8-NEXT:    s_waitcnt vmcnt(0)
292; GFX8-NEXT:    s_setpc_b64 s[30:31]
293;
294; GFX6-LABEL: zextload_global_i32_to_i64:
295; GFX6:       ; %bb.0:
296; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
297; GFX6-NEXT:    s_mov_b32 s6, 0
298; GFX6-NEXT:    s_mov_b32 s7, 0xf000
299; GFX6-NEXT:    s_mov_b64 s[4:5], 0
300; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
301; GFX6-NEXT:    v_mov_b32_e32 v1, 0
302; GFX6-NEXT:    s_waitcnt vmcnt(0)
303; GFX6-NEXT:    s_setpc_b64 s[30:31]
304;
305; GFX10-LABEL: zextload_global_i32_to_i64:
306; GFX10:       ; %bb.0:
307; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
308; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
309; GFX10-NEXT:    global_load_dword v0, v[0:1], off
310; GFX10-NEXT:    v_mov_b32_e32 v1, 0
311; GFX10-NEXT:    s_waitcnt vmcnt(0)
312; GFX10-NEXT:    s_setpc_b64 s[30:31]
313;
314; GFX11-LABEL: zextload_global_i32_to_i64:
315; GFX11:       ; %bb.0:
316; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
317; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
318; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
319; GFX11-NEXT:    v_mov_b32_e32 v1, 0
320; GFX11-NEXT:    s_waitcnt vmcnt(0)
321; GFX11-NEXT:    s_setpc_b64 s[30:31]
322  %load = load i32, i32 addrspace(1)* %ptr
323  %ext = zext i32 %load to i64
324  ret i64 %ext
325}
326
327define i96 @zextload_global_i32_to_i96(i32 addrspace(1)* %ptr) {
328; GFX9-LABEL: zextload_global_i32_to_i96:
329; GFX9:       ; %bb.0:
330; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
331; GFX9-NEXT:    global_load_dword v0, v[0:1], off
332; GFX9-NEXT:    v_mov_b32_e32 v1, 0
333; GFX9-NEXT:    v_mov_b32_e32 v2, 0
334; GFX9-NEXT:    s_waitcnt vmcnt(0)
335; GFX9-NEXT:    s_setpc_b64 s[30:31]
336;
337; GFX8-LABEL: zextload_global_i32_to_i96:
338; GFX8:       ; %bb.0:
339; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
340; GFX8-NEXT:    flat_load_dword v0, v[0:1]
341; GFX8-NEXT:    v_mov_b32_e32 v1, 0
342; GFX8-NEXT:    v_mov_b32_e32 v2, 0
343; GFX8-NEXT:    s_waitcnt vmcnt(0)
344; GFX8-NEXT:    s_setpc_b64 s[30:31]
345;
346; GFX6-LABEL: zextload_global_i32_to_i96:
347; GFX6:       ; %bb.0:
348; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
349; GFX6-NEXT:    s_mov_b32 s6, 0
350; GFX6-NEXT:    s_mov_b32 s7, 0xf000
351; GFX6-NEXT:    s_mov_b64 s[4:5], 0
352; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
353; GFX6-NEXT:    v_mov_b32_e32 v1, 0
354; GFX6-NEXT:    v_mov_b32_e32 v2, 0
355; GFX6-NEXT:    s_waitcnt vmcnt(0)
356; GFX6-NEXT:    s_setpc_b64 s[30:31]
357;
358; GFX10-LABEL: zextload_global_i32_to_i96:
359; GFX10:       ; %bb.0:
360; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
361; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
362; GFX10-NEXT:    global_load_dword v0, v[0:1], off
363; GFX10-NEXT:    v_mov_b32_e32 v1, 0
364; GFX10-NEXT:    v_mov_b32_e32 v2, 0
365; GFX10-NEXT:    s_waitcnt vmcnt(0)
366; GFX10-NEXT:    s_setpc_b64 s[30:31]
367;
368; GFX11-LABEL: zextload_global_i32_to_i96:
369; GFX11:       ; %bb.0:
370; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
371; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
372; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
373; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, 0
374; GFX11-NEXT:    s_waitcnt vmcnt(0)
375; GFX11-NEXT:    s_setpc_b64 s[30:31]
376  %load = load i32, i32 addrspace(1)* %ptr
377  %ext = zext i32 %load to i96
378  ret i96 %ext
379}
380
381define i128 @zextload_global_i32_to_i128(i32 addrspace(1)* %ptr) {
382; GFX9-LABEL: zextload_global_i32_to_i128:
383; GFX9:       ; %bb.0:
384; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
385; GFX9-NEXT:    global_load_dword v0, v[0:1], off
386; GFX9-NEXT:    v_mov_b32_e32 v1, 0
387; GFX9-NEXT:    v_mov_b32_e32 v2, 0
388; GFX9-NEXT:    v_mov_b32_e32 v3, 0
389; GFX9-NEXT:    s_waitcnt vmcnt(0)
390; GFX9-NEXT:    s_setpc_b64 s[30:31]
391;
392; GFX8-LABEL: zextload_global_i32_to_i128:
393; GFX8:       ; %bb.0:
394; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
395; GFX8-NEXT:    flat_load_dword v0, v[0:1]
396; GFX8-NEXT:    v_mov_b32_e32 v1, 0
397; GFX8-NEXT:    v_mov_b32_e32 v2, 0
398; GFX8-NEXT:    v_mov_b32_e32 v3, 0
399; GFX8-NEXT:    s_waitcnt vmcnt(0)
400; GFX8-NEXT:    s_setpc_b64 s[30:31]
401;
402; GFX6-LABEL: zextload_global_i32_to_i128:
403; GFX6:       ; %bb.0:
404; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
405; GFX6-NEXT:    s_mov_b32 s6, 0
406; GFX6-NEXT:    s_mov_b32 s7, 0xf000
407; GFX6-NEXT:    s_mov_b64 s[4:5], 0
408; GFX6-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
409; GFX6-NEXT:    v_mov_b32_e32 v1, 0
410; GFX6-NEXT:    v_mov_b32_e32 v2, 0
411; GFX6-NEXT:    v_mov_b32_e32 v3, 0
412; GFX6-NEXT:    s_waitcnt vmcnt(0)
413; GFX6-NEXT:    s_setpc_b64 s[30:31]
414;
415; GFX10-LABEL: zextload_global_i32_to_i128:
416; GFX10:       ; %bb.0:
417; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
418; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
419; GFX10-NEXT:    global_load_dword v0, v[0:1], off
420; GFX10-NEXT:    v_mov_b32_e32 v1, 0
421; GFX10-NEXT:    v_mov_b32_e32 v2, 0
422; GFX10-NEXT:    v_mov_b32_e32 v3, 0
423; GFX10-NEXT:    s_waitcnt vmcnt(0)
424; GFX10-NEXT:    s_setpc_b64 s[30:31]
425;
426; GFX11-LABEL: zextload_global_i32_to_i128:
427; GFX11:       ; %bb.0:
428; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
429; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
430; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
431; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, 0
432; GFX11-NEXT:    v_mov_b32_e32 v3, 0
433; GFX11-NEXT:    s_waitcnt vmcnt(0)
434; GFX11-NEXT:    s_setpc_b64 s[30:31]
435  %load = load i32, i32 addrspace(1)* %ptr
436  %ext = zext i32 %load to i128
437  ret i128 %ext
438}
439