[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / gfx-callable-argument-types.ll
blob545a9af3f9a0bd2b93a27c472654e745527e5246
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX9 %s
3 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX10 %s
4 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX11 %s
5 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx1010 -mattr=+enable-flat-scratch -verify-machineinstrs < %s | FileCheck --check-prefix=GFX10-SCRATCH %s
7 declare hidden amdgpu_gfx void @external_void_func_i1(i1) #0
8 declare hidden amdgpu_gfx void @external_void_func_i1_signext(i1 signext) #0
9 declare hidden amdgpu_gfx void @external_void_func_i1_zeroext(i1 zeroext) #0
11 declare hidden amdgpu_gfx void @external_void_func_i8(i8) #0
12 declare hidden amdgpu_gfx void @external_void_func_i8_signext(i8 signext) #0
13 declare hidden amdgpu_gfx void @external_void_func_i8_zeroext(i8 zeroext) #0
14 declare hidden amdgpu_gfx void @external_void_func_v2i8(<2 x i8>) #0
15 declare hidden amdgpu_gfx void @external_void_func_v3i8(<3 x i8>) #0
16 declare hidden amdgpu_gfx void @external_void_func_v4i8(<4 x i8>) #0
17 declare hidden amdgpu_gfx void @external_void_func_v5i8(<5 x i8>) #0
18 declare hidden amdgpu_gfx void @external_void_func_v8i8(<8 x i8>) #0
19 declare hidden amdgpu_gfx void @external_void_func_v16i8(<8 x i8>) #0
20 declare hidden amdgpu_gfx void @external_void_func_v32i8(<32 x i8>) #0
22 declare hidden amdgpu_gfx i8 @external_void_func_i8_ret(i8) #0
23 declare hidden amdgpu_gfx <2 x i8> @external_void_func_v2i8_ret(<2 x i8>) #0
24 declare hidden amdgpu_gfx <3 x i8> @external_void_func_v3i8_ret(<3 x i8>) #0
25 declare hidden amdgpu_gfx <4 x i8> @external_void_func_v4i8_ret(<4 x i8>) #0
26 declare hidden amdgpu_gfx <5 x i8> @external_void_func_v5i8_ret(<5 x i8>) #0
27 declare hidden amdgpu_gfx <8 x i8> @external_void_func_v8i8_ret(<8 x i8>) #0
28 declare hidden amdgpu_gfx <32 x i8> @external_void_func_v32i8_ret(<32 x i8>) #0
30 declare hidden amdgpu_gfx void @external_void_func_i16(i16) #0
31 declare hidden amdgpu_gfx void @external_void_func_i16_signext(i16 signext) #0
32 declare hidden amdgpu_gfx void @external_void_func_i16_zeroext(i16 zeroext) #0
34 declare hidden amdgpu_gfx void @external_void_func_i32(i32) #0
35 declare hidden amdgpu_gfx void @external_void_func_i64(i64) #0
36 declare hidden amdgpu_gfx void @external_void_func_v2i64(<2 x i64>) #0
37 declare hidden amdgpu_gfx void @external_void_func_v3i64(<3 x i64>) #0
38 declare hidden amdgpu_gfx void @external_void_func_v4i64(<4 x i64>) #0
40 declare hidden amdgpu_gfx void @external_void_func_f16(half) #0
41 declare hidden amdgpu_gfx void @external_void_func_f32(float) #0
42 declare hidden amdgpu_gfx void @external_void_func_f64(double) #0
43 declare hidden amdgpu_gfx void @external_void_func_v2f32(<2 x float>) #0
44 declare hidden amdgpu_gfx void @external_void_func_v2f64(<2 x double>) #0
45 declare hidden amdgpu_gfx void @external_void_func_v3f32(<3 x float>) #0
46 declare hidden amdgpu_gfx void @external_void_func_v3f64(<3 x double>) #0
47 declare hidden amdgpu_gfx void @external_void_func_v5f32(<5 x float>) #0
49 declare hidden amdgpu_gfx void @external_void_func_v2i16(<2 x i16>) #0
50 declare hidden amdgpu_gfx void @external_void_func_v2f16(<2 x half>) #0
51 declare hidden amdgpu_gfx void @external_void_func_v3i16(<3 x i16>) #0
52 declare hidden amdgpu_gfx void @external_void_func_v3f16(<3 x half>) #0
53 declare hidden amdgpu_gfx void @external_void_func_v4i16(<4 x i16>) #0
54 declare hidden amdgpu_gfx void @external_void_func_v4f16(<4 x half>) #0
56 declare hidden amdgpu_gfx void @external_void_func_bf16(bfloat) #0
57 declare hidden amdgpu_gfx void @external_void_func_v1bf16(<1 x bfloat>) #0
58 declare hidden amdgpu_gfx void @external_void_func_v2bf16(<2 x bfloat>) #0
59 declare hidden amdgpu_gfx void @external_void_func_v3bf16(<3 x bfloat>) #0
60 declare hidden amdgpu_gfx void @external_void_func_v4bf16(<4 x bfloat>) #0
61 declare hidden amdgpu_gfx void @external_void_func_v8bf16(<8 x bfloat>) #0
62 declare hidden amdgpu_gfx void @external_void_func_v16bf16(<16 x bfloat>) #0
64 declare hidden amdgpu_gfx void @external_void_func_bf16_inreg(bfloat inreg) #0
65 declare hidden amdgpu_gfx void @external_void_func_v1bf16_inreg(<1 x bfloat> inreg) #0
66 declare hidden amdgpu_gfx void @external_void_func_v2bf16_inreg(<2 x bfloat> inreg) #0
67 declare hidden amdgpu_gfx void @external_void_func_v3bf16_inreg(<3 x bfloat> inreg) #0
68 declare hidden amdgpu_gfx void @external_void_func_v4bf16_inreg(<4 x bfloat> inreg) #0
69 declare hidden amdgpu_gfx void @external_void_func_v8bf16_inreg(<8 x bfloat> inreg) #0
70 declare hidden amdgpu_gfx void @external_void_func_v16bf16_inreg(<16 x bfloat> inreg) #0
72 declare hidden amdgpu_gfx void @external_void_func_v2i32(<2 x i32>) #0
73 declare hidden amdgpu_gfx void @external_void_func_v3i32(<3 x i32>) #0
74 declare hidden amdgpu_gfx void @external_void_func_v3i32_i32(<3 x i32>, i32) #0
75 declare hidden amdgpu_gfx void @external_void_func_v4i32(<4 x i32>) #0
76 declare hidden amdgpu_gfx void @external_void_func_v5i32(<5 x i32>) #0
77 declare hidden amdgpu_gfx void @external_void_func_v8i32(<8 x i32>) #0
78 declare hidden amdgpu_gfx void @external_void_func_v16i32(<16 x i32>) #0
79 declare hidden amdgpu_gfx void @external_void_func_v32i32(<32 x i32>) #0
80 declare hidden amdgpu_gfx void @external_void_func_v32i32_i32(<32 x i32>, i32) #0
82 declare hidden amdgpu_gfx void @external_void_func_i1_inreg(i1 inreg) #0
83 declare hidden amdgpu_gfx void @external_void_func_i8_inreg(i8 inreg) #0
84 declare hidden amdgpu_gfx void @external_void_func_i16_inreg(i16 inreg) #0
85 declare hidden amdgpu_gfx void @external_void_func_i32_inreg(i32 inreg) #0
86 declare hidden amdgpu_gfx void @external_void_func_i64_inreg(i64 inreg) #0
87 declare hidden amdgpu_gfx void @external_void_func_v2i64_inreg(<2 x i64> inreg) #0
88 declare hidden amdgpu_gfx void @external_void_func_v3i64_inreg(<3 x i64> inreg) #0
89 declare hidden amdgpu_gfx void @external_void_func_v4i64_inreg(<4 x i64> inreg) #0
91 declare hidden amdgpu_gfx void @external_void_func_f16_inreg(half inreg) #0
92 declare hidden amdgpu_gfx void @external_void_func_f32_inreg(float inreg) #0
93 declare hidden amdgpu_gfx void @external_void_func_f64_inreg(double inreg) #0
94 declare hidden amdgpu_gfx void @external_void_func_v2f32_inreg(<2 x float> inreg) #0
95 declare hidden amdgpu_gfx void @external_void_func_v2f64_inreg(<2 x double> inreg) #0
96 declare hidden amdgpu_gfx void @external_void_func_v3f32_inreg(<3 x float> inreg) #0
97 declare hidden amdgpu_gfx void @external_void_func_v3f64_inreg(<3 x double> inreg) #0
98 declare hidden amdgpu_gfx void @external_void_func_v5f32_inreg(<5 x float> inreg) #0
100 declare hidden amdgpu_gfx void @external_void_func_v2i16_inreg(<2 x i16> inreg) #0
101 declare hidden amdgpu_gfx void @external_void_func_v2f16_inreg(<2 x half> inreg) #0
102 declare hidden amdgpu_gfx void @external_void_func_v3i16_inreg(<3 x i16> inreg) #0
103 declare hidden amdgpu_gfx void @external_void_func_v3f16_inreg(<3 x half> inreg) #0
104 declare hidden amdgpu_gfx void @external_void_func_v4i16_inreg(<4 x i16> inreg) #0
105 declare hidden amdgpu_gfx void @external_void_func_v4f16_inreg(<4 x half> inreg) #0
107 declare hidden amdgpu_gfx void @external_void_func_v2i32_inreg(<2 x i32> inreg) #0
108 declare hidden amdgpu_gfx void @external_void_func_v3i32_inreg(<3 x i32> inreg) #0
109 declare hidden amdgpu_gfx void @external_void_func_v3i32_i32_inreg(<3 x i32> inreg, i32 inreg) #0
110 declare hidden amdgpu_gfx void @external_void_func_v4i32_inreg(<4 x i32> inreg) #0
111 declare hidden amdgpu_gfx void @external_void_func_v5i32_inreg(<5 x i32> inreg) #0
112 declare hidden amdgpu_gfx void @external_void_func_v8i32_inreg(<8 x i32> inreg) #0
113 declare hidden amdgpu_gfx void @external_void_func_v16i32_inreg(<16 x i32> inreg) #0
114 declare hidden amdgpu_gfx void @external_void_func_v32i32_inreg(<32 x i32> inreg) #0
115 declare hidden amdgpu_gfx void @external_void_func_v32i32_i32_inreg(<32 x i32> inreg, i32 inreg) #0
117 ; return value and argument
118 declare hidden amdgpu_gfx i32 @external_i32_func_i32(i32) #0
120 ; Structs
121 declare hidden amdgpu_gfx void @external_void_func_struct_i8_i32({ i8, i32 }) #0
122 declare hidden amdgpu_gfx void @external_void_func_byval_struct_i8_i32(ptr addrspace(5) byval({ i8, i32 })) #0
123 declare hidden amdgpu_gfx void @external_void_func_sret_struct_i8_i32_byval_struct_i8_i32(ptr addrspace(5) sret({ i8, i32 }), ptr addrspace(5) byval({ i8, i32 })) #0
125 define amdgpu_gfx void @test_call_external_void_func_i1_imm() #0 {
126 ; GFX9-LABEL: test_call_external_void_func_i1_imm:
127 ; GFX9:       ; %bb.0:
128 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
129 ; GFX9-NEXT:    s_mov_b32 s34, s33
130 ; GFX9-NEXT:    s_mov_b32 s33, s32
131 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
132 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
133 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
134 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
135 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
136 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
137 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1
138 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i1@abs32@hi
139 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i1@abs32@lo
140 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
141 ; GFX9-NEXT:    buffer_store_byte v0, off, s[0:3], s32
142 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
143 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
144 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
145 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
146 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
147 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
148 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
149 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
150 ; GFX9-NEXT:    s_mov_b32 s33, s34
151 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
152 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
154 ; GFX10-LABEL: test_call_external_void_func_i1_imm:
155 ; GFX10:       ; %bb.0:
156 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
157 ; GFX10-NEXT:    s_mov_b32 s34, s33
158 ; GFX10-NEXT:    s_mov_b32 s33, s32
159 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
160 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
161 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
162 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
163 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
164 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1
165 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
166 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i1@abs32@hi
167 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i1@abs32@lo
168 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
169 ; GFX10-NEXT:    buffer_store_byte v0, off, s[0:3], s32
170 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
171 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
172 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
173 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
174 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
175 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
176 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
177 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
178 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
179 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
180 ; GFX10-NEXT:    s_mov_b32 s33, s34
181 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
182 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
184 ; GFX11-LABEL: test_call_external_void_func_i1_imm:
185 ; GFX11:       ; %bb.0:
186 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
187 ; GFX11-NEXT:    s_mov_b32 s0, s33
188 ; GFX11-NEXT:    s_mov_b32 s33, s32
189 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
190 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
191 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
192 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
193 ; GFX11-NEXT:    v_mov_b32_e32 v0, 1
194 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
195 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i1@abs32@hi
196 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i1@abs32@lo
197 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
198 ; GFX11-NEXT:    scratch_store_b8 off, v0, s32
199 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
200 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
201 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
202 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
203 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
204 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
205 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
206 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
207 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
208 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
209 ; GFX11-NEXT:    s_mov_b32 s33, s0
210 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
211 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
213 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i1_imm:
214 ; GFX10-SCRATCH:       ; %bb.0:
215 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
216 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
217 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
218 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
219 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
220 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
221 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
222 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
223 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1
224 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
225 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i1@abs32@hi
226 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i1@abs32@lo
227 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
228 ; GFX10-SCRATCH-NEXT:    scratch_store_byte off, v0, s32
229 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
230 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
231 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
232 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
233 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
234 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
235 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
236 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
237 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
238 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
239 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
240 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
241 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
242   call amdgpu_gfx void @external_void_func_i1(i1 true)
243   ret void
246 define amdgpu_gfx void @test_call_external_void_func_i1_signext(i32) #0 {
247 ; GFX9-LABEL: test_call_external_void_func_i1_signext:
248 ; GFX9:       ; %bb.0:
249 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
250 ; GFX9-NEXT:    s_mov_b32 s34, s33
251 ; GFX9-NEXT:    s_mov_b32 s33, s32
252 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
253 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
254 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
255 ; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off glc
256 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
257 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
258 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
259 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
260 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i1_signext@abs32@hi
261 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i1_signext@abs32@lo
262 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
263 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
264 ; GFX9-NEXT:    buffer_store_byte v0, off, s[0:3], s32
265 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
266 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
267 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
268 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
269 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
270 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
271 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
272 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
273 ; GFX9-NEXT:    s_mov_b32 s33, s34
274 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
275 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
277 ; GFX10-LABEL: test_call_external_void_func_i1_signext:
278 ; GFX10:       ; %bb.0:
279 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
280 ; GFX10-NEXT:    s_mov_b32 s34, s33
281 ; GFX10-NEXT:    s_mov_b32 s33, s32
282 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
283 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
284 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
285 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
286 ; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off glc dlc
287 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
288 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
289 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
290 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i1_signext@abs32@hi
291 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i1_signext@abs32@lo
292 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
293 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
294 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
295 ; GFX10-NEXT:    buffer_store_byte v0, off, s[0:3], s32
296 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
297 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
298 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
299 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
300 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
301 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
302 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
303 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
304 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
305 ; GFX10-NEXT:    s_mov_b32 s33, s34
306 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
307 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
309 ; GFX11-LABEL: test_call_external_void_func_i1_signext:
310 ; GFX11:       ; %bb.0:
311 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
312 ; GFX11-NEXT:    s_mov_b32 s0, s33
313 ; GFX11-NEXT:    s_mov_b32 s33, s32
314 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
315 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
316 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
317 ; GFX11-NEXT:    global_load_u8 v0, v[0:1], off glc dlc
318 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
319 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
320 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
321 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i1_signext@abs32@hi
322 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i1_signext@abs32@lo
323 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
324 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
325 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
326 ; GFX11-NEXT:    scratch_store_b8 off, v0, s32
327 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
328 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
329 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
330 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
331 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
332 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
333 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
334 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
335 ; GFX11-NEXT:    s_mov_b32 s33, s0
336 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
337 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
339 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i1_signext:
340 ; GFX10-SCRATCH:       ; %bb.0:
341 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
342 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
343 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
344 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
345 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
346 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
347 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
348 ; GFX10-SCRATCH-NEXT:    global_load_ubyte v0, v[0:1], off glc dlc
349 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
350 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
351 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
352 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i1_signext@abs32@hi
353 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i1_signext@abs32@lo
354 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
355 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
356 ; GFX10-SCRATCH-NEXT:    v_and_b32_e32 v0, 1, v0
357 ; GFX10-SCRATCH-NEXT:    scratch_store_byte off, v0, s32
358 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
359 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
360 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
361 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
362 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
363 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
364 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
365 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
366 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
367 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
368 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
369 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
370   %var = load volatile i1, ptr addrspace(1) undef
371   call amdgpu_gfx void @external_void_func_i1_signext(i1 signext%var)
372   ret void
375 define amdgpu_gfx void @test_call_external_void_func_i1_zeroext(i32) #0 {
376 ; GFX9-LABEL: test_call_external_void_func_i1_zeroext:
377 ; GFX9:       ; %bb.0:
378 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
379 ; GFX9-NEXT:    s_mov_b32 s34, s33
380 ; GFX9-NEXT:    s_mov_b32 s33, s32
381 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
382 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
383 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
384 ; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off glc
385 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
386 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
387 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
388 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
389 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i1_zeroext@abs32@hi
390 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i1_zeroext@abs32@lo
391 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
392 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
393 ; GFX9-NEXT:    buffer_store_byte v0, off, s[0:3], s32
394 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
395 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
396 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
397 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
398 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
399 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
400 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
401 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
402 ; GFX9-NEXT:    s_mov_b32 s33, s34
403 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
404 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
406 ; GFX10-LABEL: test_call_external_void_func_i1_zeroext:
407 ; GFX10:       ; %bb.0:
408 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
409 ; GFX10-NEXT:    s_mov_b32 s34, s33
410 ; GFX10-NEXT:    s_mov_b32 s33, s32
411 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
412 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
413 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
414 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
415 ; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off glc dlc
416 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
417 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
418 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
419 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i1_zeroext@abs32@hi
420 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i1_zeroext@abs32@lo
421 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
422 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
423 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
424 ; GFX10-NEXT:    buffer_store_byte v0, off, s[0:3], s32
425 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
426 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
427 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
428 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
429 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
430 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
431 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
432 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
433 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
434 ; GFX10-NEXT:    s_mov_b32 s33, s34
435 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
436 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
438 ; GFX11-LABEL: test_call_external_void_func_i1_zeroext:
439 ; GFX11:       ; %bb.0:
440 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
441 ; GFX11-NEXT:    s_mov_b32 s0, s33
442 ; GFX11-NEXT:    s_mov_b32 s33, s32
443 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
444 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
445 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
446 ; GFX11-NEXT:    global_load_u8 v0, v[0:1], off glc dlc
447 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
448 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
449 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
450 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i1_zeroext@abs32@hi
451 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i1_zeroext@abs32@lo
452 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
453 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
454 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
455 ; GFX11-NEXT:    scratch_store_b8 off, v0, s32
456 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
457 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
458 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
459 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
460 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
461 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
462 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
463 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
464 ; GFX11-NEXT:    s_mov_b32 s33, s0
465 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
466 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
468 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i1_zeroext:
469 ; GFX10-SCRATCH:       ; %bb.0:
470 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
471 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
472 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
473 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
474 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
475 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
476 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
477 ; GFX10-SCRATCH-NEXT:    global_load_ubyte v0, v[0:1], off glc dlc
478 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
479 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
480 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
481 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i1_zeroext@abs32@hi
482 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i1_zeroext@abs32@lo
483 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
484 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
485 ; GFX10-SCRATCH-NEXT:    v_and_b32_e32 v0, 1, v0
486 ; GFX10-SCRATCH-NEXT:    scratch_store_byte off, v0, s32
487 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
488 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
489 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
490 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
491 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
492 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
493 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
494 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
495 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
496 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
497 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
498 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
499   %var = load volatile i1, ptr addrspace(1) undef
500   call amdgpu_gfx void @external_void_func_i1_zeroext(i1 zeroext %var)
501   ret void
504 define amdgpu_gfx void @test_call_external_void_func_i8_imm(i32) #0 {
505 ; GFX9-LABEL: test_call_external_void_func_i8_imm:
506 ; GFX9:       ; %bb.0:
507 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
508 ; GFX9-NEXT:    s_mov_b32 s34, s33
509 ; GFX9-NEXT:    s_mov_b32 s33, s32
510 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
511 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
512 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
513 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
514 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
515 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i8@abs32@hi
516 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i8@abs32@lo
517 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x7b
518 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
519 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
520 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
521 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
522 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
523 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
524 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
525 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
526 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
527 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
528 ; GFX9-NEXT:    s_mov_b32 s33, s34
529 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
530 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
532 ; GFX10-LABEL: test_call_external_void_func_i8_imm:
533 ; GFX10:       ; %bb.0:
534 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
535 ; GFX10-NEXT:    s_mov_b32 s34, s33
536 ; GFX10-NEXT:    s_mov_b32 s33, s32
537 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
538 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
539 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
540 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
541 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
542 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x7b
543 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i8@abs32@hi
544 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i8@abs32@lo
545 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
546 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
547 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
548 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
549 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
550 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
551 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
552 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
553 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
554 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
555 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
556 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
557 ; GFX10-NEXT:    s_mov_b32 s33, s34
558 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
559 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
561 ; GFX11-LABEL: test_call_external_void_func_i8_imm:
562 ; GFX11:       ; %bb.0:
563 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
564 ; GFX11-NEXT:    s_mov_b32 s0, s33
565 ; GFX11-NEXT:    s_mov_b32 s33, s32
566 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
567 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
568 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
569 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
570 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0x7b
571 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i8@abs32@hi
572 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i8@abs32@lo
573 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
574 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
575 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
576 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
577 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
578 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
579 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
580 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
581 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
582 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
583 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
584 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
585 ; GFX11-NEXT:    s_mov_b32 s33, s0
586 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
587 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
589 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i8_imm:
590 ; GFX10-SCRATCH:       ; %bb.0:
591 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
592 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
593 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
594 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
595 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
596 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
597 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
598 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
599 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0x7b
600 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i8@abs32@hi
601 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i8@abs32@lo
602 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
603 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
604 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
605 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
606 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
607 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
608 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
609 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
610 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
611 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
612 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
613 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
614 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
615 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
616 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
617   call amdgpu_gfx void @external_void_func_i8(i8 123)
618   ret void
621 define amdgpu_gfx void @test_call_external_void_func_i8_signext(i32) #0 {
622 ; GFX9-LABEL: test_call_external_void_func_i8_signext:
623 ; GFX9:       ; %bb.0:
624 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
625 ; GFX9-NEXT:    s_mov_b32 s34, s33
626 ; GFX9-NEXT:    s_mov_b32 s33, s32
627 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
628 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
629 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
630 ; GFX9-NEXT:    global_load_sbyte v0, v[0:1], off glc
631 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
632 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
633 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
634 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i8_signext@abs32@hi
635 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i8_signext@abs32@lo
636 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
637 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
638 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
639 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
640 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
641 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
642 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
643 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
644 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
645 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
646 ; GFX9-NEXT:    s_mov_b32 s33, s34
647 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
648 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
650 ; GFX10-LABEL: test_call_external_void_func_i8_signext:
651 ; GFX10:       ; %bb.0:
652 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
653 ; GFX10-NEXT:    s_mov_b32 s34, s33
654 ; GFX10-NEXT:    s_mov_b32 s33, s32
655 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
656 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
657 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
658 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
659 ; GFX10-NEXT:    global_load_sbyte v0, v[0:1], off glc dlc
660 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
661 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
662 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i8_signext@abs32@hi
663 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i8_signext@abs32@lo
664 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
665 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
666 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
667 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
668 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
669 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
670 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
671 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
672 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
673 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
674 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
675 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
676 ; GFX10-NEXT:    s_mov_b32 s33, s34
677 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
678 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
680 ; GFX11-LABEL: test_call_external_void_func_i8_signext:
681 ; GFX11:       ; %bb.0:
682 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
683 ; GFX11-NEXT:    s_mov_b32 s0, s33
684 ; GFX11-NEXT:    s_mov_b32 s33, s32
685 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
686 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
687 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
688 ; GFX11-NEXT:    global_load_i8 v0, v[0:1], off glc dlc
689 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
690 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
691 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i8_signext@abs32@hi
692 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i8_signext@abs32@lo
693 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
694 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
695 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
696 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
697 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
698 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
699 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
700 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
701 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
702 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
703 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
704 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
705 ; GFX11-NEXT:    s_mov_b32 s33, s0
706 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
707 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
709 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i8_signext:
710 ; GFX10-SCRATCH:       ; %bb.0:
711 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
712 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
713 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
714 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
715 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
716 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
717 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
718 ; GFX10-SCRATCH-NEXT:    global_load_sbyte v0, v[0:1], off glc dlc
719 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
720 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
721 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i8_signext@abs32@hi
722 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i8_signext@abs32@lo
723 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
724 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
725 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
726 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
727 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
728 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
729 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
730 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
731 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
732 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
733 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
734 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
735 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
736 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
737 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
738   %var = load volatile i8, ptr addrspace(1) undef
739   call amdgpu_gfx void @external_void_func_i8_signext(i8 signext %var)
740   ret void
743 define amdgpu_gfx void @test_call_external_void_func_i8_zeroext(i32) #0 {
744 ; GFX9-LABEL: test_call_external_void_func_i8_zeroext:
745 ; GFX9:       ; %bb.0:
746 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
747 ; GFX9-NEXT:    s_mov_b32 s34, s33
748 ; GFX9-NEXT:    s_mov_b32 s33, s32
749 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
750 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
751 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
752 ; GFX9-NEXT:    global_load_ubyte v0, v[0:1], off glc
753 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
754 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
755 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
756 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i8_zeroext@abs32@hi
757 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i8_zeroext@abs32@lo
758 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
759 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
760 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
761 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
762 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
763 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
764 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
765 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
766 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
767 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
768 ; GFX9-NEXT:    s_mov_b32 s33, s34
769 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
770 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
772 ; GFX10-LABEL: test_call_external_void_func_i8_zeroext:
773 ; GFX10:       ; %bb.0:
774 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
775 ; GFX10-NEXT:    s_mov_b32 s34, s33
776 ; GFX10-NEXT:    s_mov_b32 s33, s32
777 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
778 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
779 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
780 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
781 ; GFX10-NEXT:    global_load_ubyte v0, v[0:1], off glc dlc
782 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
783 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
784 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i8_zeroext@abs32@hi
785 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i8_zeroext@abs32@lo
786 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
787 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
788 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
789 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
790 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
791 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
792 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
793 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
794 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
795 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
796 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
797 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
798 ; GFX10-NEXT:    s_mov_b32 s33, s34
799 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
800 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
802 ; GFX11-LABEL: test_call_external_void_func_i8_zeroext:
803 ; GFX11:       ; %bb.0:
804 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
805 ; GFX11-NEXT:    s_mov_b32 s0, s33
806 ; GFX11-NEXT:    s_mov_b32 s33, s32
807 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
808 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
809 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
810 ; GFX11-NEXT:    global_load_u8 v0, v[0:1], off glc dlc
811 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
812 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
813 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i8_zeroext@abs32@hi
814 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i8_zeroext@abs32@lo
815 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
816 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
817 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
818 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
819 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
820 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
821 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
822 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
823 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
824 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
825 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
826 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
827 ; GFX11-NEXT:    s_mov_b32 s33, s0
828 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
829 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
831 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i8_zeroext:
832 ; GFX10-SCRATCH:       ; %bb.0:
833 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
834 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
835 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
836 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
837 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
838 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
839 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
840 ; GFX10-SCRATCH-NEXT:    global_load_ubyte v0, v[0:1], off glc dlc
841 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
842 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
843 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i8_zeroext@abs32@hi
844 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i8_zeroext@abs32@lo
845 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
846 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
847 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
848 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
849 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
850 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
851 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
852 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
853 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
854 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
855 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
856 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
857 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
858 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
859 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
860   %var = load volatile i8, ptr addrspace(1) undef
861   call amdgpu_gfx void @external_void_func_i8_zeroext(i8 zeroext %var)
862   ret void
865 define amdgpu_gfx void @test_call_external_void_func_i16_imm() #0 {
866 ; GFX9-LABEL: test_call_external_void_func_i16_imm:
867 ; GFX9:       ; %bb.0:
868 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
869 ; GFX9-NEXT:    s_mov_b32 s34, s33
870 ; GFX9-NEXT:    s_mov_b32 s33, s32
871 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
872 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
873 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
874 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
875 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
876 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i16@abs32@hi
877 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i16@abs32@lo
878 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x7b
879 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
880 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
881 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
882 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
883 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
884 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
885 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
886 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
887 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
888 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
889 ; GFX9-NEXT:    s_mov_b32 s33, s34
890 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
891 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
893 ; GFX10-LABEL: test_call_external_void_func_i16_imm:
894 ; GFX10:       ; %bb.0:
895 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
896 ; GFX10-NEXT:    s_mov_b32 s34, s33
897 ; GFX10-NEXT:    s_mov_b32 s33, s32
898 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
899 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
900 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
901 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
902 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
903 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x7b
904 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i16@abs32@hi
905 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i16@abs32@lo
906 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
907 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
908 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
909 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
910 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
911 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
912 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
913 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
914 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
915 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
916 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
917 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
918 ; GFX10-NEXT:    s_mov_b32 s33, s34
919 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
920 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
922 ; GFX11-LABEL: test_call_external_void_func_i16_imm:
923 ; GFX11:       ; %bb.0:
924 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
925 ; GFX11-NEXT:    s_mov_b32 s0, s33
926 ; GFX11-NEXT:    s_mov_b32 s33, s32
927 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
928 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
929 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
930 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
931 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0x7b
932 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i16@abs32@hi
933 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i16@abs32@lo
934 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
935 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
936 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
937 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
938 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
939 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
940 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
941 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
942 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
943 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
944 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
945 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
946 ; GFX11-NEXT:    s_mov_b32 s33, s0
947 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
948 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
950 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i16_imm:
951 ; GFX10-SCRATCH:       ; %bb.0:
952 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
953 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
954 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
955 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
956 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
957 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
958 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
959 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
960 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0x7b
961 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i16@abs32@hi
962 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i16@abs32@lo
963 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
964 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
965 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
966 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
967 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
968 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
969 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
970 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
971 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
972 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
973 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
974 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
975 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
976 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
977 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
978   call amdgpu_gfx void @external_void_func_i16(i16 123)
979   ret void
982 define amdgpu_gfx void @test_call_external_void_func_i16_signext(i32) #0 {
983 ; GFX9-LABEL: test_call_external_void_func_i16_signext:
984 ; GFX9:       ; %bb.0:
985 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
986 ; GFX9-NEXT:    s_mov_b32 s34, s33
987 ; GFX9-NEXT:    s_mov_b32 s33, s32
988 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
989 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
990 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
991 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off glc
992 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
993 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
994 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
995 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i16_signext@abs32@hi
996 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i16_signext@abs32@lo
997 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
998 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
999 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1000 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
1001 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
1002 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
1003 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1004 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1005 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1006 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1007 ; GFX9-NEXT:    s_mov_b32 s33, s34
1008 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1009 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1011 ; GFX10-LABEL: test_call_external_void_func_i16_signext:
1012 ; GFX10:       ; %bb.0:
1013 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1014 ; GFX10-NEXT:    s_mov_b32 s34, s33
1015 ; GFX10-NEXT:    s_mov_b32 s33, s32
1016 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1017 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1018 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1019 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1020 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off glc dlc
1021 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1022 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
1023 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i16_signext@abs32@hi
1024 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i16_signext@abs32@lo
1025 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1026 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
1027 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
1028 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1029 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
1030 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
1031 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
1032 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1033 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1034 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1035 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1036 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1037 ; GFX10-NEXT:    s_mov_b32 s33, s34
1038 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1039 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1041 ; GFX11-LABEL: test_call_external_void_func_i16_signext:
1042 ; GFX11:       ; %bb.0:
1043 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1044 ; GFX11-NEXT:    s_mov_b32 s0, s33
1045 ; GFX11-NEXT:    s_mov_b32 s33, s32
1046 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1047 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
1048 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1049 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off glc dlc
1050 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1051 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
1052 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i16_signext@abs32@hi
1053 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i16_signext@abs32@lo
1054 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
1055 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
1056 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
1057 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1058 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1059 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
1060 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
1061 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
1062 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1063 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
1064 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1065 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
1066 ; GFX11-NEXT:    s_mov_b32 s33, s0
1067 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1068 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1070 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i16_signext:
1071 ; GFX10-SCRATCH:       ; %bb.0:
1072 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1073 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
1074 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
1075 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1076 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
1077 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1078 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1079 ; GFX10-SCRATCH-NEXT:    global_load_ushort v0, v[0:1], off glc dlc
1080 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1081 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
1082 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i16_signext@abs32@hi
1083 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i16_signext@abs32@lo
1084 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
1085 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
1086 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
1087 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1088 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
1089 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
1090 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
1091 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1092 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
1093 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1094 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1095 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
1096 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
1097 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1098 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
1099   %var = load volatile i16, ptr addrspace(1) undef
1100   call amdgpu_gfx void @external_void_func_i16_signext(i16 signext %var)
1101   ret void
1104 define amdgpu_gfx void @test_call_external_void_func_i16_zeroext(i32) #0 {
1105 ; GFX9-LABEL: test_call_external_void_func_i16_zeroext:
1106 ; GFX9:       ; %bb.0:
1107 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1108 ; GFX9-NEXT:    s_mov_b32 s34, s33
1109 ; GFX9-NEXT:    s_mov_b32 s33, s32
1110 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1111 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1112 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1113 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off glc
1114 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1115 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
1116 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
1117 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i16_zeroext@abs32@hi
1118 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i16_zeroext@abs32@lo
1119 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1120 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
1121 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1122 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
1123 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
1124 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
1125 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1126 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1127 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1128 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1129 ; GFX9-NEXT:    s_mov_b32 s33, s34
1130 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1131 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1133 ; GFX10-LABEL: test_call_external_void_func_i16_zeroext:
1134 ; GFX10:       ; %bb.0:
1135 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1136 ; GFX10-NEXT:    s_mov_b32 s34, s33
1137 ; GFX10-NEXT:    s_mov_b32 s33, s32
1138 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1139 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1140 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1141 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1142 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off glc dlc
1143 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1144 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
1145 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i16_zeroext@abs32@hi
1146 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i16_zeroext@abs32@lo
1147 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1148 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
1149 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
1150 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1151 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
1152 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
1153 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
1154 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1155 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1156 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1157 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1158 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1159 ; GFX10-NEXT:    s_mov_b32 s33, s34
1160 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1161 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1163 ; GFX11-LABEL: test_call_external_void_func_i16_zeroext:
1164 ; GFX11:       ; %bb.0:
1165 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1166 ; GFX11-NEXT:    s_mov_b32 s0, s33
1167 ; GFX11-NEXT:    s_mov_b32 s33, s32
1168 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1169 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
1170 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1171 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off glc dlc
1172 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1173 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
1174 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i16_zeroext@abs32@hi
1175 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i16_zeroext@abs32@lo
1176 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
1177 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
1178 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
1179 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1180 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1181 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
1182 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
1183 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
1184 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1185 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
1186 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1187 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
1188 ; GFX11-NEXT:    s_mov_b32 s33, s0
1189 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1190 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1192 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i16_zeroext:
1193 ; GFX10-SCRATCH:       ; %bb.0:
1194 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1195 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
1196 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
1197 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1198 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
1199 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1200 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1201 ; GFX10-SCRATCH-NEXT:    global_load_ushort v0, v[0:1], off glc dlc
1202 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1203 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
1204 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i16_zeroext@abs32@hi
1205 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i16_zeroext@abs32@lo
1206 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
1207 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
1208 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
1209 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1210 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
1211 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
1212 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
1213 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1214 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
1215 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1216 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1217 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
1218 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
1219 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1220 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
1221   %var = load volatile i16, ptr addrspace(1) undef
1222   call amdgpu_gfx void @external_void_func_i16_zeroext(i16 zeroext %var)
1223   ret void
1226 define amdgpu_gfx void @test_call_external_void_func_i32_imm(i32) #0 {
1227 ; GFX9-LABEL: test_call_external_void_func_i32_imm:
1228 ; GFX9:       ; %bb.0:
1229 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1230 ; GFX9-NEXT:    s_mov_b32 s34, s33
1231 ; GFX9-NEXT:    s_mov_b32 s33, s32
1232 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1233 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1234 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1235 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
1236 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
1237 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i32@abs32@hi
1238 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i32@abs32@lo
1239 ; GFX9-NEXT:    v_mov_b32_e32 v0, 42
1240 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1241 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
1242 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1243 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
1244 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
1245 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
1246 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1247 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1248 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1249 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1250 ; GFX9-NEXT:    s_mov_b32 s33, s34
1251 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1252 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1254 ; GFX10-LABEL: test_call_external_void_func_i32_imm:
1255 ; GFX10:       ; %bb.0:
1256 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1257 ; GFX10-NEXT:    s_mov_b32 s34, s33
1258 ; GFX10-NEXT:    s_mov_b32 s33, s32
1259 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1260 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1261 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1262 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1263 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
1264 ; GFX10-NEXT:    v_mov_b32_e32 v0, 42
1265 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i32@abs32@hi
1266 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i32@abs32@lo
1267 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1268 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
1269 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
1270 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1271 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
1272 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
1273 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
1274 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1275 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1276 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1277 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1278 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1279 ; GFX10-NEXT:    s_mov_b32 s33, s34
1280 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1281 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1283 ; GFX11-LABEL: test_call_external_void_func_i32_imm:
1284 ; GFX11:       ; %bb.0:
1285 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1286 ; GFX11-NEXT:    s_mov_b32 s0, s33
1287 ; GFX11-NEXT:    s_mov_b32 s33, s32
1288 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1289 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
1290 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1291 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
1292 ; GFX11-NEXT:    v_mov_b32_e32 v0, 42
1293 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i32@abs32@hi
1294 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i32@abs32@lo
1295 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
1296 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
1297 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
1298 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1299 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1300 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
1301 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
1302 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
1303 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1304 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
1305 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1306 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
1307 ; GFX11-NEXT:    s_mov_b32 s33, s0
1308 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1309 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1311 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i32_imm:
1312 ; GFX10-SCRATCH:       ; %bb.0:
1313 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1314 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
1315 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
1316 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1317 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
1318 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1319 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1320 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
1321 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 42
1322 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i32@abs32@hi
1323 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i32@abs32@lo
1324 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
1325 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
1326 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
1327 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1328 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
1329 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
1330 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
1331 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1332 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
1333 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1334 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1335 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
1336 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
1337 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1338 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
1339   call amdgpu_gfx void @external_void_func_i32(i32 42)
1340   ret void
1343 define amdgpu_gfx void @test_call_external_void_func_i64_imm() #0 {
1344 ; GFX9-LABEL: test_call_external_void_func_i64_imm:
1345 ; GFX9:       ; %bb.0:
1346 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1347 ; GFX9-NEXT:    s_mov_b32 s34, s33
1348 ; GFX9-NEXT:    s_mov_b32 s33, s32
1349 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1350 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1351 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1352 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
1353 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
1354 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i64@abs32@hi
1355 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i64@abs32@lo
1356 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x7b
1357 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
1358 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1359 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
1360 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1361 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
1362 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
1363 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
1364 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1365 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1366 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1367 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1368 ; GFX9-NEXT:    s_mov_b32 s33, s34
1369 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1370 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1372 ; GFX10-LABEL: test_call_external_void_func_i64_imm:
1373 ; GFX10:       ; %bb.0:
1374 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1375 ; GFX10-NEXT:    s_mov_b32 s34, s33
1376 ; GFX10-NEXT:    s_mov_b32 s33, s32
1377 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1378 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1379 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1380 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1381 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
1382 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x7b
1383 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
1384 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i64@abs32@hi
1385 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i64@abs32@lo
1386 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
1387 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1388 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
1389 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1390 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
1391 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
1392 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
1393 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1394 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1395 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1396 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1397 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1398 ; GFX10-NEXT:    s_mov_b32 s33, s34
1399 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1400 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1402 ; GFX11-LABEL: test_call_external_void_func_i64_imm:
1403 ; GFX11:       ; %bb.0:
1404 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1405 ; GFX11-NEXT:    s_mov_b32 s0, s33
1406 ; GFX11-NEXT:    s_mov_b32 s33, s32
1407 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1408 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
1409 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1410 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
1411 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0x7b :: v_dual_mov_b32 v1, 0
1412 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i64@abs32@hi
1413 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i64@abs32@lo
1414 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
1415 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
1416 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
1417 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1418 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1419 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
1420 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
1421 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
1422 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1423 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
1424 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1425 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
1426 ; GFX11-NEXT:    s_mov_b32 s33, s0
1427 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1428 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1430 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i64_imm:
1431 ; GFX10-SCRATCH:       ; %bb.0:
1432 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1433 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
1434 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
1435 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1436 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
1437 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1438 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1439 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
1440 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0x7b
1441 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
1442 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i64@abs32@hi
1443 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i64@abs32@lo
1444 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
1445 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
1446 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
1447 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1448 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
1449 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
1450 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
1451 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1452 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
1453 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1454 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1455 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
1456 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
1457 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1458 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
1459   call amdgpu_gfx void @external_void_func_i64(i64 123)
1460   ret void
1463 define amdgpu_gfx void @test_call_external_void_func_v2i64() #0 {
1464 ; GFX9-LABEL: test_call_external_void_func_v2i64:
1465 ; GFX9:       ; %bb.0:
1466 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1467 ; GFX9-NEXT:    s_mov_b32 s34, s33
1468 ; GFX9-NEXT:    s_mov_b32 s33, s32
1469 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1470 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1471 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1472 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
1473 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
1474 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1475 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
1476 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
1477 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i64@abs32@hi
1478 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i64@abs32@lo
1479 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1480 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
1481 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1482 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
1483 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
1484 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
1485 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1486 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1487 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1488 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1489 ; GFX9-NEXT:    s_mov_b32 s33, s34
1490 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1491 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1493 ; GFX10-LABEL: test_call_external_void_func_v2i64:
1494 ; GFX10:       ; %bb.0:
1495 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1496 ; GFX10-NEXT:    s_mov_b32 s34, s33
1497 ; GFX10-NEXT:    s_mov_b32 s33, s32
1498 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1499 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1500 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1501 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1502 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
1503 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
1504 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
1505 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i64@abs32@hi
1506 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i64@abs32@lo
1507 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1508 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1509 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
1510 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
1511 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1512 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
1513 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
1514 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
1515 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1516 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1517 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1518 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1519 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1520 ; GFX10-NEXT:    s_mov_b32 s33, s34
1521 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1522 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1524 ; GFX11-LABEL: test_call_external_void_func_v2i64:
1525 ; GFX11:       ; %bb.0:
1526 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1527 ; GFX11-NEXT:    s_mov_b32 s0, s33
1528 ; GFX11-NEXT:    s_mov_b32 s33, s32
1529 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1530 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
1531 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1532 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
1533 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
1534 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
1535 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i64@abs32@hi
1536 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i64@abs32@lo
1537 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
1538 ; GFX11-NEXT:    global_load_b128 v[0:3], v[0:1], off
1539 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
1540 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
1541 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1542 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1543 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
1544 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
1545 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
1546 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1547 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
1548 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1549 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
1550 ; GFX11-NEXT:    s_mov_b32 s33, s0
1551 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1552 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1554 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i64:
1555 ; GFX10-SCRATCH:       ; %bb.0:
1556 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1557 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
1558 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
1559 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1560 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
1561 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1562 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1563 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
1564 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
1565 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
1566 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i64@abs32@hi
1567 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i64@abs32@lo
1568 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
1569 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1570 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
1571 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
1572 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1573 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
1574 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
1575 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
1576 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1577 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
1578 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1579 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1580 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
1581 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
1582 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1583 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
1584   %val = load <2 x i64>, ptr addrspace(1) null
1585   call amdgpu_gfx void @external_void_func_v2i64(<2 x i64> %val)
1586   ret void
1589 define amdgpu_gfx void @test_call_external_void_func_v2i64_imm() #0 {
1590 ; GFX9-LABEL: test_call_external_void_func_v2i64_imm:
1591 ; GFX9:       ; %bb.0:
1592 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1593 ; GFX9-NEXT:    s_mov_b32 s34, s33
1594 ; GFX9-NEXT:    s_mov_b32 s33, s32
1595 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1596 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1597 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1598 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
1599 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
1600 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i64@abs32@hi
1601 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i64@abs32@lo
1602 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1
1603 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2
1604 ; GFX9-NEXT:    v_mov_b32_e32 v2, 3
1605 ; GFX9-NEXT:    v_mov_b32_e32 v3, 4
1606 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1607 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
1608 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1609 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
1610 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
1611 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
1612 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1613 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1614 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1615 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1616 ; GFX9-NEXT:    s_mov_b32 s33, s34
1617 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1618 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1620 ; GFX10-LABEL: test_call_external_void_func_v2i64_imm:
1621 ; GFX10:       ; %bb.0:
1622 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1623 ; GFX10-NEXT:    s_mov_b32 s34, s33
1624 ; GFX10-NEXT:    s_mov_b32 s33, s32
1625 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1626 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1627 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1628 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1629 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
1630 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1
1631 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2
1632 ; GFX10-NEXT:    v_mov_b32_e32 v2, 3
1633 ; GFX10-NEXT:    v_mov_b32_e32 v3, 4
1634 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
1635 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i64@abs32@hi
1636 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i64@abs32@lo
1637 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1638 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
1639 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1640 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
1641 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
1642 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
1643 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1644 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1645 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1646 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1647 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1648 ; GFX10-NEXT:    s_mov_b32 s33, s34
1649 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1650 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1652 ; GFX11-LABEL: test_call_external_void_func_v2i64_imm:
1653 ; GFX11:       ; %bb.0:
1654 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1655 ; GFX11-NEXT:    s_mov_b32 s0, s33
1656 ; GFX11-NEXT:    s_mov_b32 s33, s32
1657 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1658 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
1659 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1660 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
1661 ; GFX11-NEXT:    v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 2
1662 ; GFX11-NEXT:    v_dual_mov_b32 v2, 3 :: v_dual_mov_b32 v3, 4
1663 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
1664 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i64@abs32@hi
1665 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i64@abs32@lo
1666 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
1667 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
1668 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1669 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1670 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
1671 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
1672 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
1673 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1674 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
1675 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1676 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
1677 ; GFX11-NEXT:    s_mov_b32 s33, s0
1678 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1679 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1681 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i64_imm:
1682 ; GFX10-SCRATCH:       ; %bb.0:
1683 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1684 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
1685 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
1686 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1687 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
1688 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1689 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1690 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
1691 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1
1692 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2
1693 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 3
1694 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 4
1695 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
1696 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i64@abs32@hi
1697 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i64@abs32@lo
1698 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
1699 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
1700 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1701 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
1702 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
1703 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
1704 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1705 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
1706 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1707 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1708 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
1709 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
1710 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1711 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
1712   call amdgpu_gfx void @external_void_func_v2i64(<2 x i64> <i64 8589934593, i64 17179869187>)
1713   ret void
1716 define amdgpu_gfx void @test_call_external_void_func_v3i64() #0 {
1717 ; GFX9-LABEL: test_call_external_void_func_v3i64:
1718 ; GFX9:       ; %bb.0:
1719 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1720 ; GFX9-NEXT:    s_mov_b32 s34, s33
1721 ; GFX9-NEXT:    s_mov_b32 s33, s32
1722 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1723 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1724 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1725 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
1726 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
1727 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1728 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
1729 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
1730 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i64@abs32@hi
1731 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i64@abs32@lo
1732 ; GFX9-NEXT:    v_mov_b32_e32 v4, 1
1733 ; GFX9-NEXT:    v_mov_b32_e32 v5, 2
1734 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1735 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
1736 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1737 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
1738 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
1739 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
1740 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1741 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1742 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1743 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1744 ; GFX9-NEXT:    s_mov_b32 s33, s34
1745 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1746 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1748 ; GFX10-LABEL: test_call_external_void_func_v3i64:
1749 ; GFX10:       ; %bb.0:
1750 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1751 ; GFX10-NEXT:    s_mov_b32 s34, s33
1752 ; GFX10-NEXT:    s_mov_b32 s33, s32
1753 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1754 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1755 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1756 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1757 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
1758 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
1759 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
1760 ; GFX10-NEXT:    v_mov_b32_e32 v4, 1
1761 ; GFX10-NEXT:    v_mov_b32_e32 v5, 2
1762 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i64@abs32@hi
1763 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1764 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
1765 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i64@abs32@lo
1766 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1767 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
1768 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1769 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
1770 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
1771 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
1772 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1773 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1774 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1775 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1776 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1777 ; GFX10-NEXT:    s_mov_b32 s33, s34
1778 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1779 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1781 ; GFX11-LABEL: test_call_external_void_func_v3i64:
1782 ; GFX11:       ; %bb.0:
1783 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1784 ; GFX11-NEXT:    s_mov_b32 s0, s33
1785 ; GFX11-NEXT:    s_mov_b32 s33, s32
1786 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1787 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
1788 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1789 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v5, 2
1790 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v4, 1
1791 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
1792 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i64@abs32@hi
1793 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i64@abs32@lo
1794 ; GFX11-NEXT:    global_load_b128 v[0:3], v[0:1], off
1795 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
1796 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
1797 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
1798 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1799 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1800 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
1801 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
1802 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
1803 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1804 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
1805 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1806 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
1807 ; GFX11-NEXT:    s_mov_b32 s33, s0
1808 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1809 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1811 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i64:
1812 ; GFX10-SCRATCH:       ; %bb.0:
1813 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1814 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
1815 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
1816 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1817 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
1818 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1819 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1820 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
1821 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
1822 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
1823 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 1
1824 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 2
1825 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i64@abs32@hi
1826 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1827 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
1828 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i64@abs32@lo
1829 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
1830 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
1831 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1832 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
1833 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
1834 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
1835 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1836 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
1837 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1838 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1839 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
1840 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
1841 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1842 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
1843   %load = load <2 x i64>, ptr addrspace(1) null
1844   %val = shufflevector <2 x i64> %load, <2 x i64> <i64 8589934593, i64 undef>, <3 x i32> <i32 0, i32 1, i32 2>
1846   call amdgpu_gfx void @external_void_func_v3i64(<3 x i64> %val)
1847   ret void
1850 define amdgpu_gfx void @test_call_external_void_func_v4i64() #0 {
1851 ; GFX9-LABEL: test_call_external_void_func_v4i64:
1852 ; GFX9:       ; %bb.0:
1853 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1854 ; GFX9-NEXT:    s_mov_b32 s34, s33
1855 ; GFX9-NEXT:    s_mov_b32 s33, s32
1856 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1857 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1858 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1859 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
1860 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
1861 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1862 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
1863 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
1864 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i64@abs32@hi
1865 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i64@abs32@lo
1866 ; GFX9-NEXT:    v_mov_b32_e32 v4, 1
1867 ; GFX9-NEXT:    v_mov_b32_e32 v5, 2
1868 ; GFX9-NEXT:    v_mov_b32_e32 v6, 3
1869 ; GFX9-NEXT:    v_mov_b32_e32 v7, 4
1870 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1871 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
1872 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1873 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
1874 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
1875 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
1876 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1877 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1878 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1879 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1880 ; GFX9-NEXT:    s_mov_b32 s33, s34
1881 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1882 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1884 ; GFX10-LABEL: test_call_external_void_func_v4i64:
1885 ; GFX10:       ; %bb.0:
1886 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1887 ; GFX10-NEXT:    s_mov_b32 s34, s33
1888 ; GFX10-NEXT:    s_mov_b32 s33, s32
1889 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1890 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1891 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1892 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1893 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
1894 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
1895 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
1896 ; GFX10-NEXT:    v_mov_b32_e32 v4, 1
1897 ; GFX10-NEXT:    v_mov_b32_e32 v5, 2
1898 ; GFX10-NEXT:    v_mov_b32_e32 v6, 3
1899 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1900 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
1901 ; GFX10-NEXT:    v_mov_b32_e32 v7, 4
1902 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i64@abs32@hi
1903 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i64@abs32@lo
1904 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1905 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
1906 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
1907 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
1908 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
1909 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
1910 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
1911 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
1912 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1913 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
1914 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1915 ; GFX10-NEXT:    s_mov_b32 s33, s34
1916 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1917 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1919 ; GFX11-LABEL: test_call_external_void_func_v4i64:
1920 ; GFX11:       ; %bb.0:
1921 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1922 ; GFX11-NEXT:    s_mov_b32 s0, s33
1923 ; GFX11-NEXT:    s_mov_b32 s33, s32
1924 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1925 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
1926 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1927 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v5, 2
1928 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v4, 1
1929 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
1930 ; GFX11-NEXT:    v_dual_mov_b32 v6, 3 :: v_dual_mov_b32 v7, 4
1931 ; GFX11-NEXT:    global_load_b128 v[0:3], v[0:1], off
1932 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i64@abs32@hi
1933 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
1934 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i64@abs32@lo
1935 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
1936 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
1937 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1938 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1939 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
1940 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
1941 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
1942 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
1943 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
1944 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1945 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
1946 ; GFX11-NEXT:    s_mov_b32 s33, s0
1947 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1948 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1950 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i64:
1951 ; GFX10-SCRATCH:       ; %bb.0:
1952 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1953 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
1954 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
1955 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1956 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
1957 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1958 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1959 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
1960 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
1961 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
1962 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 1
1963 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 2
1964 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v6, 3
1965 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1966 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
1967 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v7, 4
1968 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i64@abs32@hi
1969 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i64@abs32@lo
1970 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
1971 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
1972 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
1973 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
1974 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
1975 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
1976 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
1977 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
1978 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
1979 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
1980 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
1981 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
1982 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
1983 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
1984   %load = load <2 x i64>, ptr addrspace(1) null
1985   %val = shufflevector <2 x i64> %load, <2 x i64> <i64 8589934593, i64 17179869187>, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1986   call amdgpu_gfx void @external_void_func_v4i64(<4 x i64> %val)
1987   ret void
1990 define amdgpu_gfx void @test_call_external_void_func_f16_imm() #0 {
1991 ; GFX9-LABEL: test_call_external_void_func_f16_imm:
1992 ; GFX9:       ; %bb.0:
1993 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1994 ; GFX9-NEXT:    s_mov_b32 s34, s33
1995 ; GFX9-NEXT:    s_mov_b32 s33, s32
1996 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
1997 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
1998 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
1999 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2000 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2001 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_f16@abs32@hi
2002 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_f16@abs32@lo
2003 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x4400
2004 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2005 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2006 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2007 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
2008 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
2009 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
2010 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2011 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2012 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2013 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2014 ; GFX9-NEXT:    s_mov_b32 s33, s34
2015 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2016 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2018 ; GFX10-LABEL: test_call_external_void_func_f16_imm:
2019 ; GFX10:       ; %bb.0:
2020 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2021 ; GFX10-NEXT:    s_mov_b32 s34, s33
2022 ; GFX10-NEXT:    s_mov_b32 s33, s32
2023 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2024 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2025 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2026 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2027 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
2028 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x4400
2029 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_f16@abs32@hi
2030 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_f16@abs32@lo
2031 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2032 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
2033 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
2034 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2035 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
2036 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
2037 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
2038 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2039 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2040 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2041 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2042 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2043 ; GFX10-NEXT:    s_mov_b32 s33, s34
2044 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2045 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2047 ; GFX11-LABEL: test_call_external_void_func_f16_imm:
2048 ; GFX11:       ; %bb.0:
2049 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2050 ; GFX11-NEXT:    s_mov_b32 s0, s33
2051 ; GFX11-NEXT:    s_mov_b32 s33, s32
2052 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2053 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
2054 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2055 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
2056 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0x4400
2057 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_f16@abs32@hi
2058 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_f16@abs32@lo
2059 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
2060 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
2061 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
2062 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2063 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2064 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
2065 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
2066 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
2067 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2068 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
2069 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2070 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
2071 ; GFX11-NEXT:    s_mov_b32 s33, s0
2072 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2073 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2075 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_f16_imm:
2076 ; GFX10-SCRATCH:       ; %bb.0:
2077 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2078 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
2079 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
2080 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2081 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
2082 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2083 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2084 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
2085 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0x4400
2086 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_f16@abs32@hi
2087 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_f16@abs32@lo
2088 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
2089 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
2090 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
2091 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2092 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
2093 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
2094 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
2095 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2096 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
2097 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2098 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2099 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
2100 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
2101 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
2102 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
2103   call amdgpu_gfx void @external_void_func_f16(half 4.0)
2104   ret void
2107 define amdgpu_gfx void @test_call_external_void_func_f32_imm() #0 {
2108 ; GFX9-LABEL: test_call_external_void_func_f32_imm:
2109 ; GFX9:       ; %bb.0:
2110 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2111 ; GFX9-NEXT:    s_mov_b32 s34, s33
2112 ; GFX9-NEXT:    s_mov_b32 s33, s32
2113 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2114 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2115 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2116 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2117 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2118 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_f32@abs32@hi
2119 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_f32@abs32@lo
2120 ; GFX9-NEXT:    v_mov_b32_e32 v0, 4.0
2121 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2122 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2123 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2124 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
2125 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
2126 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
2127 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2128 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2129 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2130 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2131 ; GFX9-NEXT:    s_mov_b32 s33, s34
2132 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2133 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2135 ; GFX10-LABEL: test_call_external_void_func_f32_imm:
2136 ; GFX10:       ; %bb.0:
2137 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2138 ; GFX10-NEXT:    s_mov_b32 s34, s33
2139 ; GFX10-NEXT:    s_mov_b32 s33, s32
2140 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2141 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2142 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2143 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2144 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
2145 ; GFX10-NEXT:    v_mov_b32_e32 v0, 4.0
2146 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_f32@abs32@hi
2147 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_f32@abs32@lo
2148 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2149 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
2150 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
2151 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2152 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
2153 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
2154 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
2155 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2156 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2157 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2158 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2159 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2160 ; GFX10-NEXT:    s_mov_b32 s33, s34
2161 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2162 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2164 ; GFX11-LABEL: test_call_external_void_func_f32_imm:
2165 ; GFX11:       ; %bb.0:
2166 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2167 ; GFX11-NEXT:    s_mov_b32 s0, s33
2168 ; GFX11-NEXT:    s_mov_b32 s33, s32
2169 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2170 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
2171 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2172 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
2173 ; GFX11-NEXT:    v_mov_b32_e32 v0, 4.0
2174 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_f32@abs32@hi
2175 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_f32@abs32@lo
2176 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
2177 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
2178 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
2179 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2180 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2181 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
2182 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
2183 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
2184 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2185 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
2186 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2187 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
2188 ; GFX11-NEXT:    s_mov_b32 s33, s0
2189 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2190 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2192 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_f32_imm:
2193 ; GFX10-SCRATCH:       ; %bb.0:
2194 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2195 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
2196 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
2197 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2198 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
2199 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2200 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2201 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
2202 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 4.0
2203 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_f32@abs32@hi
2204 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_f32@abs32@lo
2205 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
2206 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
2207 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
2208 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2209 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
2210 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
2211 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
2212 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2213 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
2214 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2215 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2216 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
2217 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
2218 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
2219 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
2220   call amdgpu_gfx void @external_void_func_f32(float 4.0)
2221   ret void
2224 define amdgpu_gfx void @test_call_external_void_func_v2f32_imm() #0 {
2225 ; GFX9-LABEL: test_call_external_void_func_v2f32_imm:
2226 ; GFX9:       ; %bb.0:
2227 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2228 ; GFX9-NEXT:    s_mov_b32 s34, s33
2229 ; GFX9-NEXT:    s_mov_b32 s33, s32
2230 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2231 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2232 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2233 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2234 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2235 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2f32@abs32@hi
2236 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2f32@abs32@lo
2237 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1.0
2238 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2.0
2239 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2240 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2241 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2242 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
2243 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
2244 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
2245 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2246 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2247 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2248 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2249 ; GFX9-NEXT:    s_mov_b32 s33, s34
2250 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2251 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2253 ; GFX10-LABEL: test_call_external_void_func_v2f32_imm:
2254 ; GFX10:       ; %bb.0:
2255 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2256 ; GFX10-NEXT:    s_mov_b32 s34, s33
2257 ; GFX10-NEXT:    s_mov_b32 s33, s32
2258 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2259 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2260 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2261 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2262 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
2263 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1.0
2264 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2.0
2265 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2f32@abs32@hi
2266 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2f32@abs32@lo
2267 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
2268 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2269 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
2270 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2271 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
2272 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
2273 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
2274 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2275 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2276 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2277 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2278 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2279 ; GFX10-NEXT:    s_mov_b32 s33, s34
2280 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2281 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2283 ; GFX11-LABEL: test_call_external_void_func_v2f32_imm:
2284 ; GFX11:       ; %bb.0:
2285 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2286 ; GFX11-NEXT:    s_mov_b32 s0, s33
2287 ; GFX11-NEXT:    s_mov_b32 s33, s32
2288 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2289 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
2290 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2291 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
2292 ; GFX11-NEXT:    v_dual_mov_b32 v0, 1.0 :: v_dual_mov_b32 v1, 2.0
2293 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2f32@abs32@hi
2294 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2f32@abs32@lo
2295 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
2296 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
2297 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
2298 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2299 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2300 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
2301 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
2302 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
2303 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2304 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
2305 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2306 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
2307 ; GFX11-NEXT:    s_mov_b32 s33, s0
2308 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2309 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2311 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2f32_imm:
2312 ; GFX10-SCRATCH:       ; %bb.0:
2313 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2314 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
2315 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
2316 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2317 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
2318 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2319 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2320 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
2321 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1.0
2322 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2.0
2323 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2f32@abs32@hi
2324 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2f32@abs32@lo
2325 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
2326 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
2327 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
2328 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2329 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
2330 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
2331 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
2332 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2333 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
2334 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2335 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2336 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
2337 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
2338 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
2339 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
2340   call amdgpu_gfx void @external_void_func_v2f32(<2 x float> <float 1.0, float 2.0>)
2341   ret void
2344 define amdgpu_gfx void @test_call_external_void_func_v3f32_imm() #0 {
2345 ; GFX9-LABEL: test_call_external_void_func_v3f32_imm:
2346 ; GFX9:       ; %bb.0:
2347 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2348 ; GFX9-NEXT:    s_mov_b32 s34, s33
2349 ; GFX9-NEXT:    s_mov_b32 s33, s32
2350 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2351 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2352 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2353 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2354 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2355 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3f32@abs32@hi
2356 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3f32@abs32@lo
2357 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1.0
2358 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2.0
2359 ; GFX9-NEXT:    v_mov_b32_e32 v2, 4.0
2360 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2361 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2362 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2363 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
2364 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
2365 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
2366 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2367 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2368 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2369 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2370 ; GFX9-NEXT:    s_mov_b32 s33, s34
2371 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2372 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2374 ; GFX10-LABEL: test_call_external_void_func_v3f32_imm:
2375 ; GFX10:       ; %bb.0:
2376 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2377 ; GFX10-NEXT:    s_mov_b32 s34, s33
2378 ; GFX10-NEXT:    s_mov_b32 s33, s32
2379 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2380 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2381 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2382 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2383 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
2384 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1.0
2385 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2.0
2386 ; GFX10-NEXT:    v_mov_b32_e32 v2, 4.0
2387 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3f32@abs32@hi
2388 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
2389 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3f32@abs32@lo
2390 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2391 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
2392 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2393 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
2394 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
2395 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
2396 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2397 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2398 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2399 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2400 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2401 ; GFX10-NEXT:    s_mov_b32 s33, s34
2402 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2403 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2405 ; GFX11-LABEL: test_call_external_void_func_v3f32_imm:
2406 ; GFX11:       ; %bb.0:
2407 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2408 ; GFX11-NEXT:    s_mov_b32 s0, s33
2409 ; GFX11-NEXT:    s_mov_b32 s33, s32
2410 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2411 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
2412 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2413 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
2414 ; GFX11-NEXT:    v_dual_mov_b32 v0, 1.0 :: v_dual_mov_b32 v1, 2.0
2415 ; GFX11-NEXT:    v_mov_b32_e32 v2, 4.0
2416 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3f32@abs32@hi
2417 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
2418 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3f32@abs32@lo
2419 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
2420 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
2421 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2422 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2423 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
2424 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
2425 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
2426 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2427 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
2428 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2429 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
2430 ; GFX11-NEXT:    s_mov_b32 s33, s0
2431 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2432 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2434 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3f32_imm:
2435 ; GFX10-SCRATCH:       ; %bb.0:
2436 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2437 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
2438 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
2439 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2440 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
2441 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2442 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2443 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
2444 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1.0
2445 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2.0
2446 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 4.0
2447 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3f32@abs32@hi
2448 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
2449 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3f32@abs32@lo
2450 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
2451 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
2452 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2453 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
2454 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
2455 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
2456 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2457 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
2458 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2459 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2460 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
2461 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
2462 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
2463 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
2464   call amdgpu_gfx void @external_void_func_v3f32(<3 x float> <float 1.0, float 2.0, float 4.0>)
2465   ret void
2468 define amdgpu_gfx void @test_call_external_void_func_v5f32_imm() #0 {
2469 ; GFX9-LABEL: test_call_external_void_func_v5f32_imm:
2470 ; GFX9:       ; %bb.0:
2471 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2472 ; GFX9-NEXT:    s_mov_b32 s34, s33
2473 ; GFX9-NEXT:    s_mov_b32 s33, s32
2474 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2475 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2476 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2477 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2478 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2479 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v5f32@abs32@hi
2480 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v5f32@abs32@lo
2481 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1.0
2482 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2.0
2483 ; GFX9-NEXT:    v_mov_b32_e32 v2, 4.0
2484 ; GFX9-NEXT:    v_mov_b32_e32 v3, -1.0
2485 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0.5
2486 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2487 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2488 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2489 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
2490 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
2491 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
2492 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2493 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2494 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2495 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2496 ; GFX9-NEXT:    s_mov_b32 s33, s34
2497 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2498 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2500 ; GFX10-LABEL: test_call_external_void_func_v5f32_imm:
2501 ; GFX10:       ; %bb.0:
2502 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2503 ; GFX10-NEXT:    s_mov_b32 s34, s33
2504 ; GFX10-NEXT:    s_mov_b32 s33, s32
2505 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2506 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2507 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2508 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2509 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
2510 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1.0
2511 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2.0
2512 ; GFX10-NEXT:    v_mov_b32_e32 v2, 4.0
2513 ; GFX10-NEXT:    v_mov_b32_e32 v3, -1.0
2514 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
2515 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0.5
2516 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v5f32@abs32@hi
2517 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v5f32@abs32@lo
2518 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2519 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
2520 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2521 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
2522 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
2523 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
2524 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2525 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2526 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2527 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2528 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2529 ; GFX10-NEXT:    s_mov_b32 s33, s34
2530 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2531 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2533 ; GFX11-LABEL: test_call_external_void_func_v5f32_imm:
2534 ; GFX11:       ; %bb.0:
2535 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2536 ; GFX11-NEXT:    s_mov_b32 s0, s33
2537 ; GFX11-NEXT:    s_mov_b32 s33, s32
2538 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2539 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
2540 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2541 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
2542 ; GFX11-NEXT:    v_dual_mov_b32 v0, 1.0 :: v_dual_mov_b32 v1, 2.0
2543 ; GFX11-NEXT:    v_dual_mov_b32 v2, 4.0 :: v_dual_mov_b32 v3, -1.0
2544 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
2545 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0.5
2546 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v5f32@abs32@hi
2547 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v5f32@abs32@lo
2548 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
2549 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
2550 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2551 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2552 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
2553 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
2554 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
2555 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2556 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
2557 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2558 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
2559 ; GFX11-NEXT:    s_mov_b32 s33, s0
2560 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2561 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2563 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v5f32_imm:
2564 ; GFX10-SCRATCH:       ; %bb.0:
2565 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2566 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
2567 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
2568 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2569 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
2570 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2571 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2572 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
2573 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1.0
2574 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2.0
2575 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 4.0
2576 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, -1.0
2577 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
2578 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 0.5
2579 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v5f32@abs32@hi
2580 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v5f32@abs32@lo
2581 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
2582 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
2583 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2584 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
2585 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
2586 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
2587 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2588 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
2589 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2590 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2591 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
2592 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
2593 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
2594 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
2595   call amdgpu_gfx void @external_void_func_v5f32(<5 x float> <float 1.0, float 2.0, float 4.0, float -1.0, float 0.5>)
2596   ret void
2599 define amdgpu_gfx void @test_call_external_void_func_f64_imm() #0 {
2600 ; GFX9-LABEL: test_call_external_void_func_f64_imm:
2601 ; GFX9:       ; %bb.0:
2602 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2603 ; GFX9-NEXT:    s_mov_b32 s34, s33
2604 ; GFX9-NEXT:    s_mov_b32 s33, s32
2605 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2606 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2607 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2608 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2609 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2610 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_f64@abs32@hi
2611 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_f64@abs32@lo
2612 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
2613 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x40100000
2614 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2615 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2616 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2617 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
2618 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
2619 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
2620 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2621 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2622 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2623 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2624 ; GFX9-NEXT:    s_mov_b32 s33, s34
2625 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2626 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2628 ; GFX10-LABEL: test_call_external_void_func_f64_imm:
2629 ; GFX10:       ; %bb.0:
2630 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2631 ; GFX10-NEXT:    s_mov_b32 s34, s33
2632 ; GFX10-NEXT:    s_mov_b32 s33, s32
2633 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2634 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2635 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2636 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2637 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
2638 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
2639 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0x40100000
2640 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_f64@abs32@hi
2641 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_f64@abs32@lo
2642 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
2643 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2644 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
2645 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2646 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
2647 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
2648 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
2649 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2650 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2651 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2652 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2653 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2654 ; GFX10-NEXT:    s_mov_b32 s33, s34
2655 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2656 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2658 ; GFX11-LABEL: test_call_external_void_func_f64_imm:
2659 ; GFX11:       ; %bb.0:
2660 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2661 ; GFX11-NEXT:    s_mov_b32 s0, s33
2662 ; GFX11-NEXT:    s_mov_b32 s33, s32
2663 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2664 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
2665 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2666 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
2667 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0x40100000
2668 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_f64@abs32@hi
2669 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_f64@abs32@lo
2670 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
2671 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
2672 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
2673 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2674 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2675 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
2676 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
2677 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
2678 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2679 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
2680 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2681 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
2682 ; GFX11-NEXT:    s_mov_b32 s33, s0
2683 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2684 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2686 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_f64_imm:
2687 ; GFX10-SCRATCH:       ; %bb.0:
2688 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2689 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
2690 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
2691 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2692 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
2693 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2694 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2695 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
2696 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
2697 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0x40100000
2698 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_f64@abs32@hi
2699 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_f64@abs32@lo
2700 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
2701 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
2702 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
2703 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2704 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
2705 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
2706 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
2707 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2708 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
2709 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2710 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2711 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
2712 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
2713 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
2714 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
2715   call amdgpu_gfx void @external_void_func_f64(double 4.0)
2716   ret void
2719 define amdgpu_gfx void @test_call_external_void_func_v2f64_imm() #0 {
2720 ; GFX9-LABEL: test_call_external_void_func_v2f64_imm:
2721 ; GFX9:       ; %bb.0:
2722 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2723 ; GFX9-NEXT:    s_mov_b32 s34, s33
2724 ; GFX9-NEXT:    s_mov_b32 s33, s32
2725 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2726 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2727 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2728 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2729 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2730 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2f64@abs32@hi
2731 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2f64@abs32@lo
2732 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
2733 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2.0
2734 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
2735 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x40100000
2736 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2737 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2738 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2739 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
2740 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
2741 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
2742 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2743 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2744 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2745 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2746 ; GFX9-NEXT:    s_mov_b32 s33, s34
2747 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2748 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2750 ; GFX10-LABEL: test_call_external_void_func_v2f64_imm:
2751 ; GFX10:       ; %bb.0:
2752 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2753 ; GFX10-NEXT:    s_mov_b32 s34, s33
2754 ; GFX10-NEXT:    s_mov_b32 s33, s32
2755 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2756 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2757 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2758 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2759 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
2760 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
2761 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2.0
2762 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
2763 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0x40100000
2764 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
2765 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2f64@abs32@hi
2766 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2f64@abs32@lo
2767 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2768 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
2769 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2770 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
2771 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
2772 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
2773 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2774 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2775 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2776 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2777 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2778 ; GFX10-NEXT:    s_mov_b32 s33, s34
2779 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2780 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2782 ; GFX11-LABEL: test_call_external_void_func_v2f64_imm:
2783 ; GFX11:       ; %bb.0:
2784 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2785 ; GFX11-NEXT:    s_mov_b32 s0, s33
2786 ; GFX11-NEXT:    s_mov_b32 s33, s32
2787 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2788 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
2789 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2790 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
2791 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 2.0
2792 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40100000
2793 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
2794 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2f64@abs32@hi
2795 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2f64@abs32@lo
2796 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
2797 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
2798 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2799 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2800 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
2801 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
2802 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
2803 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2804 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
2805 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2806 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
2807 ; GFX11-NEXT:    s_mov_b32 s33, s0
2808 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2809 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2811 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2f64_imm:
2812 ; GFX10-SCRATCH:       ; %bb.0:
2813 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2814 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
2815 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
2816 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2817 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
2818 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2819 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2820 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
2821 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
2822 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2.0
2823 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 0
2824 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 0x40100000
2825 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
2826 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2f64@abs32@hi
2827 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2f64@abs32@lo
2828 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
2829 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
2830 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2831 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
2832 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
2833 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
2834 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2835 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
2836 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2837 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2838 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
2839 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
2840 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
2841 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
2842   call amdgpu_gfx void @external_void_func_v2f64(<2 x double> <double 2.0, double 4.0>)
2843   ret void
2846 define amdgpu_gfx void @test_call_external_void_func_v3f64_imm() #0 {
2847 ; GFX9-LABEL: test_call_external_void_func_v3f64_imm:
2848 ; GFX9:       ; %bb.0:
2849 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2850 ; GFX9-NEXT:    s_mov_b32 s34, s33
2851 ; GFX9-NEXT:    s_mov_b32 s33, s32
2852 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2853 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2854 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2855 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2856 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2857 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3f64@abs32@hi
2858 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3f64@abs32@lo
2859 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
2860 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2.0
2861 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
2862 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x40100000
2863 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
2864 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0x40200000
2865 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2866 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2867 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2868 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
2869 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
2870 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
2871 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2872 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2873 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2874 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2875 ; GFX9-NEXT:    s_mov_b32 s33, s34
2876 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2877 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2879 ; GFX10-LABEL: test_call_external_void_func_v3f64_imm:
2880 ; GFX10:       ; %bb.0:
2881 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2882 ; GFX10-NEXT:    s_mov_b32 s34, s33
2883 ; GFX10-NEXT:    s_mov_b32 s33, s32
2884 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2885 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2886 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2887 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2888 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
2889 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
2890 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2.0
2891 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
2892 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0x40100000
2893 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
2894 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
2895 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0x40200000
2896 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3f64@abs32@hi
2897 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3f64@abs32@lo
2898 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2899 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
2900 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
2901 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
2902 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
2903 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
2904 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
2905 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
2906 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2907 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
2908 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2909 ; GFX10-NEXT:    s_mov_b32 s33, s34
2910 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2911 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2913 ; GFX11-LABEL: test_call_external_void_func_v3f64_imm:
2914 ; GFX11:       ; %bb.0:
2915 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2916 ; GFX11-NEXT:    s_mov_b32 s0, s33
2917 ; GFX11-NEXT:    s_mov_b32 s33, s32
2918 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2919 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
2920 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2921 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
2922 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 2.0
2923 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40100000
2924 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
2925 ; GFX11-NEXT:    v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v5, 0x40200000
2926 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3f64@abs32@hi
2927 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3f64@abs32@lo
2928 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
2929 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
2930 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2931 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2932 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
2933 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
2934 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
2935 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
2936 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
2937 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
2938 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
2939 ; GFX11-NEXT:    s_mov_b32 s33, s0
2940 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2941 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2943 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3f64_imm:
2944 ; GFX10-SCRATCH:       ; %bb.0:
2945 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2946 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
2947 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
2948 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2949 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
2950 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2951 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2952 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
2953 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
2954 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2.0
2955 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 0
2956 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 0x40100000
2957 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
2958 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 0
2959 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 0x40200000
2960 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3f64@abs32@hi
2961 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3f64@abs32@lo
2962 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
2963 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
2964 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
2965 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
2966 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
2967 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
2968 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
2969 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
2970 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
2971 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
2972 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
2973 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
2974 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
2975 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
2976   call amdgpu_gfx void @external_void_func_v3f64(<3 x double> <double 2.0, double 4.0, double 8.0>)
2977   ret void
2980 define amdgpu_gfx void @test_call_external_void_func_v2i8() #0 {
2981 ; GFX9-LABEL: test_call_external_void_func_v2i8:
2982 ; GFX9:       ; %bb.0:
2983 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2984 ; GFX9-NEXT:    s_mov_b32 s34, s33
2985 ; GFX9-NEXT:    s_mov_b32 s33, s32
2986 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
2987 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
2988 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
2989 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
2990 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
2991 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
2992 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
2993 ; GFX9-NEXT:    v_mov_b32_e32 v1, 8
2994 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
2995 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i8@abs32@hi
2996 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i8@abs32@lo
2997 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2998 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
2999 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3000 ; GFX9-NEXT:    v_lshrrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
3001 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3002 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
3003 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
3004 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
3005 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3006 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3007 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3008 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
3009 ; GFX9-NEXT:    s_mov_b32 s33, s34
3010 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3011 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3013 ; GFX10-LABEL: test_call_external_void_func_v2i8:
3014 ; GFX10:       ; %bb.0:
3015 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3016 ; GFX10-NEXT:    s_mov_b32 s34, s33
3017 ; GFX10-NEXT:    s_mov_b32 s33, s32
3018 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3019 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3020 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3021 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3022 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
3023 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3024 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
3025 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i8@abs32@hi
3026 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i8@abs32@lo
3027 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
3028 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
3029 ; GFX10-NEXT:    v_mov_b32_e32 v1, 8
3030 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
3031 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
3032 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3033 ; GFX10-NEXT:    v_lshrrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
3034 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3035 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
3036 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
3037 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
3038 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3039 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3040 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3041 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3042 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
3043 ; GFX10-NEXT:    s_mov_b32 s33, s34
3044 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3045 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3047 ; GFX11-LABEL: test_call_external_void_func_v2i8:
3048 ; GFX11:       ; %bb.0:
3049 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3050 ; GFX11-NEXT:    s_mov_b32 s0, s33
3051 ; GFX11-NEXT:    s_mov_b32 s33, s32
3052 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3053 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
3054 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3055 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
3056 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
3057 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
3058 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i8@abs32@hi
3059 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i8@abs32@lo
3060 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
3061 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off
3062 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
3063 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
3064 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3065 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v0
3066 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3067 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 8, v1
3068 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3069 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
3070 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
3071 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
3072 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3073 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
3074 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3075 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
3076 ; GFX11-NEXT:    s_mov_b32 s33, s0
3077 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3078 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3080 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i8:
3081 ; GFX10-SCRATCH:       ; %bb.0:
3082 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3083 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
3084 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
3085 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3086 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
3087 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3088 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3089 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
3090 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
3091 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
3092 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i8@abs32@hi
3093 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i8@abs32@lo
3094 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
3095 ; GFX10-SCRATCH-NEXT:    global_load_ushort v0, v[0:1], off
3096 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 8
3097 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
3098 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
3099 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3100 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
3101 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3102 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
3103 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
3104 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
3105 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3106 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
3107 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3108 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3109 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
3110 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
3111 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3112 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
3113   %val = load <2 x i8>, ptr addrspace(1) null
3114   call amdgpu_gfx void @external_void_func_v2i8(<2 x i8> %val)
3115   ret void
3118 define amdgpu_gfx void @test_call_external_void_func_v3i8() #0 {
3119 ; GFX9-LABEL: test_call_external_void_func_v3i8:
3120 ; GFX9:       ; %bb.0:
3121 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3122 ; GFX9-NEXT:    s_mov_b32 s34, s33
3123 ; GFX9-NEXT:    s_mov_b32 s33, s32
3124 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3125 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3126 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3127 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
3128 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
3129 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
3130 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
3131 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
3132 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i8@abs32@hi
3133 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i8@abs32@lo
3134 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
3135 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
3136 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3137 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3138 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3139 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3140 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
3141 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
3142 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
3143 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3144 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3145 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3146 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
3147 ; GFX9-NEXT:    s_mov_b32 s33, s34
3148 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3149 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3151 ; GFX10-LABEL: test_call_external_void_func_v3i8:
3152 ; GFX10:       ; %bb.0:
3153 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3154 ; GFX10-NEXT:    s_mov_b32 s34, s33
3155 ; GFX10-NEXT:    s_mov_b32 s33, s32
3156 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3157 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3158 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3159 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3160 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
3161 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3162 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
3163 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i8@abs32@hi
3164 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i8@abs32@lo
3165 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
3166 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
3167 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
3168 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
3169 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3170 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3171 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3172 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3173 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
3174 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
3175 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
3176 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3177 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3178 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3179 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3180 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
3181 ; GFX10-NEXT:    s_mov_b32 s33, s34
3182 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3183 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3185 ; GFX11-LABEL: test_call_external_void_func_v3i8:
3186 ; GFX11:       ; %bb.0:
3187 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3188 ; GFX11-NEXT:    s_mov_b32 s0, s33
3189 ; GFX11-NEXT:    s_mov_b32 s33, s32
3190 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3191 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
3192 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3193 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
3194 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
3195 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
3196 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i8@abs32@hi
3197 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i8@abs32@lo
3198 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
3199 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
3200 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
3201 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
3202 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3203 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3204 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3205 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3206 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
3207 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
3208 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
3209 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3210 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
3211 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3212 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
3213 ; GFX11-NEXT:    s_mov_b32 s33, s0
3214 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3215 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3217 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i8:
3218 ; GFX10-SCRATCH:       ; %bb.0:
3219 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3220 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
3221 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
3222 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3223 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
3224 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3225 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3226 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
3227 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
3228 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
3229 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i8@abs32@hi
3230 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i8@abs32@lo
3231 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
3232 ; GFX10-SCRATCH-NEXT:    global_load_dword v0, v[0:1], off
3233 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
3234 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
3235 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3236 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3237 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3238 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3239 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
3240 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
3241 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
3242 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3243 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
3244 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3245 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3246 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
3247 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
3248 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3249 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
3250   %val = load <3 x i8>, ptr addrspace(1) null
3251   call amdgpu_gfx void @external_void_func_v3i8(<3 x i8> %val)
3252   ret void
3255 define amdgpu_gfx void @test_call_external_void_func_v4i8() #0 {
3256 ; GFX9-LABEL: test_call_external_void_func_v4i8:
3257 ; GFX9:       ; %bb.0:
3258 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3259 ; GFX9-NEXT:    s_mov_b32 s34, s33
3260 ; GFX9-NEXT:    s_mov_b32 s33, s32
3261 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3262 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3263 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3264 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
3265 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
3266 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
3267 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
3268 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
3269 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i8@abs32@hi
3270 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i8@abs32@lo
3271 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
3272 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
3273 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3274 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3275 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3276 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3277 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3278 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
3279 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
3280 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
3281 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3282 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3283 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3284 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
3285 ; GFX9-NEXT:    s_mov_b32 s33, s34
3286 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3287 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3289 ; GFX10-LABEL: test_call_external_void_func_v4i8:
3290 ; GFX10:       ; %bb.0:
3291 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3292 ; GFX10-NEXT:    s_mov_b32 s34, s33
3293 ; GFX10-NEXT:    s_mov_b32 s33, s32
3294 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3295 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3296 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3297 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3298 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
3299 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3300 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
3301 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i8@abs32@hi
3302 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i8@abs32@lo
3303 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
3304 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
3305 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
3306 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
3307 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3308 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3309 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3310 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3311 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3312 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
3313 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
3314 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
3315 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3316 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3317 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3318 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3319 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
3320 ; GFX10-NEXT:    s_mov_b32 s33, s34
3321 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3322 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3324 ; GFX11-LABEL: test_call_external_void_func_v4i8:
3325 ; GFX11:       ; %bb.0:
3326 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3327 ; GFX11-NEXT:    s_mov_b32 s0, s33
3328 ; GFX11-NEXT:    s_mov_b32 s33, s32
3329 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3330 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
3331 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3332 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
3333 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
3334 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
3335 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i8@abs32@hi
3336 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i8@abs32@lo
3337 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
3338 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
3339 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
3340 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
3341 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3342 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3343 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3344 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3345 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3346 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
3347 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
3348 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
3349 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3350 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
3351 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3352 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
3353 ; GFX11-NEXT:    s_mov_b32 s33, s0
3354 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3355 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3357 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i8:
3358 ; GFX10-SCRATCH:       ; %bb.0:
3359 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3360 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
3361 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
3362 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3363 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
3364 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3365 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3366 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
3367 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
3368 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
3369 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i8@abs32@hi
3370 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i8@abs32@lo
3371 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
3372 ; GFX10-SCRATCH-NEXT:    global_load_dword v0, v[0:1], off
3373 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
3374 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
3375 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3376 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3377 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3378 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3379 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3380 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
3381 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
3382 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
3383 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3384 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
3385 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3386 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3387 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
3388 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
3389 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3390 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
3391   %val = load <4 x i8>, ptr addrspace(1) null
3392   call amdgpu_gfx void @external_void_func_v4i8(<4 x i8> %val)
3393   ret void
3396 define amdgpu_gfx void @test_call_external_void_func_v5i8() #0 {
3397 ; GFX9-LABEL: test_call_external_void_func_v5i8:
3398 ; GFX9:       ; %bb.0:
3399 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3400 ; GFX9-NEXT:    s_mov_b32 s34, s33
3401 ; GFX9-NEXT:    s_mov_b32 s33, s32
3402 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3403 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3404 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3405 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
3406 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
3407 ; GFX9-NEXT:    global_load_dwordx2 v[5:6], v[0:1], off
3408 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
3409 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
3410 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v5i8@abs32@hi
3411 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v5i8@abs32@lo
3412 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
3413 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
3414 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3415 ; GFX9-NEXT:    v_lshrrev_b64 v[3:4], 24, v[5:6]
3416 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 8, v5
3417 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
3418 ; GFX9-NEXT:    v_mov_b32_e32 v0, v5
3419 ; GFX9-NEXT:    v_mov_b32_e32 v4, v6
3420 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3421 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
3422 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
3423 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
3424 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3425 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3426 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3427 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
3428 ; GFX9-NEXT:    s_mov_b32 s33, s34
3429 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3430 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3432 ; GFX10-LABEL: test_call_external_void_func_v5i8:
3433 ; GFX10:       ; %bb.0:
3434 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3435 ; GFX10-NEXT:    s_mov_b32 s34, s33
3436 ; GFX10-NEXT:    s_mov_b32 s33, s32
3437 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3438 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3439 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3440 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3441 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
3442 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3443 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
3444 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v5i8@abs32@hi
3445 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v5i8@abs32@lo
3446 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
3447 ; GFX10-NEXT:    global_load_dwordx2 v[5:6], v[0:1], off
3448 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
3449 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
3450 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3451 ; GFX10-NEXT:    v_lshrrev_b64 v[3:4], 24, v[5:6]
3452 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 8, v5
3453 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
3454 ; GFX10-NEXT:    v_mov_b32_e32 v0, v5
3455 ; GFX10-NEXT:    v_mov_b32_e32 v4, v6
3456 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3457 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
3458 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
3459 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
3460 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3461 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3462 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3463 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3464 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
3465 ; GFX10-NEXT:    s_mov_b32 s33, s34
3466 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3467 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3469 ; GFX11-LABEL: test_call_external_void_func_v5i8:
3470 ; GFX11:       ; %bb.0:
3471 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3472 ; GFX11-NEXT:    s_mov_b32 s0, s33
3473 ; GFX11-NEXT:    s_mov_b32 s33, s32
3474 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3475 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
3476 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3477 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
3478 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
3479 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
3480 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v5i8@abs32@hi
3481 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v5i8@abs32@lo
3482 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
3483 ; GFX11-NEXT:    global_load_b64 v[5:6], v[0:1], off
3484 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
3485 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
3486 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3487 ; GFX11-NEXT:    v_mov_b32_e32 v0, v5
3488 ; GFX11-NEXT:    v_lshrrev_b64 v[3:4], 24, v[5:6]
3489 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 8, v5
3490 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
3491 ; GFX11-NEXT:    v_mov_b32_e32 v4, v6
3492 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3493 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
3494 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
3495 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
3496 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3497 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
3498 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3499 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
3500 ; GFX11-NEXT:    s_mov_b32 s33, s0
3501 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3502 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3504 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v5i8:
3505 ; GFX10-SCRATCH:       ; %bb.0:
3506 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3507 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
3508 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
3509 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3510 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
3511 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3512 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3513 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
3514 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
3515 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
3516 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v5i8@abs32@hi
3517 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v5i8@abs32@lo
3518 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
3519 ; GFX10-SCRATCH-NEXT:    global_load_dwordx2 v[5:6], v[0:1], off
3520 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
3521 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
3522 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3523 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b64 v[3:4], 24, v[5:6]
3524 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v1, 8, v5
3525 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
3526 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, v5
3527 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, v6
3528 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3529 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
3530 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
3531 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
3532 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3533 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
3534 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3535 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3536 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
3537 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
3538 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3539 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
3540   %val = load <5 x i8>, ptr addrspace(1) null
3541   call amdgpu_gfx void @external_void_func_v5i8(<5 x i8> %val)
3542   ret void
3545 define amdgpu_gfx void @test_call_external_void_func_v8i8() #0 {
3546 ; GFX9-LABEL: test_call_external_void_func_v8i8:
3547 ; GFX9:       ; %bb.0:
3548 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3549 ; GFX9-NEXT:    s_mov_b32 s34, s33
3550 ; GFX9-NEXT:    s_mov_b32 s33, s32
3551 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3552 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3553 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3554 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
3555 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
3556 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
3557 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
3558 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
3559 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v8i8@abs32@hi
3560 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v8i8@abs32@lo
3561 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
3562 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
3563 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3564 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
3565 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3566 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3567 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3568 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3569 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
3570 ; GFX9-NEXT:    v_mov_b32_e32 v4, v1
3571 ; GFX9-NEXT:    v_mov_b32_e32 v1, v8
3572 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3573 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
3574 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
3575 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
3576 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3577 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3578 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3579 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
3580 ; GFX9-NEXT:    s_mov_b32 s33, s34
3581 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3582 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3584 ; GFX10-LABEL: test_call_external_void_func_v8i8:
3585 ; GFX10:       ; %bb.0:
3586 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3587 ; GFX10-NEXT:    s_mov_b32 s34, s33
3588 ; GFX10-NEXT:    s_mov_b32 s33, s32
3589 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3590 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3591 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3592 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3593 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
3594 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3595 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
3596 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v8i8@abs32@hi
3597 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v8i8@abs32@lo
3598 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
3599 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
3600 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
3601 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
3602 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3603 ; GFX10-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
3604 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3605 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3606 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3607 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3608 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
3609 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
3610 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
3611 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3612 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
3613 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
3614 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
3615 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3616 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3617 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3618 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3619 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
3620 ; GFX10-NEXT:    s_mov_b32 s33, s34
3621 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3622 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3624 ; GFX11-LABEL: test_call_external_void_func_v8i8:
3625 ; GFX11:       ; %bb.0:
3626 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3627 ; GFX11-NEXT:    s_mov_b32 s0, s33
3628 ; GFX11-NEXT:    s_mov_b32 s33, s32
3629 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3630 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
3631 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3632 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
3633 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
3634 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
3635 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v8i8@abs32@hi
3636 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v8i8@abs32@lo
3637 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
3638 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
3639 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
3640 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
3641 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3642 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
3643 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3644 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3645 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3646 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3647 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
3648 ; GFX11-NEXT:    v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v1, v8
3649 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3650 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
3651 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
3652 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
3653 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3654 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
3655 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3656 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
3657 ; GFX11-NEXT:    s_mov_b32 s33, s0
3658 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3659 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3661 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v8i8:
3662 ; GFX10-SCRATCH:       ; %bb.0:
3663 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3664 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
3665 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
3666 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3667 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
3668 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3669 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3670 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
3671 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
3672 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
3673 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v8i8@abs32@hi
3674 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v8i8@abs32@lo
3675 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
3676 ; GFX10-SCRATCH-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
3677 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
3678 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
3679 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3680 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
3681 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3682 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3683 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3684 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3685 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
3686 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, v1
3687 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, v8
3688 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3689 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
3690 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
3691 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
3692 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3693 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
3694 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3695 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3696 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
3697 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
3698 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3699 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
3700   %val = load <8 x i8>, ptr addrspace(1) null
3701   call amdgpu_gfx void @external_void_func_v8i8(<8 x i8> %val)
3702   ret void
3705 define amdgpu_gfx void @test_call_external_void_func_v32i8() #0 {
3706 ; GFX9-LABEL: test_call_external_void_func_v32i8:
3707 ; GFX9:       ; %bb.0:
3708 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3709 ; GFX9-NEXT:    s_mov_b32 s34, s33
3710 ; GFX9-NEXT:    s_mov_b32 s33, s32
3711 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3712 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3713 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3714 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
3715 ; GFX9-NEXT:    v_mov_b32_e32 v4, 16
3716 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
3717 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
3718 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
3719 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
3720 ; GFX9-NEXT:    global_load_dwordx4 v[16:19], v[4:5], off
3721 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
3722 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v32i8@abs32@hi
3723 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v32i8@abs32@lo
3724 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
3725 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
3726 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
3727 ; GFX9-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
3728 ; GFX9-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
3729 ; GFX9-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
3730 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3731 ; GFX9-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
3732 ; GFX9-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
3733 ; GFX9-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
3734 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3735 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3736 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
3737 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
3738 ; GFX9-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
3739 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
3740 ; GFX9-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
3741 ; GFX9-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
3742 ; GFX9-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
3743 ; GFX9-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
3744 ; GFX9-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
3745 ; GFX9-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
3746 ; GFX9-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
3747 ; GFX9-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
3748 ; GFX9-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
3749 ; GFX9-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
3750 ; GFX9-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
3751 ; GFX9-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
3752 ; GFX9-NEXT:    v_mov_b32_e32 v4, v1
3753 ; GFX9-NEXT:    v_mov_b32_e32 v8, v2
3754 ; GFX9-NEXT:    v_mov_b32_e32 v12, v3
3755 ; GFX9-NEXT:    v_mov_b32_e32 v20, v17
3756 ; GFX9-NEXT:    v_mov_b32_e32 v24, v18
3757 ; GFX9-NEXT:    v_mov_b32_e32 v28, v19
3758 ; GFX9-NEXT:    v_mov_b32_e32 v1, v35
3759 ; GFX9-NEXT:    v_mov_b32_e32 v2, v36
3760 ; GFX9-NEXT:    v_mov_b32_e32 v3, v37
3761 ; GFX9-NEXT:    v_mov_b32_e32 v17, v32
3762 ; GFX9-NEXT:    v_mov_b32_e32 v18, v33
3763 ; GFX9-NEXT:    v_mov_b32_e32 v19, v34
3764 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3765 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
3766 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
3767 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
3768 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3769 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3770 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
3771 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
3772 ; GFX9-NEXT:    s_mov_b32 s33, s34
3773 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3774 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3776 ; GFX10-LABEL: test_call_external_void_func_v32i8:
3777 ; GFX10:       ; %bb.0:
3778 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3779 ; GFX10-NEXT:    s_mov_b32 s34, s33
3780 ; GFX10-NEXT:    s_mov_b32 s33, s32
3781 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3782 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
3783 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3784 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3785 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
3786 ; GFX10-NEXT:    v_mov_b32_e32 v4, 16
3787 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3788 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0
3789 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
3790 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v32i8@abs32@hi
3791 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v32i8@abs32@lo
3792 ; GFX10-NEXT:    s_clause 0x1
3793 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
3794 ; GFX10-NEXT:    global_load_dwordx4 v[16:19], v[4:5], off
3795 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
3796 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
3797 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
3798 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
3799 ; GFX10-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
3800 ; GFX10-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
3801 ; GFX10-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
3802 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3803 ; GFX10-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
3804 ; GFX10-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
3805 ; GFX10-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
3806 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3807 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3808 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
3809 ; GFX10-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
3810 ; GFX10-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
3811 ; GFX10-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
3812 ; GFX10-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
3813 ; GFX10-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
3814 ; GFX10-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
3815 ; GFX10-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
3816 ; GFX10-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
3817 ; GFX10-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
3818 ; GFX10-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
3819 ; GFX10-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
3820 ; GFX10-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
3821 ; GFX10-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
3822 ; GFX10-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
3823 ; GFX10-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
3824 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
3825 ; GFX10-NEXT:    v_mov_b32_e32 v8, v2
3826 ; GFX10-NEXT:    v_mov_b32_e32 v12, v3
3827 ; GFX10-NEXT:    v_mov_b32_e32 v20, v17
3828 ; GFX10-NEXT:    v_mov_b32_e32 v24, v18
3829 ; GFX10-NEXT:    v_mov_b32_e32 v28, v19
3830 ; GFX10-NEXT:    v_mov_b32_e32 v1, v35
3831 ; GFX10-NEXT:    v_mov_b32_e32 v2, v36
3832 ; GFX10-NEXT:    v_mov_b32_e32 v3, v37
3833 ; GFX10-NEXT:    v_mov_b32_e32 v17, v32
3834 ; GFX10-NEXT:    v_mov_b32_e32 v18, v33
3835 ; GFX10-NEXT:    v_mov_b32_e32 v19, v34
3836 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
3837 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
3838 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
3839 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
3840 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
3841 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
3842 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3843 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
3844 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
3845 ; GFX10-NEXT:    s_mov_b32 s33, s34
3846 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3847 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3849 ; GFX11-LABEL: test_call_external_void_func_v32i8:
3850 ; GFX11:       ; %bb.0:
3851 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3852 ; GFX11-NEXT:    s_mov_b32 s0, s33
3853 ; GFX11-NEXT:    s_mov_b32 s33, s32
3854 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3855 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
3856 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3857 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
3858 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v4, 16
3859 ; GFX11-NEXT:    v_mov_b32_e32 v5, 0
3860 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
3861 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v32i8@abs32@hi
3862 ; GFX11-NEXT:    global_load_b128 v[0:3], v[0:1], off
3863 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v32i8@abs32@lo
3864 ; GFX11-NEXT:    global_load_b128 v[16:19], v[4:5], off
3865 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
3866 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
3867 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
3868 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
3869 ; GFX11-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
3870 ; GFX11-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
3871 ; GFX11-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
3872 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3873 ; GFX11-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
3874 ; GFX11-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
3875 ; GFX11-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
3876 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3877 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3878 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
3879 ; GFX11-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
3880 ; GFX11-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
3881 ; GFX11-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
3882 ; GFX11-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
3883 ; GFX11-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
3884 ; GFX11-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
3885 ; GFX11-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
3886 ; GFX11-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
3887 ; GFX11-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
3888 ; GFX11-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
3889 ; GFX11-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
3890 ; GFX11-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
3891 ; GFX11-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
3892 ; GFX11-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
3893 ; GFX11-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
3894 ; GFX11-NEXT:    v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v1, v35
3895 ; GFX11-NEXT:    v_mov_b32_e32 v8, v2
3896 ; GFX11-NEXT:    v_mov_b32_e32 v12, v3
3897 ; GFX11-NEXT:    v_mov_b32_e32 v20, v17
3898 ; GFX11-NEXT:    v_mov_b32_e32 v24, v18
3899 ; GFX11-NEXT:    v_dual_mov_b32 v28, v19 :: v_dual_mov_b32 v19, v34
3900 ; GFX11-NEXT:    v_dual_mov_b32 v2, v36 :: v_dual_mov_b32 v3, v37
3901 ; GFX11-NEXT:    v_dual_mov_b32 v17, v32 :: v_dual_mov_b32 v18, v33
3902 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3903 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
3904 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
3905 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
3906 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
3907 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
3908 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
3909 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
3910 ; GFX11-NEXT:    s_mov_b32 s33, s0
3911 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3912 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3914 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v32i8:
3915 ; GFX10-SCRATCH:       ; %bb.0:
3916 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3917 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
3918 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
3919 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3920 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
3921 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3922 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3923 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
3924 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 16
3925 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
3926 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 0
3927 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
3928 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v32i8@abs32@hi
3929 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v32i8@abs32@lo
3930 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
3931 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
3932 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[16:19], v[4:5], off
3933 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
3934 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
3935 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
3936 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(1)
3937 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
3938 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
3939 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
3940 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3941 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
3942 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
3943 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
3944 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3945 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3946 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
3947 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
3948 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
3949 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
3950 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
3951 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
3952 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
3953 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
3954 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
3955 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
3956 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
3957 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
3958 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
3959 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
3960 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
3961 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
3962 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, v1
3963 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v8, v2
3964 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v12, v3
3965 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v20, v17
3966 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v24, v18
3967 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v28, v19
3968 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, v35
3969 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, v36
3970 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, v37
3971 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v17, v32
3972 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v18, v33
3973 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v19, v34
3974 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3975 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
3976 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
3977 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
3978 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
3979 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
3980 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
3981 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
3982 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
3983 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
3984 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
3985 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
3986   %val = load <32 x i8>, ptr addrspace(1) null
3987   call amdgpu_gfx void @external_void_func_v32i8(<32 x i8> %val)
3988   ret void
3992 define amdgpu_gfx void @test_call_external_void_func_i8_ret() #0 {
3993 ; GFX9-LABEL: test_call_external_void_func_i8_ret:
3994 ; GFX9:       ; %bb.0:
3995 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3996 ; GFX9-NEXT:    s_mov_b32 s34, s33
3997 ; GFX9-NEXT:    s_mov_b32 s33, s32
3998 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
3999 ; GFX9-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4000 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4001 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4002 ; GFX9-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4003 ; GFX9-NEXT:    v_mov_b32_e32 v40, 0
4004 ; GFX9-NEXT:    v_mov_b32_e32 v41, 0
4005 ; GFX9-NEXT:    global_load_ubyte v0, v[40:41], off
4006 ; GFX9-NEXT:    v_writelane_b32 v42, s34, 2
4007 ; GFX9-NEXT:    v_writelane_b32 v42, s30, 0
4008 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i8_ret@abs32@hi
4009 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i8_ret@abs32@lo
4010 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4011 ; GFX9-NEXT:    v_writelane_b32 v42, s31, 1
4012 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4013 ; GFX9-NEXT:    global_store_byte v[40:41], v0, off
4014 ; GFX9-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload
4015 ; GFX9-NEXT:    s_nop 0
4016 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
4017 ; GFX9-NEXT:    v_readlane_b32 s31, v42, 1
4018 ; GFX9-NEXT:    v_readlane_b32 s30, v42, 0
4019 ; GFX9-NEXT:    v_readlane_b32 s34, v42, 2
4020 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4021 ; GFX9-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4022 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4023 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4024 ; GFX9-NEXT:    s_mov_b32 s33, s34
4025 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4026 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4028 ; GFX10-LABEL: test_call_external_void_func_i8_ret:
4029 ; GFX10:       ; %bb.0:
4030 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4031 ; GFX10-NEXT:    s_mov_b32 s34, s33
4032 ; GFX10-NEXT:    s_mov_b32 s33, s32
4033 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4034 ; GFX10-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4035 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4036 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4037 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4038 ; GFX10-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4039 ; GFX10-NEXT:    v_mov_b32_e32 v40, 0
4040 ; GFX10-NEXT:    v_mov_b32_e32 v41, 0
4041 ; GFX10-NEXT:    v_writelane_b32 v42, s34, 2
4042 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i8_ret@abs32@hi
4043 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i8_ret@abs32@lo
4044 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4045 ; GFX10-NEXT:    global_load_ubyte v0, v[40:41], off
4046 ; GFX10-NEXT:    v_writelane_b32 v42, s30, 0
4047 ; GFX10-NEXT:    v_writelane_b32 v42, s31, 1
4048 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4049 ; GFX10-NEXT:    global_store_byte v[40:41], v0, off
4050 ; GFX10-NEXT:    s_clause 0x1
4051 ; GFX10-NEXT:    buffer_load_dword v41, off, s[0:3], s33
4052 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4
4053 ; GFX10-NEXT:    v_readlane_b32 s31, v42, 1
4054 ; GFX10-NEXT:    v_readlane_b32 s30, v42, 0
4055 ; GFX10-NEXT:    v_readlane_b32 s34, v42, 2
4056 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4057 ; GFX10-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4058 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4059 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4060 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4061 ; GFX10-NEXT:    s_mov_b32 s33, s34
4062 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4063 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4065 ; GFX11-LABEL: test_call_external_void_func_i8_ret:
4066 ; GFX11:       ; %bb.0:
4067 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4068 ; GFX11-NEXT:    s_mov_b32 s0, s33
4069 ; GFX11-NEXT:    s_mov_b32 s33, s32
4070 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4071 ; GFX11-NEXT:    scratch_store_b32 off, v42, s33 offset:8 ; 4-byte Folded Spill
4072 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4073 ; GFX11-NEXT:    s_clause 0x1
4074 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:4
4075 ; GFX11-NEXT:    scratch_store_b32 off, v41, s33
4076 ; GFX11-NEXT:    v_mov_b32_e32 v40, 0
4077 ; GFX11-NEXT:    v_mov_b32_e32 v41, 0
4078 ; GFX11-NEXT:    v_writelane_b32 v42, s0, 2
4079 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i8_ret@abs32@hi
4080 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i8_ret@abs32@lo
4081 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4082 ; GFX11-NEXT:    global_load_u8 v0, v[40:41], off
4083 ; GFX11-NEXT:    v_writelane_b32 v42, s30, 0
4084 ; GFX11-NEXT:    v_writelane_b32 v42, s31, 1
4085 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4086 ; GFX11-NEXT:    global_store_b8 v[40:41], v0, off
4087 ; GFX11-NEXT:    s_clause 0x1
4088 ; GFX11-NEXT:    scratch_load_b32 v41, off, s33
4089 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:4
4090 ; GFX11-NEXT:    v_readlane_b32 s31, v42, 1
4091 ; GFX11-NEXT:    v_readlane_b32 s30, v42, 0
4092 ; GFX11-NEXT:    v_readlane_b32 s0, v42, 2
4093 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4094 ; GFX11-NEXT:    scratch_load_b32 v42, off, s33 offset:8 ; 4-byte Folded Reload
4095 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4096 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4097 ; GFX11-NEXT:    s_mov_b32 s33, s0
4098 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4099 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4101 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i8_ret:
4102 ; GFX10-SCRATCH:       ; %bb.0:
4103 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4104 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
4105 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
4106 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4107 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v42, s33 offset:8 ; 4-byte Folded Spill
4108 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4109 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4110 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:4 ; 4-byte Folded Spill
4111 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v41, s33 ; 4-byte Folded Spill
4112 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v40, 0
4113 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v41, 0
4114 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s0, 2
4115 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i8_ret@abs32@hi
4116 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i8_ret@abs32@lo
4117 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
4118 ; GFX10-SCRATCH-NEXT:    global_load_ubyte v0, v[40:41], off
4119 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s30, 0
4120 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s31, 1
4121 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4122 ; GFX10-SCRATCH-NEXT:    global_store_byte v[40:41], v0, off
4123 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
4124 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v41, off, s33
4125 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:4
4126 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v42, 1
4127 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v42, 0
4128 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v42, 2
4129 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4130 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v42, off, s33 offset:8 ; 4-byte Folded Reload
4131 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4132 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4133 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
4134 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
4135 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4136 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
4137   %val = load i8, ptr addrspace(1) null
4138   %tmp = call amdgpu_gfx i8 @external_void_func_i8_ret(i8 %val)
4139   store i8 %tmp, ptr addrspace(1) null
4140   ret void
4144 define amdgpu_gfx void @test_call_external_void_func_v2i8_ret() #0 {
4145 ; GFX9-LABEL: test_call_external_void_func_v2i8_ret:
4146 ; GFX9:       ; %bb.0:
4147 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4148 ; GFX9-NEXT:    s_mov_b32 s34, s33
4149 ; GFX9-NEXT:    s_mov_b32 s33, s32
4150 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4151 ; GFX9-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4152 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4153 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4154 ; GFX9-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4155 ; GFX9-NEXT:    v_mov_b32_e32 v40, 0
4156 ; GFX9-NEXT:    v_mov_b32_e32 v41, 0
4157 ; GFX9-NEXT:    global_load_ushort v0, v[40:41], off
4158 ; GFX9-NEXT:    v_writelane_b32 v42, s34, 2
4159 ; GFX9-NEXT:    v_mov_b32_e32 v1, 8
4160 ; GFX9-NEXT:    v_writelane_b32 v42, s30, 0
4161 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i8_ret@abs32@hi
4162 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i8_ret@abs32@lo
4163 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4164 ; GFX9-NEXT:    v_writelane_b32 v42, s31, 1
4165 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4166 ; GFX9-NEXT:    v_lshrrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4167 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4168 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
4169 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4170 ; GFX9-NEXT:    global_store_short v[40:41], v0, off
4171 ; GFX9-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload
4172 ; GFX9-NEXT:    s_nop 0
4173 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
4174 ; GFX9-NEXT:    v_readlane_b32 s31, v42, 1
4175 ; GFX9-NEXT:    v_readlane_b32 s30, v42, 0
4176 ; GFX9-NEXT:    v_readlane_b32 s34, v42, 2
4177 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4178 ; GFX9-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4179 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4180 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4181 ; GFX9-NEXT:    s_mov_b32 s33, s34
4182 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4183 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4185 ; GFX10-LABEL: test_call_external_void_func_v2i8_ret:
4186 ; GFX10:       ; %bb.0:
4187 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4188 ; GFX10-NEXT:    s_mov_b32 s34, s33
4189 ; GFX10-NEXT:    s_mov_b32 s33, s32
4190 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4191 ; GFX10-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4192 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4193 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4194 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4195 ; GFX10-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4196 ; GFX10-NEXT:    v_mov_b32_e32 v40, 0
4197 ; GFX10-NEXT:    v_mov_b32_e32 v41, 0
4198 ; GFX10-NEXT:    v_writelane_b32 v42, s34, 2
4199 ; GFX10-NEXT:    v_mov_b32_e32 v1, 8
4200 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i8_ret@abs32@hi
4201 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i8_ret@abs32@lo
4202 ; GFX10-NEXT:    global_load_ushort v0, v[40:41], off
4203 ; GFX10-NEXT:    v_writelane_b32 v42, s30, 0
4204 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4205 ; GFX10-NEXT:    v_writelane_b32 v42, s31, 1
4206 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4207 ; GFX10-NEXT:    v_lshrrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4208 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4209 ; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v1
4210 ; GFX10-NEXT:    v_readlane_b32 s31, v42, 1
4211 ; GFX10-NEXT:    v_readlane_b32 s30, v42, 0
4212 ; GFX10-NEXT:    v_readlane_b32 s34, v42, 2
4213 ; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4214 ; GFX10-NEXT:    global_store_short v[40:41], v0, off
4215 ; GFX10-NEXT:    s_clause 0x1
4216 ; GFX10-NEXT:    buffer_load_dword v41, off, s[0:3], s33
4217 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4
4218 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4219 ; GFX10-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4220 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4221 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4222 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4223 ; GFX10-NEXT:    s_mov_b32 s33, s34
4224 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4225 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4227 ; GFX11-LABEL: test_call_external_void_func_v2i8_ret:
4228 ; GFX11:       ; %bb.0:
4229 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4230 ; GFX11-NEXT:    s_mov_b32 s0, s33
4231 ; GFX11-NEXT:    s_mov_b32 s33, s32
4232 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4233 ; GFX11-NEXT:    scratch_store_b32 off, v42, s33 offset:8 ; 4-byte Folded Spill
4234 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4235 ; GFX11-NEXT:    s_clause 0x1
4236 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:4
4237 ; GFX11-NEXT:    scratch_store_b32 off, v41, s33
4238 ; GFX11-NEXT:    v_mov_b32_e32 v40, 0
4239 ; GFX11-NEXT:    v_mov_b32_e32 v41, 0
4240 ; GFX11-NEXT:    v_writelane_b32 v42, s0, 2
4241 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i8_ret@abs32@hi
4242 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i8_ret@abs32@lo
4243 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4244 ; GFX11-NEXT:    global_load_u16 v0, v[40:41], off
4245 ; GFX11-NEXT:    v_writelane_b32 v42, s30, 0
4246 ; GFX11-NEXT:    v_writelane_b32 v42, s31, 1
4247 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4248 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v0
4249 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
4250 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 8, v1
4251 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4252 ; GFX11-NEXT:    v_lshlrev_b16 v1, 8, v1
4253 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xff, v0
4254 ; GFX11-NEXT:    v_readlane_b32 s31, v42, 1
4255 ; GFX11-NEXT:    v_readlane_b32 s30, v42, 0
4256 ; GFX11-NEXT:    v_readlane_b32 s0, v42, 2
4257 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
4258 ; GFX11-NEXT:    v_or_b32_e32 v0, v0, v1
4259 ; GFX11-NEXT:    global_store_b16 v[40:41], v0, off
4260 ; GFX11-NEXT:    s_clause 0x1
4261 ; GFX11-NEXT:    scratch_load_b32 v41, off, s33
4262 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:4
4263 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4264 ; GFX11-NEXT:    scratch_load_b32 v42, off, s33 offset:8 ; 4-byte Folded Reload
4265 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4266 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4267 ; GFX11-NEXT:    s_mov_b32 s33, s0
4268 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4269 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4271 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i8_ret:
4272 ; GFX10-SCRATCH:       ; %bb.0:
4273 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4274 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
4275 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
4276 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4277 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v42, s33 offset:8 ; 4-byte Folded Spill
4278 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4279 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4280 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:4 ; 4-byte Folded Spill
4281 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v41, s33 ; 4-byte Folded Spill
4282 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v40, 0
4283 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v41, 0
4284 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s0, 2
4285 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 8
4286 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i8_ret@abs32@hi
4287 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i8_ret@abs32@lo
4288 ; GFX10-SCRATCH-NEXT:    global_load_ushort v0, v[40:41], off
4289 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s30, 0
4290 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
4291 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s31, 1
4292 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4293 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4294 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4295 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v1, 8, v1
4296 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v42, 1
4297 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v42, 0
4298 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v42, 2
4299 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4300 ; GFX10-SCRATCH-NEXT:    global_store_short v[40:41], v0, off
4301 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
4302 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v41, off, s33
4303 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:4
4304 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4305 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v42, off, s33 offset:8 ; 4-byte Folded Reload
4306 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4307 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4308 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
4309 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
4310 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4311 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
4312   %val = load <2 x i8>, ptr addrspace(1) null
4313   %tmp = call amdgpu_gfx <2 x i8> @external_void_func_v2i8_ret(<2 x i8> %val)
4314   store <2 x i8> %tmp, ptr addrspace(1) null
4315   ret void
4319 define amdgpu_gfx void @test_call_external_void_func_v3i8_ret() #0 {
4320 ; GFX9-LABEL: test_call_external_void_func_v3i8_ret:
4321 ; GFX9:       ; %bb.0:
4322 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4323 ; GFX9-NEXT:    s_mov_b32 s34, s33
4324 ; GFX9-NEXT:    s_mov_b32 s33, s32
4325 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4326 ; GFX9-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4327 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4328 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4329 ; GFX9-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4330 ; GFX9-NEXT:    v_mov_b32_e32 v40, 0
4331 ; GFX9-NEXT:    v_mov_b32_e32 v41, 0
4332 ; GFX9-NEXT:    global_load_dword v0, v[40:41], off
4333 ; GFX9-NEXT:    v_writelane_b32 v42, s34, 2
4334 ; GFX9-NEXT:    v_writelane_b32 v42, s30, 0
4335 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i8_ret@abs32@hi
4336 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i8_ret@abs32@lo
4337 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4338 ; GFX9-NEXT:    v_writelane_b32 v42, s31, 1
4339 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4340 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
4341 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4342 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4343 ; GFX9-NEXT:    v_mov_b32_e32 v3, 2
4344 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
4345 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
4346 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4347 ; GFX9-NEXT:    global_store_byte v[3:4], v2, off
4348 ; GFX9-NEXT:    global_store_short v[40:41], v0, off
4349 ; GFX9-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload
4350 ; GFX9-NEXT:    s_nop 0
4351 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
4352 ; GFX9-NEXT:    v_readlane_b32 s31, v42, 1
4353 ; GFX9-NEXT:    v_readlane_b32 s30, v42, 0
4354 ; GFX9-NEXT:    v_readlane_b32 s34, v42, 2
4355 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4356 ; GFX9-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4357 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4358 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4359 ; GFX9-NEXT:    s_mov_b32 s33, s34
4360 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4361 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4363 ; GFX10-LABEL: test_call_external_void_func_v3i8_ret:
4364 ; GFX10:       ; %bb.0:
4365 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4366 ; GFX10-NEXT:    s_mov_b32 s34, s33
4367 ; GFX10-NEXT:    s_mov_b32 s33, s32
4368 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4369 ; GFX10-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4370 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4371 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4372 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4373 ; GFX10-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4374 ; GFX10-NEXT:    v_mov_b32_e32 v40, 0
4375 ; GFX10-NEXT:    v_mov_b32_e32 v41, 0
4376 ; GFX10-NEXT:    v_writelane_b32 v42, s34, 2
4377 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i8_ret@abs32@hi
4378 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i8_ret@abs32@lo
4379 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4380 ; GFX10-NEXT:    global_load_dword v0, v[40:41], off
4381 ; GFX10-NEXT:    v_writelane_b32 v42, s30, 0
4382 ; GFX10-NEXT:    v_writelane_b32 v42, s31, 1
4383 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4384 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
4385 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4386 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4387 ; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v1
4388 ; GFX10-NEXT:    v_mov_b32_e32 v3, 2
4389 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
4390 ; GFX10-NEXT:    v_readlane_b32 s31, v42, 1
4391 ; GFX10-NEXT:    v_readlane_b32 s30, v42, 0
4392 ; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4393 ; GFX10-NEXT:    v_readlane_b32 s34, v42, 2
4394 ; GFX10-NEXT:    global_store_byte v[3:4], v2, off
4395 ; GFX10-NEXT:    global_store_short v[40:41], v0, off
4396 ; GFX10-NEXT:    s_clause 0x1
4397 ; GFX10-NEXT:    buffer_load_dword v41, off, s[0:3], s33
4398 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4
4399 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4400 ; GFX10-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4401 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4402 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4403 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4404 ; GFX10-NEXT:    s_mov_b32 s33, s34
4405 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4406 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4408 ; GFX11-LABEL: test_call_external_void_func_v3i8_ret:
4409 ; GFX11:       ; %bb.0:
4410 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4411 ; GFX11-NEXT:    s_mov_b32 s0, s33
4412 ; GFX11-NEXT:    s_mov_b32 s33, s32
4413 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4414 ; GFX11-NEXT:    scratch_store_b32 off, v42, s33 offset:8 ; 4-byte Folded Spill
4415 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4416 ; GFX11-NEXT:    s_clause 0x1
4417 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:4
4418 ; GFX11-NEXT:    scratch_store_b32 off, v41, s33
4419 ; GFX11-NEXT:    v_mov_b32_e32 v40, 0
4420 ; GFX11-NEXT:    v_mov_b32_e32 v41, 0
4421 ; GFX11-NEXT:    v_writelane_b32 v42, s0, 2
4422 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i8_ret@abs32@hi
4423 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i8_ret@abs32@lo
4424 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4425 ; GFX11-NEXT:    global_load_b32 v0, v[40:41], off
4426 ; GFX11-NEXT:    v_writelane_b32 v42, s30, 0
4427 ; GFX11-NEXT:    v_writelane_b32 v42, s31, 1
4428 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4429 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
4430 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4431 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4432 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4433 ; GFX11-NEXT:    v_lshlrev_b16 v3, 8, v1
4434 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xff, v0
4435 ; GFX11-NEXT:    v_mov_b32_e32 v0, 2
4436 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
4437 ; GFX11-NEXT:    v_readlane_b32 s31, v42, 1
4438 ; GFX11-NEXT:    v_readlane_b32 s30, v42, 0
4439 ; GFX11-NEXT:    v_or_b32_e32 v3, v4, v3
4440 ; GFX11-NEXT:    v_readlane_b32 s0, v42, 2
4441 ; GFX11-NEXT:    s_clause 0x1
4442 ; GFX11-NEXT:    global_store_b8 v[0:1], v2, off
4443 ; GFX11-NEXT:    global_store_b16 v[40:41], v3, off
4444 ; GFX11-NEXT:    s_clause 0x1
4445 ; GFX11-NEXT:    scratch_load_b32 v41, off, s33
4446 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:4
4447 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4448 ; GFX11-NEXT:    scratch_load_b32 v42, off, s33 offset:8 ; 4-byte Folded Reload
4449 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4450 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4451 ; GFX11-NEXT:    s_mov_b32 s33, s0
4452 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4453 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4455 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i8_ret:
4456 ; GFX10-SCRATCH:       ; %bb.0:
4457 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4458 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
4459 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
4460 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4461 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v42, s33 offset:8 ; 4-byte Folded Spill
4462 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4463 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4464 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:4 ; 4-byte Folded Spill
4465 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v41, s33 ; 4-byte Folded Spill
4466 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v40, 0
4467 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v41, 0
4468 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s0, 2
4469 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i8_ret@abs32@hi
4470 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i8_ret@abs32@lo
4471 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
4472 ; GFX10-SCRATCH-NEXT:    global_load_dword v0, v[40:41], off
4473 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s30, 0
4474 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s31, 1
4475 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4476 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
4477 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4478 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4479 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v1, 8, v1
4480 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 2
4481 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 0
4482 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v42, 1
4483 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v42, 0
4484 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4485 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v42, 2
4486 ; GFX10-SCRATCH-NEXT:    global_store_byte v[3:4], v2, off
4487 ; GFX10-SCRATCH-NEXT:    global_store_short v[40:41], v0, off
4488 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
4489 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v41, off, s33
4490 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:4
4491 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4492 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v42, off, s33 offset:8 ; 4-byte Folded Reload
4493 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4494 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4495 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
4496 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
4497 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4498 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
4499   %val = load <3 x i8>, ptr addrspace(1) null
4500   %tmp = call amdgpu_gfx <3 x i8> @external_void_func_v3i8_ret(<3 x i8> %val)
4501   store <3 x i8> %tmp, ptr addrspace(1) null
4502   ret void
4506 define amdgpu_gfx void @test_call_external_void_func_v4i8_ret() #0 {
4507 ; GFX9-LABEL: test_call_external_void_func_v4i8_ret:
4508 ; GFX9:       ; %bb.0:
4509 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4510 ; GFX9-NEXT:    s_mov_b32 s34, s33
4511 ; GFX9-NEXT:    s_mov_b32 s33, s32
4512 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4513 ; GFX9-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4514 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4515 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4516 ; GFX9-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4517 ; GFX9-NEXT:    v_mov_b32_e32 v40, 0
4518 ; GFX9-NEXT:    v_mov_b32_e32 v41, 0
4519 ; GFX9-NEXT:    global_load_dword v0, v[40:41], off
4520 ; GFX9-NEXT:    v_writelane_b32 v42, s34, 2
4521 ; GFX9-NEXT:    v_writelane_b32 v42, s30, 0
4522 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i8_ret@abs32@hi
4523 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i8_ret@abs32@lo
4524 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4525 ; GFX9-NEXT:    v_writelane_b32 v42, s31, 1
4526 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4527 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4528 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
4529 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
4530 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4531 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
4532 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4533 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
4534 ; GFX9-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4535 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
4536 ; GFX9-NEXT:    global_store_dword v[40:41], v0, off
4537 ; GFX9-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload
4538 ; GFX9-NEXT:    s_nop 0
4539 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
4540 ; GFX9-NEXT:    v_readlane_b32 s31, v42, 1
4541 ; GFX9-NEXT:    v_readlane_b32 s30, v42, 0
4542 ; GFX9-NEXT:    v_readlane_b32 s34, v42, 2
4543 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4544 ; GFX9-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4545 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4546 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4547 ; GFX9-NEXT:    s_mov_b32 s33, s34
4548 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4549 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4551 ; GFX10-LABEL: test_call_external_void_func_v4i8_ret:
4552 ; GFX10:       ; %bb.0:
4553 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4554 ; GFX10-NEXT:    s_mov_b32 s34, s33
4555 ; GFX10-NEXT:    s_mov_b32 s33, s32
4556 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4557 ; GFX10-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4558 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4559 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4560 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4561 ; GFX10-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4562 ; GFX10-NEXT:    v_mov_b32_e32 v40, 0
4563 ; GFX10-NEXT:    v_mov_b32_e32 v41, 0
4564 ; GFX10-NEXT:    v_writelane_b32 v42, s34, 2
4565 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i8_ret@abs32@hi
4566 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i8_ret@abs32@lo
4567 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4568 ; GFX10-NEXT:    global_load_dword v0, v[40:41], off
4569 ; GFX10-NEXT:    v_writelane_b32 v42, s30, 0
4570 ; GFX10-NEXT:    v_writelane_b32 v42, s31, 1
4571 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4572 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
4573 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4574 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
4575 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4576 ; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v1
4577 ; GFX10-NEXT:    v_lshlrev_b16 v3, 8, v3
4578 ; GFX10-NEXT:    v_readlane_b32 s31, v42, 1
4579 ; GFX10-NEXT:    v_readlane_b32 s30, v42, 0
4580 ; GFX10-NEXT:    v_readlane_b32 s34, v42, 2
4581 ; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4582 ; GFX10-NEXT:    v_or_b32_sdwa v1, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4583 ; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
4584 ; GFX10-NEXT:    global_store_dword v[40:41], v0, off
4585 ; GFX10-NEXT:    s_clause 0x1
4586 ; GFX10-NEXT:    buffer_load_dword v41, off, s[0:3], s33
4587 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4
4588 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4589 ; GFX10-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4590 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4591 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4592 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4593 ; GFX10-NEXT:    s_mov_b32 s33, s34
4594 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4595 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4597 ; GFX11-LABEL: test_call_external_void_func_v4i8_ret:
4598 ; GFX11:       ; %bb.0:
4599 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4600 ; GFX11-NEXT:    s_mov_b32 s0, s33
4601 ; GFX11-NEXT:    s_mov_b32 s33, s32
4602 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4603 ; GFX11-NEXT:    scratch_store_b32 off, v42, s33 offset:8 ; 4-byte Folded Spill
4604 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4605 ; GFX11-NEXT:    s_clause 0x1
4606 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:4
4607 ; GFX11-NEXT:    scratch_store_b32 off, v41, s33
4608 ; GFX11-NEXT:    v_mov_b32_e32 v40, 0
4609 ; GFX11-NEXT:    v_mov_b32_e32 v41, 0
4610 ; GFX11-NEXT:    v_writelane_b32 v42, s0, 2
4611 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i8_ret@abs32@hi
4612 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i8_ret@abs32@lo
4613 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4614 ; GFX11-NEXT:    global_load_b32 v0, v[40:41], off
4615 ; GFX11-NEXT:    v_writelane_b32 v42, s30, 0
4616 ; GFX11-NEXT:    v_writelane_b32 v42, s31, 1
4617 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4618 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
4619 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4620 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
4621 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4622 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
4623 ; GFX11-NEXT:    v_lshlrev_b16 v1, 8, v1
4624 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xff, v0
4625 ; GFX11-NEXT:    v_lshlrev_b16 v3, 8, v3
4626 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xff, v2
4627 ; GFX11-NEXT:    v_readlane_b32 s31, v42, 1
4628 ; GFX11-NEXT:    v_readlane_b32 s30, v42, 0
4629 ; GFX11-NEXT:    v_or_b32_e32 v0, v0, v1
4630 ; GFX11-NEXT:    v_readlane_b32 s0, v42, 2
4631 ; GFX11-NEXT:    v_or_b32_e32 v1, v2, v3
4632 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
4633 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
4634 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
4635 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4636 ; GFX11-NEXT:    v_or_b32_e32 v0, v0, v1
4637 ; GFX11-NEXT:    global_store_b32 v[40:41], v0, off
4638 ; GFX11-NEXT:    s_clause 0x1
4639 ; GFX11-NEXT:    scratch_load_b32 v41, off, s33
4640 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:4
4641 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4642 ; GFX11-NEXT:    scratch_load_b32 v42, off, s33 offset:8 ; 4-byte Folded Reload
4643 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4644 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4645 ; GFX11-NEXT:    s_mov_b32 s33, s0
4646 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4647 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4649 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i8_ret:
4650 ; GFX10-SCRATCH:       ; %bb.0:
4651 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4652 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
4653 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
4654 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4655 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v42, s33 offset:8 ; 4-byte Folded Spill
4656 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4657 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4658 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:4 ; 4-byte Folded Spill
4659 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v41, s33 ; 4-byte Folded Spill
4660 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v40, 0
4661 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v41, 0
4662 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s0, 2
4663 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i8_ret@abs32@hi
4664 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i8_ret@abs32@lo
4665 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
4666 ; GFX10-SCRATCH-NEXT:    global_load_dword v0, v[40:41], off
4667 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s30, 0
4668 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s31, 1
4669 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4670 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
4671 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4672 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
4673 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4674 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v1, 8, v1
4675 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v3, 8, v3
4676 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v42, 1
4677 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v42, 0
4678 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v42, 2
4679 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4680 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v1, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4681 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
4682 ; GFX10-SCRATCH-NEXT:    global_store_dword v[40:41], v0, off
4683 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
4684 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v41, off, s33
4685 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:4
4686 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4687 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v42, off, s33 offset:8 ; 4-byte Folded Reload
4688 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4689 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4690 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
4691 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
4692 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4693 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
4694   %val = load <4 x i8>, ptr addrspace(1) null
4695   %tmp = call amdgpu_gfx <4 x i8> @external_void_func_v4i8_ret(<4 x i8> %val)
4696   store <4 x i8> %tmp, ptr addrspace(1) null
4697   ret void
4701 define amdgpu_gfx void @test_call_external_void_func_v5i8_ret() #0 {
4702 ; GFX9-LABEL: test_call_external_void_func_v5i8_ret:
4703 ; GFX9:       ; %bb.0:
4704 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4705 ; GFX9-NEXT:    s_mov_b32 s34, s33
4706 ; GFX9-NEXT:    s_mov_b32 s33, s32
4707 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4708 ; GFX9-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4709 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4710 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4711 ; GFX9-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4712 ; GFX9-NEXT:    v_mov_b32_e32 v40, 0
4713 ; GFX9-NEXT:    v_mov_b32_e32 v41, 0
4714 ; GFX9-NEXT:    global_load_dwordx2 v[5:6], v[40:41], off
4715 ; GFX9-NEXT:    v_writelane_b32 v42, s34, 2
4716 ; GFX9-NEXT:    v_writelane_b32 v42, s30, 0
4717 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v5i8_ret@abs32@hi
4718 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v5i8_ret@abs32@lo
4719 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4720 ; GFX9-NEXT:    v_writelane_b32 v42, s31, 1
4721 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4722 ; GFX9-NEXT:    v_lshrrev_b64 v[3:4], 24, v[5:6]
4723 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 8, v5
4724 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
4725 ; GFX9-NEXT:    v_mov_b32_e32 v0, v5
4726 ; GFX9-NEXT:    v_mov_b32_e32 v4, v6
4727 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4728 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
4729 ; GFX9-NEXT:    v_or_b32_sdwa v5, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4730 ; GFX9-NEXT:    v_lshlrev_b16_e32 v0, 8, v3
4731 ; GFX9-NEXT:    v_or_b32_sdwa v2, v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4732 ; GFX9-NEXT:    v_mov_b32_e32 v0, 4
4733 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
4734 ; GFX9-NEXT:    v_or_b32_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
4735 ; GFX9-NEXT:    global_store_byte v[0:1], v4, off
4736 ; GFX9-NEXT:    global_store_dword v[40:41], v2, off
4737 ; GFX9-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload
4738 ; GFX9-NEXT:    s_nop 0
4739 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
4740 ; GFX9-NEXT:    v_readlane_b32 s31, v42, 1
4741 ; GFX9-NEXT:    v_readlane_b32 s30, v42, 0
4742 ; GFX9-NEXT:    v_readlane_b32 s34, v42, 2
4743 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4744 ; GFX9-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4745 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4746 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4747 ; GFX9-NEXT:    s_mov_b32 s33, s34
4748 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4749 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4751 ; GFX10-LABEL: test_call_external_void_func_v5i8_ret:
4752 ; GFX10:       ; %bb.0:
4753 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4754 ; GFX10-NEXT:    s_mov_b32 s34, s33
4755 ; GFX10-NEXT:    s_mov_b32 s33, s32
4756 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4757 ; GFX10-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4758 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4759 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4760 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4761 ; GFX10-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4762 ; GFX10-NEXT:    v_mov_b32_e32 v40, 0
4763 ; GFX10-NEXT:    v_mov_b32_e32 v41, 0
4764 ; GFX10-NEXT:    v_writelane_b32 v42, s34, 2
4765 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v5i8_ret@abs32@hi
4766 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v5i8_ret@abs32@lo
4767 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4768 ; GFX10-NEXT:    global_load_dwordx2 v[5:6], v[40:41], off
4769 ; GFX10-NEXT:    v_writelane_b32 v42, s30, 0
4770 ; GFX10-NEXT:    v_writelane_b32 v42, s31, 1
4771 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4772 ; GFX10-NEXT:    v_lshrrev_b64 v[3:4], 24, v[5:6]
4773 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 8, v5
4774 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
4775 ; GFX10-NEXT:    v_mov_b32_e32 v0, v5
4776 ; GFX10-NEXT:    v_mov_b32_e32 v4, v6
4777 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4778 ; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v1
4779 ; GFX10-NEXT:    v_lshlrev_b16 v3, 8, v3
4780 ; GFX10-NEXT:    v_readlane_b32 s31, v42, 1
4781 ; GFX10-NEXT:    v_readlane_b32 s30, v42, 0
4782 ; GFX10-NEXT:    v_readlane_b32 s34, v42, 2
4783 ; GFX10-NEXT:    v_or_b32_sdwa v5, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4784 ; GFX10-NEXT:    v_or_b32_sdwa v2, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4785 ; GFX10-NEXT:    v_mov_b32_e32 v0, 4
4786 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
4787 ; GFX10-NEXT:    v_or_b32_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
4788 ; GFX10-NEXT:    global_store_byte v[0:1], v4, off
4789 ; GFX10-NEXT:    global_store_dword v[40:41], v2, off
4790 ; GFX10-NEXT:    s_clause 0x1
4791 ; GFX10-NEXT:    buffer_load_dword v41, off, s[0:3], s33
4792 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4
4793 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4794 ; GFX10-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4795 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4796 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4797 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4798 ; GFX10-NEXT:    s_mov_b32 s33, s34
4799 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4800 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4802 ; GFX11-LABEL: test_call_external_void_func_v5i8_ret:
4803 ; GFX11:       ; %bb.0:
4804 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4805 ; GFX11-NEXT:    s_mov_b32 s0, s33
4806 ; GFX11-NEXT:    s_mov_b32 s33, s32
4807 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4808 ; GFX11-NEXT:    scratch_store_b32 off, v42, s33 offset:8 ; 4-byte Folded Spill
4809 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4810 ; GFX11-NEXT:    s_clause 0x1
4811 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:4
4812 ; GFX11-NEXT:    scratch_store_b32 off, v41, s33
4813 ; GFX11-NEXT:    v_mov_b32_e32 v40, 0
4814 ; GFX11-NEXT:    v_mov_b32_e32 v41, 0
4815 ; GFX11-NEXT:    v_writelane_b32 v42, s0, 2
4816 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v5i8_ret@abs32@hi
4817 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v5i8_ret@abs32@lo
4818 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4819 ; GFX11-NEXT:    global_load_b64 v[5:6], v[40:41], off
4820 ; GFX11-NEXT:    v_writelane_b32 v42, s30, 0
4821 ; GFX11-NEXT:    v_writelane_b32 v42, s31, 1
4822 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4823 ; GFX11-NEXT:    v_mov_b32_e32 v0, v5
4824 ; GFX11-NEXT:    v_lshrrev_b64 v[3:4], 24, v[5:6]
4825 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 8, v5
4826 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
4827 ; GFX11-NEXT:    v_mov_b32_e32 v4, v6
4828 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4829 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
4830 ; GFX11-NEXT:    v_lshlrev_b16 v1, 8, v1
4831 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xff, v0
4832 ; GFX11-NEXT:    v_lshlrev_b16 v3, 8, v3
4833 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xff, v2
4834 ; GFX11-NEXT:    v_readlane_b32 s31, v42, 1
4835 ; GFX11-NEXT:    v_readlane_b32 s30, v42, 0
4836 ; GFX11-NEXT:    v_or_b32_e32 v0, v0, v1
4837 ; GFX11-NEXT:    v_readlane_b32 s0, v42, 2
4838 ; GFX11-NEXT:    v_or_b32_e32 v1, v2, v3
4839 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
4840 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v0
4841 ; GFX11-NEXT:    v_dual_mov_b32 v0, 4 :: v_dual_lshlrev_b32 v3, 16, v1
4842 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
4843 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4844 ; GFX11-NEXT:    v_or_b32_e32 v2, v2, v3
4845 ; GFX11-NEXT:    s_clause 0x1
4846 ; GFX11-NEXT:    global_store_b8 v[0:1], v4, off
4847 ; GFX11-NEXT:    global_store_b32 v[40:41], v2, off
4848 ; GFX11-NEXT:    s_clause 0x1
4849 ; GFX11-NEXT:    scratch_load_b32 v41, off, s33
4850 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:4
4851 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
4852 ; GFX11-NEXT:    scratch_load_b32 v42, off, s33 offset:8 ; 4-byte Folded Reload
4853 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
4854 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4855 ; GFX11-NEXT:    s_mov_b32 s33, s0
4856 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4857 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4859 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v5i8_ret:
4860 ; GFX10-SCRATCH:       ; %bb.0:
4861 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4862 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
4863 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
4864 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4865 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v42, s33 offset:8 ; 4-byte Folded Spill
4866 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4867 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4868 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:4 ; 4-byte Folded Spill
4869 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v41, s33 ; 4-byte Folded Spill
4870 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v40, 0
4871 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v41, 0
4872 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s0, 2
4873 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v5i8_ret@abs32@hi
4874 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v5i8_ret@abs32@lo
4875 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
4876 ; GFX10-SCRATCH-NEXT:    global_load_dwordx2 v[5:6], v[40:41], off
4877 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s30, 0
4878 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s31, 1
4879 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4880 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b64 v[3:4], 24, v[5:6]
4881 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v1, 8, v5
4882 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
4883 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, v5
4884 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, v6
4885 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4886 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v1, 8, v1
4887 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v3, 8, v3
4888 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v42, 1
4889 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v42, 0
4890 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v42, 2
4891 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v5, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4892 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v2, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4893 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 4
4894 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
4895 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
4896 ; GFX10-SCRATCH-NEXT:    global_store_byte v[0:1], v4, off
4897 ; GFX10-SCRATCH-NEXT:    global_store_dword v[40:41], v2, off
4898 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
4899 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v41, off, s33
4900 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:4
4901 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
4902 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v42, off, s33 offset:8 ; 4-byte Folded Reload
4903 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
4904 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
4905 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
4906 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
4907 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
4908 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
4909   %val = load <5 x i8>, ptr addrspace(1) null
4910   %tmp = call amdgpu_gfx <5 x i8> @external_void_func_v5i8_ret(<5 x i8> %val)
4911   store <5 x i8> %tmp, ptr addrspace(1) null
4912   ret void
4916 define amdgpu_gfx void @test_call_external_void_func_v8i8_ret() #0 {
4917 ; GFX9-LABEL: test_call_external_void_func_v8i8_ret:
4918 ; GFX9:       ; %bb.0:
4919 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4920 ; GFX9-NEXT:    s_mov_b32 s34, s33
4921 ; GFX9-NEXT:    s_mov_b32 s33, s32
4922 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4923 ; GFX9-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4924 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4925 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4926 ; GFX9-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4927 ; GFX9-NEXT:    v_mov_b32_e32 v40, 0
4928 ; GFX9-NEXT:    v_mov_b32_e32 v41, 0
4929 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[40:41], off
4930 ; GFX9-NEXT:    v_writelane_b32 v42, s34, 2
4931 ; GFX9-NEXT:    v_writelane_b32 v42, s30, 0
4932 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v8i8_ret@abs32@hi
4933 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v8i8_ret@abs32@lo
4934 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4935 ; GFX9-NEXT:    v_writelane_b32 v42, s31, 1
4936 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4937 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
4938 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4939 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
4940 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
4941 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
4942 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
4943 ; GFX9-NEXT:    v_mov_b32_e32 v4, v1
4944 ; GFX9-NEXT:    v_mov_b32_e32 v1, v8
4945 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
4946 ; GFX9-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
4947 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
4948 ; GFX9-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4949 ; GFX9-NEXT:    v_lshlrev_b16_e32 v5, 8, v7
4950 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4951 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
4952 ; GFX9-NEXT:    v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4953 ; GFX9-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
4954 ; GFX9-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
4955 ; GFX9-NEXT:    v_or_b32_sdwa v3, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
4956 ; GFX9-NEXT:    global_store_dwordx2 v[40:41], v[3:4], off
4957 ; GFX9-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload
4958 ; GFX9-NEXT:    s_nop 0
4959 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
4960 ; GFX9-NEXT:    v_readlane_b32 s31, v42, 1
4961 ; GFX9-NEXT:    v_readlane_b32 s30, v42, 0
4962 ; GFX9-NEXT:    v_readlane_b32 s34, v42, 2
4963 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
4964 ; GFX9-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
4965 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
4966 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4967 ; GFX9-NEXT:    s_mov_b32 s33, s34
4968 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4969 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4971 ; GFX10-LABEL: test_call_external_void_func_v8i8_ret:
4972 ; GFX10:       ; %bb.0:
4973 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4974 ; GFX10-NEXT:    s_mov_b32 s34, s33
4975 ; GFX10-NEXT:    s_mov_b32 s33, s32
4976 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
4977 ; GFX10-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
4978 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4979 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
4980 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
4981 ; GFX10-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
4982 ; GFX10-NEXT:    v_mov_b32_e32 v40, 0
4983 ; GFX10-NEXT:    v_mov_b32_e32 v41, 0
4984 ; GFX10-NEXT:    v_writelane_b32 v42, s34, 2
4985 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v8i8_ret@abs32@hi
4986 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v8i8_ret@abs32@lo
4987 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4988 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[40:41], off
4989 ; GFX10-NEXT:    v_writelane_b32 v42, s30, 0
4990 ; GFX10-NEXT:    v_writelane_b32 v42, s31, 1
4991 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4992 ; GFX10-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
4993 ; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
4994 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
4995 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
4996 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
4997 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
4998 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
4999 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
5000 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5001 ; GFX10-NEXT:    v_lshlrev_b16 v5, 8, v5
5002 ; GFX10-NEXT:    v_lshlrev_b16 v7, 8, v7
5003 ; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v1
5004 ; GFX10-NEXT:    v_lshlrev_b16 v3, 8, v3
5005 ; GFX10-NEXT:    v_readlane_b32 s31, v42, 1
5006 ; GFX10-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5007 ; GFX10-NEXT:    v_or_b32_sdwa v5, v6, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5008 ; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5009 ; GFX10-NEXT:    v_or_b32_sdwa v2, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5010 ; GFX10-NEXT:    v_readlane_b32 s30, v42, 0
5011 ; GFX10-NEXT:    v_readlane_b32 s34, v42, 2
5012 ; GFX10-NEXT:    v_or_b32_sdwa v1, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5013 ; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5014 ; GFX10-NEXT:    global_store_dwordx2 v[40:41], v[0:1], off
5015 ; GFX10-NEXT:    s_clause 0x1
5016 ; GFX10-NEXT:    buffer_load_dword v41, off, s[0:3], s33
5017 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4
5018 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5019 ; GFX10-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
5020 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5021 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5022 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
5023 ; GFX10-NEXT:    s_mov_b32 s33, s34
5024 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5025 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5027 ; GFX11-LABEL: test_call_external_void_func_v8i8_ret:
5028 ; GFX11:       ; %bb.0:
5029 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5030 ; GFX11-NEXT:    s_mov_b32 s0, s33
5031 ; GFX11-NEXT:    s_mov_b32 s33, s32
5032 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5033 ; GFX11-NEXT:    scratch_store_b32 off, v42, s33 offset:8 ; 4-byte Folded Spill
5034 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5035 ; GFX11-NEXT:    s_clause 0x1
5036 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:4
5037 ; GFX11-NEXT:    scratch_store_b32 off, v41, s33
5038 ; GFX11-NEXT:    v_mov_b32_e32 v40, 0
5039 ; GFX11-NEXT:    v_mov_b32_e32 v41, 0
5040 ; GFX11-NEXT:    v_writelane_b32 v42, s0, 2
5041 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v8i8_ret@abs32@hi
5042 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v8i8_ret@abs32@lo
5043 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
5044 ; GFX11-NEXT:    global_load_b64 v[0:1], v[40:41], off
5045 ; GFX11-NEXT:    v_writelane_b32 v42, s30, 0
5046 ; GFX11-NEXT:    v_writelane_b32 v42, s31, 1
5047 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5048 ; GFX11-NEXT:    v_mov_b32_e32 v4, v1
5049 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
5050 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
5051 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
5052 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
5053 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
5054 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
5055 ; GFX11-NEXT:    v_mov_b32_e32 v1, v8
5056 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5057 ; GFX11-NEXT:    v_lshlrev_b16 v5, 8, v5
5058 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xff, v4
5059 ; GFX11-NEXT:    v_lshlrev_b16 v7, 8, v7
5060 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xff, v6
5061 ; GFX11-NEXT:    v_lshlrev_b16 v1, 8, v1
5062 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xff, v0
5063 ; GFX11-NEXT:    v_lshlrev_b16 v3, 8, v3
5064 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xff, v2
5065 ; GFX11-NEXT:    v_or_b32_e32 v4, v4, v5
5066 ; GFX11-NEXT:    v_or_b32_e32 v5, v6, v7
5067 ; GFX11-NEXT:    v_or_b32_e32 v0, v0, v1
5068 ; GFX11-NEXT:    v_readlane_b32 s31, v42, 1
5069 ; GFX11-NEXT:    v_or_b32_e32 v1, v2, v3
5070 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v4
5071 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v5
5072 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
5073 ; GFX11-NEXT:    v_readlane_b32 s30, v42, 0
5074 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
5075 ; GFX11-NEXT:    v_readlane_b32 s0, v42, 2
5076 ; GFX11-NEXT:    v_or_b32_e32 v1, v2, v3
5077 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
5078 ; GFX11-NEXT:    v_or_b32_e32 v0, v0, v4
5079 ; GFX11-NEXT:    global_store_b64 v[40:41], v[0:1], off
5080 ; GFX11-NEXT:    s_clause 0x1
5081 ; GFX11-NEXT:    scratch_load_b32 v41, off, s33
5082 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:4
5083 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5084 ; GFX11-NEXT:    scratch_load_b32 v42, off, s33 offset:8 ; 4-byte Folded Reload
5085 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5086 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
5087 ; GFX11-NEXT:    s_mov_b32 s33, s0
5088 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5089 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5091 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v8i8_ret:
5092 ; GFX10-SCRATCH:       ; %bb.0:
5093 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5094 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
5095 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
5096 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
5097 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v42, s33 offset:8 ; 4-byte Folded Spill
5098 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
5099 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
5100 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:4 ; 4-byte Folded Spill
5101 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v41, s33 ; 4-byte Folded Spill
5102 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v40, 0
5103 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v41, 0
5104 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s0, 2
5105 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v8i8_ret@abs32@hi
5106 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v8i8_ret@abs32@lo
5107 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
5108 ; GFX10-SCRATCH-NEXT:    global_load_dwordx2 v[0:1], v[40:41], off
5109 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s30, 0
5110 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s31, 1
5111 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
5112 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
5113 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
5114 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
5115 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
5116 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
5117 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
5118 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, v1
5119 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, v8
5120 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5121 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v5, 8, v5
5122 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v7, 8, v7
5123 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v1, 8, v1
5124 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v3, 8, v3
5125 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v42, 1
5126 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5127 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v5, v6, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5128 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5129 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v2, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5130 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v42, 0
5131 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v42, 2
5132 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v1, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5133 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5134 ; GFX10-SCRATCH-NEXT:    global_store_dwordx2 v[40:41], v[0:1], off
5135 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
5136 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v41, off, s33
5137 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:4
5138 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
5139 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v42, off, s33 offset:8 ; 4-byte Folded Reload
5140 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
5141 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
5142 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
5143 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
5144 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
5145 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
5146   %val = load <8 x i8>, ptr addrspace(1) null
5147   %tmp = call amdgpu_gfx <8 x i8> @external_void_func_v8i8_ret(<8 x i8> %val)
5148   store <8 x i8> %tmp, ptr addrspace(1) null
5149   ret void
5153 define amdgpu_gfx void @test_call_external_void_func_v32i8_ret() #0 {
5154 ; GFX9-LABEL: test_call_external_void_func_v32i8_ret:
5155 ; GFX9:       ; %bb.0:
5156 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5157 ; GFX9-NEXT:    s_mov_b32 s34, s33
5158 ; GFX9-NEXT:    s_mov_b32 s33, s32
5159 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
5160 ; GFX9-NEXT:    buffer_store_dword v44, off, s[0:3], s33 offset:16 ; 4-byte Folded Spill
5161 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
5162 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill
5163 ; GFX9-NEXT:    buffer_store_dword v41, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
5164 ; GFX9-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
5165 ; GFX9-NEXT:    buffer_store_dword v43, off, s[0:3], s33 ; 4-byte Folded Spill
5166 ; GFX9-NEXT:    v_mov_b32_e32 v40, 0
5167 ; GFX9-NEXT:    v_mov_b32_e32 v42, 16
5168 ; GFX9-NEXT:    v_mov_b32_e32 v41, 0
5169 ; GFX9-NEXT:    v_mov_b32_e32 v43, 0
5170 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[40:41], off
5171 ; GFX9-NEXT:    global_load_dwordx4 v[16:19], v[42:43], off
5172 ; GFX9-NEXT:    v_writelane_b32 v44, s34, 2
5173 ; GFX9-NEXT:    v_writelane_b32 v44, s30, 0
5174 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i8_ret@abs32@hi
5175 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i8_ret@abs32@lo
5176 ; GFX9-NEXT:    s_addk_i32 s32, 0x800
5177 ; GFX9-NEXT:    v_writelane_b32 v44, s31, 1
5178 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
5179 ; GFX9-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
5180 ; GFX9-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
5181 ; GFX9-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
5182 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5183 ; GFX9-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
5184 ; GFX9-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
5185 ; GFX9-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
5186 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
5187 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
5188 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
5189 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
5190 ; GFX9-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
5191 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
5192 ; GFX9-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
5193 ; GFX9-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
5194 ; GFX9-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
5195 ; GFX9-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
5196 ; GFX9-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
5197 ; GFX9-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
5198 ; GFX9-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
5199 ; GFX9-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
5200 ; GFX9-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
5201 ; GFX9-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
5202 ; GFX9-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
5203 ; GFX9-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
5204 ; GFX9-NEXT:    v_mov_b32_e32 v4, v1
5205 ; GFX9-NEXT:    v_mov_b32_e32 v8, v2
5206 ; GFX9-NEXT:    v_mov_b32_e32 v12, v3
5207 ; GFX9-NEXT:    v_mov_b32_e32 v20, v17
5208 ; GFX9-NEXT:    v_mov_b32_e32 v24, v18
5209 ; GFX9-NEXT:    v_mov_b32_e32 v28, v19
5210 ; GFX9-NEXT:    v_mov_b32_e32 v1, v35
5211 ; GFX9-NEXT:    v_mov_b32_e32 v2, v36
5212 ; GFX9-NEXT:    v_mov_b32_e32 v3, v37
5213 ; GFX9-NEXT:    v_mov_b32_e32 v17, v32
5214 ; GFX9-NEXT:    v_mov_b32_e32 v18, v33
5215 ; GFX9-NEXT:    v_mov_b32_e32 v19, v34
5216 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5217 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
5218 ; GFX9-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
5219 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5220 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
5221 ; GFX9-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5222 ; GFX9-NEXT:    v_lshlrev_b16_e32 v5, 8, v7
5223 ; GFX9-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5224 ; GFX9-NEXT:    v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5225 ; GFX9-NEXT:    v_or_b32_sdwa v6, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5226 ; GFX9-NEXT:    v_lshlrev_b16_e32 v0, 8, v29
5227 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v31
5228 ; GFX9-NEXT:    v_or_b32_sdwa v0, v28, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5229 ; GFX9-NEXT:    v_or_b32_sdwa v1, v30, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5230 ; GFX9-NEXT:    v_or_b32_sdwa v3, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5231 ; GFX9-NEXT:    v_lshlrev_b16_e32 v0, 8, v25
5232 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v27
5233 ; GFX9-NEXT:    v_or_b32_sdwa v0, v24, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5234 ; GFX9-NEXT:    v_or_b32_sdwa v1, v26, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5235 ; GFX9-NEXT:    v_or_b32_sdwa v2, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5236 ; GFX9-NEXT:    v_lshlrev_b16_e32 v0, 8, v21
5237 ; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v23
5238 ; GFX9-NEXT:    v_or_b32_sdwa v0, v20, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5239 ; GFX9-NEXT:    v_or_b32_sdwa v1, v22, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5240 ; GFX9-NEXT:    v_lshlrev_b16_e32 v13, 8, v13
5241 ; GFX9-NEXT:    v_lshlrev_b16_e32 v9, 8, v9
5242 ; GFX9-NEXT:    v_or_b32_sdwa v7, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5243 ; GFX9-NEXT:    v_or_b32_sdwa v1, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5244 ; GFX9-NEXT:    v_lshlrev_b16_e32 v0, 8, v17
5245 ; GFX9-NEXT:    v_lshlrev_b16_e32 v4, 8, v19
5246 ; GFX9-NEXT:    v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5247 ; GFX9-NEXT:    v_lshlrev_b16_e32 v13, 8, v15
5248 ; GFX9-NEXT:    v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5249 ; GFX9-NEXT:    v_lshlrev_b16_e32 v9, 8, v11
5250 ; GFX9-NEXT:    v_or_b32_sdwa v0, v16, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5251 ; GFX9-NEXT:    v_or_b32_sdwa v4, v18, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5252 ; GFX9-NEXT:    v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5253 ; GFX9-NEXT:    v_or_b32_sdwa v10, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5254 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5255 ; GFX9-NEXT:    v_or_b32_sdwa v9, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5256 ; GFX9-NEXT:    v_or_b32_sdwa v8, v8, v10 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5257 ; GFX9-NEXT:    global_store_dwordx4 v[42:43], v[0:3], off
5258 ; GFX9-NEXT:    global_store_dwordx4 v[40:41], v[6:9], off
5259 ; GFX9-NEXT:    buffer_load_dword v43, off, s[0:3], s33 ; 4-byte Folded Reload
5260 ; GFX9-NEXT:    s_nop 0
5261 ; GFX9-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
5262 ; GFX9-NEXT:    buffer_load_dword v41, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
5263 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload
5264 ; GFX9-NEXT:    v_readlane_b32 s31, v44, 1
5265 ; GFX9-NEXT:    v_readlane_b32 s30, v44, 0
5266 ; GFX9-NEXT:    v_readlane_b32 s34, v44, 2
5267 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
5268 ; GFX9-NEXT:    buffer_load_dword v44, off, s[0:3], s33 offset:16 ; 4-byte Folded Reload
5269 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
5270 ; GFX9-NEXT:    s_addk_i32 s32, 0xf800
5271 ; GFX9-NEXT:    s_mov_b32 s33, s34
5272 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5273 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5275 ; GFX10-LABEL: test_call_external_void_func_v32i8_ret:
5276 ; GFX10:       ; %bb.0:
5277 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5278 ; GFX10-NEXT:    s_mov_b32 s34, s33
5279 ; GFX10-NEXT:    s_mov_b32 s33, s32
5280 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5281 ; GFX10-NEXT:    buffer_store_dword v44, off, s[0:3], s33 offset:16 ; 4-byte Folded Spill
5282 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5283 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5284 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill
5285 ; GFX10-NEXT:    buffer_store_dword v41, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
5286 ; GFX10-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
5287 ; GFX10-NEXT:    buffer_store_dword v43, off, s[0:3], s33 ; 4-byte Folded Spill
5288 ; GFX10-NEXT:    v_mov_b32_e32 v40, 0
5289 ; GFX10-NEXT:    v_mov_b32_e32 v42, 16
5290 ; GFX10-NEXT:    v_mov_b32_e32 v41, 0
5291 ; GFX10-NEXT:    v_mov_b32_e32 v43, 0
5292 ; GFX10-NEXT:    v_writelane_b32 v44, s34, 2
5293 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i8_ret@abs32@hi
5294 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i8_ret@abs32@lo
5295 ; GFX10-NEXT:    s_clause 0x1
5296 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[40:41], off
5297 ; GFX10-NEXT:    global_load_dwordx4 v[16:19], v[42:43], off
5298 ; GFX10-NEXT:    v_writelane_b32 v44, s30, 0
5299 ; GFX10-NEXT:    s_addk_i32 s32, 0x400
5300 ; GFX10-NEXT:    v_writelane_b32 v44, s31, 1
5301 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
5302 ; GFX10-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
5303 ; GFX10-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
5304 ; GFX10-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
5305 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5306 ; GFX10-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
5307 ; GFX10-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
5308 ; GFX10-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
5309 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
5310 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
5311 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
5312 ; GFX10-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
5313 ; GFX10-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
5314 ; GFX10-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
5315 ; GFX10-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
5316 ; GFX10-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
5317 ; GFX10-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
5318 ; GFX10-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
5319 ; GFX10-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
5320 ; GFX10-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
5321 ; GFX10-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
5322 ; GFX10-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
5323 ; GFX10-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
5324 ; GFX10-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
5325 ; GFX10-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
5326 ; GFX10-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
5327 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
5328 ; GFX10-NEXT:    v_mov_b32_e32 v8, v2
5329 ; GFX10-NEXT:    v_mov_b32_e32 v12, v3
5330 ; GFX10-NEXT:    v_mov_b32_e32 v20, v17
5331 ; GFX10-NEXT:    v_mov_b32_e32 v24, v18
5332 ; GFX10-NEXT:    v_mov_b32_e32 v28, v19
5333 ; GFX10-NEXT:    v_mov_b32_e32 v1, v35
5334 ; GFX10-NEXT:    v_mov_b32_e32 v2, v36
5335 ; GFX10-NEXT:    v_mov_b32_e32 v3, v37
5336 ; GFX10-NEXT:    v_mov_b32_e32 v17, v32
5337 ; GFX10-NEXT:    v_mov_b32_e32 v18, v33
5338 ; GFX10-NEXT:    v_mov_b32_e32 v19, v34
5339 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5340 ; GFX10-NEXT:    v_lshlrev_b16 v13, 8, v13
5341 ; GFX10-NEXT:    v_lshlrev_b16 v9, 8, v9
5342 ; GFX10-NEXT:    v_lshlrev_b16 v11, 8, v11
5343 ; GFX10-NEXT:    v_lshlrev_b16 v5, 8, v5
5344 ; GFX10-NEXT:    v_lshlrev_b16 v7, 8, v7
5345 ; GFX10-NEXT:    v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5346 ; GFX10-NEXT:    v_lshlrev_b16 v13, 8, v15
5347 ; GFX10-NEXT:    v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5348 ; GFX10-NEXT:    v_or_b32_sdwa v9, v10, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5349 ; GFX10-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5350 ; GFX10-NEXT:    v_or_b32_sdwa v7, v6, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5351 ; GFX10-NEXT:    v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5352 ; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v1
5353 ; GFX10-NEXT:    v_or_b32_sdwa v5, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5354 ; GFX10-NEXT:    v_lshlrev_b16 v8, 8, v31
5355 ; GFX10-NEXT:    v_or_b32_sdwa v4, v4, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5356 ; GFX10-NEXT:    v_lshlrev_b16 v7, 8, v29
5357 ; GFX10-NEXT:    v_lshlrev_b16 v9, 8, v25
5358 ; GFX10-NEXT:    v_or_b32_sdwa v6, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5359 ; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5360 ; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v3
5361 ; GFX10-NEXT:    v_or_b32_sdwa v3, v28, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5362 ; GFX10-NEXT:    v_or_b32_sdwa v7, v30, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5363 ; GFX10-NEXT:    v_or_b32_sdwa v8, v24, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5364 ; GFX10-NEXT:    v_lshlrev_b16 v9, 8, v27
5365 ; GFX10-NEXT:    v_lshlrev_b16 v10, 8, v21
5366 ; GFX10-NEXT:    v_lshlrev_b16 v11, 8, v23
5367 ; GFX10-NEXT:    v_lshlrev_b16 v12, 8, v17
5368 ; GFX10-NEXT:    v_lshlrev_b16 v13, 8, v19
5369 ; GFX10-NEXT:    v_or_b32_sdwa v9, v26, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5370 ; GFX10-NEXT:    v_or_b32_sdwa v14, v20, v10 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5371 ; GFX10-NEXT:    v_or_b32_sdwa v11, v22, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5372 ; GFX10-NEXT:    v_or_b32_sdwa v12, v16, v12 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5373 ; GFX10-NEXT:    v_or_b32_sdwa v13, v18, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5374 ; GFX10-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5375 ; GFX10-NEXT:    v_or_b32_sdwa v10, v3, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5376 ; GFX10-NEXT:    v_or_b32_sdwa v9, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5377 ; GFX10-NEXT:    v_or_b32_sdwa v8, v14, v11 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5378 ; GFX10-NEXT:    v_or_b32_sdwa v7, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5379 ; GFX10-NEXT:    v_or_b32_sdwa v3, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5380 ; GFX10-NEXT:    global_store_dwordx4 v[42:43], v[7:10], off
5381 ; GFX10-NEXT:    global_store_dwordx4 v[40:41], v[3:6], off
5382 ; GFX10-NEXT:    s_clause 0x3
5383 ; GFX10-NEXT:    buffer_load_dword v43, off, s[0:3], s33
5384 ; GFX10-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:4
5385 ; GFX10-NEXT:    buffer_load_dword v41, off, s[0:3], s33 offset:8
5386 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:12
5387 ; GFX10-NEXT:    v_readlane_b32 s31, v44, 1
5388 ; GFX10-NEXT:    v_readlane_b32 s30, v44, 0
5389 ; GFX10-NEXT:    v_readlane_b32 s34, v44, 2
5390 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5391 ; GFX10-NEXT:    buffer_load_dword v44, off, s[0:3], s33 offset:16 ; 4-byte Folded Reload
5392 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5393 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5394 ; GFX10-NEXT:    s_addk_i32 s32, 0xfc00
5395 ; GFX10-NEXT:    s_mov_b32 s33, s34
5396 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5397 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5399 ; GFX11-LABEL: test_call_external_void_func_v32i8_ret:
5400 ; GFX11:       ; %bb.0:
5401 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5402 ; GFX11-NEXT:    s_mov_b32 s0, s33
5403 ; GFX11-NEXT:    s_mov_b32 s33, s32
5404 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5405 ; GFX11-NEXT:    scratch_store_b32 off, v44, s33 offset:16 ; 4-byte Folded Spill
5406 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5407 ; GFX11-NEXT:    s_clause 0x3
5408 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:12
5409 ; GFX11-NEXT:    scratch_store_b32 off, v41, s33 offset:8
5410 ; GFX11-NEXT:    scratch_store_b32 off, v42, s33 offset:4
5411 ; GFX11-NEXT:    scratch_store_b32 off, v43, s33
5412 ; GFX11-NEXT:    v_mov_b32_e32 v40, 0
5413 ; GFX11-NEXT:    v_dual_mov_b32 v41, 0 :: v_dual_mov_b32 v42, 16
5414 ; GFX11-NEXT:    v_mov_b32_e32 v43, 0
5415 ; GFX11-NEXT:    v_writelane_b32 v44, s0, 2
5416 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i8_ret@abs32@hi
5417 ; GFX11-NEXT:    global_load_b128 v[0:3], v[40:41], off
5418 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i8_ret@abs32@lo
5419 ; GFX11-NEXT:    global_load_b128 v[16:19], v[42:43], off
5420 ; GFX11-NEXT:    v_writelane_b32 v44, s30, 0
5421 ; GFX11-NEXT:    s_add_i32 s32, s32, 32
5422 ; GFX11-NEXT:    v_writelane_b32 v44, s31, 1
5423 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
5424 ; GFX11-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
5425 ; GFX11-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
5426 ; GFX11-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
5427 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5428 ; GFX11-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
5429 ; GFX11-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
5430 ; GFX11-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
5431 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
5432 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
5433 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
5434 ; GFX11-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
5435 ; GFX11-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
5436 ; GFX11-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
5437 ; GFX11-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
5438 ; GFX11-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
5439 ; GFX11-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
5440 ; GFX11-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
5441 ; GFX11-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
5442 ; GFX11-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
5443 ; GFX11-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
5444 ; GFX11-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
5445 ; GFX11-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
5446 ; GFX11-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
5447 ; GFX11-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
5448 ; GFX11-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
5449 ; GFX11-NEXT:    v_dual_mov_b32 v4, v1 :: v_dual_mov_b32 v1, v35
5450 ; GFX11-NEXT:    v_mov_b32_e32 v8, v2
5451 ; GFX11-NEXT:    v_mov_b32_e32 v12, v3
5452 ; GFX11-NEXT:    v_mov_b32_e32 v20, v17
5453 ; GFX11-NEXT:    v_mov_b32_e32 v24, v18
5454 ; GFX11-NEXT:    v_dual_mov_b32 v28, v19 :: v_dual_mov_b32 v19, v34
5455 ; GFX11-NEXT:    v_dual_mov_b32 v2, v36 :: v_dual_mov_b32 v3, v37
5456 ; GFX11-NEXT:    v_dual_mov_b32 v17, v32 :: v_dual_mov_b32 v18, v33
5457 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5458 ; GFX11-NEXT:    v_lshlrev_b16 v9, 8, v9
5459 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xff, v8
5460 ; GFX11-NEXT:    v_lshlrev_b16 v11, 8, v11
5461 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xff, v10
5462 ; GFX11-NEXT:    v_lshlrev_b16 v5, 8, v5
5463 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xff, v4
5464 ; GFX11-NEXT:    v_lshlrev_b16 v7, 8, v7
5465 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xff, v6
5466 ; GFX11-NEXT:    v_lshlrev_b16 v13, 8, v13
5467 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xff, v12
5468 ; GFX11-NEXT:    v_or_b32_e32 v8, v8, v9
5469 ; GFX11-NEXT:    v_or_b32_e32 v9, v10, v11
5470 ; GFX11-NEXT:    v_or_b32_e32 v4, v4, v5
5471 ; GFX11-NEXT:    v_or_b32_e32 v5, v6, v7
5472 ; GFX11-NEXT:    v_or_b32_e32 v12, v12, v13
5473 ; GFX11-NEXT:    v_lshlrev_b16 v13, 8, v15
5474 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xff, v14
5475 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff, v8
5476 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v9
5477 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff, v4
5478 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v5
5479 ; GFX11-NEXT:    v_lshlrev_b16 v1, 8, v1
5480 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xff, v0
5481 ; GFX11-NEXT:    v_or_b32_e32 v13, v14, v13
5482 ; GFX11-NEXT:    v_or_b32_e32 v5, v7, v8
5483 ; GFX11-NEXT:    v_or_b32_e32 v4, v4, v9
5484 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xff, v28
5485 ; GFX11-NEXT:    v_or_b32_e32 v0, v0, v1
5486 ; GFX11-NEXT:    v_lshlrev_b16 v1, 8, v29
5487 ; GFX11-NEXT:    v_lshlrev_b16 v8, 8, v31
5488 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xff, v30
5489 ; GFX11-NEXT:    v_lshlrev_b16 v10, 8, v25
5490 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xff, v24
5491 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xffff, v12
5492 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v13
5493 ; GFX11-NEXT:    v_lshlrev_b16 v3, 8, v3
5494 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xff, v2
5495 ; GFX11-NEXT:    v_or_b32_e32 v1, v7, v1
5496 ; GFX11-NEXT:    v_or_b32_e32 v7, v9, v8
5497 ; GFX11-NEXT:    v_or_b32_e32 v8, v11, v10
5498 ; GFX11-NEXT:    v_or_b32_e32 v6, v12, v6
5499 ; GFX11-NEXT:    v_or_b32_e32 v2, v2, v3
5500 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xff, v26
5501 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
5502 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff, v8
5503 ; GFX11-NEXT:    v_lshlrev_b16 v8, 8, v27
5504 ; GFX11-NEXT:    v_lshlrev_b16 v10, 8, v21
5505 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xff, v20
5506 ; GFX11-NEXT:    v_lshlrev_b16 v12, 8, v23
5507 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xff, v22
5508 ; GFX11-NEXT:    v_lshlrev_b16 v14, 8, v17
5509 ; GFX11-NEXT:    v_and_b32_e32 v15, 0xff, v16
5510 ; GFX11-NEXT:    v_lshlrev_b16 v16, 8, v19
5511 ; GFX11-NEXT:    v_and_b32_e32 v17, 0xff, v18
5512 ; GFX11-NEXT:    v_or_b32_e32 v8, v9, v8
5513 ; GFX11-NEXT:    v_or_b32_e32 v9, v11, v10
5514 ; GFX11-NEXT:    v_or_b32_e32 v10, v13, v12
5515 ; GFX11-NEXT:    v_or_b32_e32 v11, v15, v14
5516 ; GFX11-NEXT:    v_or_b32_e32 v12, v17, v16
5517 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v1
5518 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v8
5519 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff, v9
5520 ; GFX11-NEXT:    v_lshlrev_b32_e32 v14, 16, v10
5521 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff, v11
5522 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v12
5523 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
5524 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
5525 ; GFX11-NEXT:    v_or_b32_e32 v10, v1, v3
5526 ; GFX11-NEXT:    v_or_b32_e32 v9, v7, v8
5527 ; GFX11-NEXT:    v_or_b32_e32 v8, v13, v14
5528 ; GFX11-NEXT:    v_or_b32_e32 v7, v11, v12
5529 ; GFX11-NEXT:    v_or_b32_e32 v3, v0, v2
5530 ; GFX11-NEXT:    s_clause 0x1
5531 ; GFX11-NEXT:    global_store_b128 v[42:43], v[7:10], off
5532 ; GFX11-NEXT:    global_store_b128 v[40:41], v[3:6], off
5533 ; GFX11-NEXT:    s_clause 0x3
5534 ; GFX11-NEXT:    scratch_load_b32 v43, off, s33
5535 ; GFX11-NEXT:    scratch_load_b32 v42, off, s33 offset:4
5536 ; GFX11-NEXT:    scratch_load_b32 v41, off, s33 offset:8
5537 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:12
5538 ; GFX11-NEXT:    v_readlane_b32 s31, v44, 1
5539 ; GFX11-NEXT:    v_readlane_b32 s30, v44, 0
5540 ; GFX11-NEXT:    v_readlane_b32 s0, v44, 2
5541 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5542 ; GFX11-NEXT:    scratch_load_b32 v44, off, s33 offset:16 ; 4-byte Folded Reload
5543 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5544 ; GFX11-NEXT:    s_addk_i32 s32, 0xffe0
5545 ; GFX11-NEXT:    s_mov_b32 s33, s0
5546 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5547 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5549 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v32i8_ret:
5550 ; GFX10-SCRATCH:       ; %bb.0:
5551 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5552 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
5553 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
5554 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
5555 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v44, s33 offset:16 ; 4-byte Folded Spill
5556 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
5557 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
5558 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:12 ; 4-byte Folded Spill
5559 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v41, s33 offset:8 ; 4-byte Folded Spill
5560 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v42, s33 offset:4 ; 4-byte Folded Spill
5561 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v43, s33 ; 4-byte Folded Spill
5562 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v40, 0
5563 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v42, 16
5564 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v41, 0
5565 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v43, 0
5566 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v44, s0, 2
5567 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i8_ret@abs32@hi
5568 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i8_ret@abs32@lo
5569 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
5570 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v[40:41], off
5571 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[16:19], v[42:43], off
5572 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v44, s30, 0
5573 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 32
5574 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v44, s31, 1
5575 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(1)
5576 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
5577 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
5578 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
5579 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
5580 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
5581 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
5582 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
5583 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
5584 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
5585 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
5586 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
5587 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
5588 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
5589 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
5590 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
5591 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
5592 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
5593 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
5594 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
5595 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
5596 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
5597 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
5598 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
5599 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
5600 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
5601 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, v1
5602 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v8, v2
5603 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v12, v3
5604 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v20, v17
5605 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v24, v18
5606 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v28, v19
5607 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, v35
5608 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, v36
5609 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, v37
5610 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v17, v32
5611 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v18, v33
5612 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v19, v34
5613 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5614 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v13, 8, v13
5615 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v9, 8, v9
5616 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v11, 8, v11
5617 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v5, 8, v5
5618 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v7, 8, v7
5619 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5620 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v13, 8, v15
5621 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5622 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v9, v10, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5623 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5624 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v7, v6, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5625 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5626 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v1, 8, v1
5627 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v5, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5628 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v8, 8, v31
5629 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v4, v4, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5630 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v7, 8, v29
5631 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v9, 8, v25
5632 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v6, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5633 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5634 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v1, 8, v3
5635 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v3, v28, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5636 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v7, v30, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5637 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v8, v24, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5638 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v9, 8, v27
5639 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v10, 8, v21
5640 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v11, 8, v23
5641 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v12, 8, v17
5642 ; GFX10-SCRATCH-NEXT:    v_lshlrev_b16 v13, 8, v19
5643 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v9, v26, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5644 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v14, v20, v10 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5645 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v11, v22, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5646 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v12, v16, v12 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5647 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v13, v18, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5648 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
5649 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v10, v3, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5650 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v9, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5651 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v8, v14, v11 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5652 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v7, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5653 ; GFX10-SCRATCH-NEXT:    v_or_b32_sdwa v3, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
5654 ; GFX10-SCRATCH-NEXT:    global_store_dwordx4 v[42:43], v[7:10], off
5655 ; GFX10-SCRATCH-NEXT:    global_store_dwordx4 v[40:41], v[3:6], off
5656 ; GFX10-SCRATCH-NEXT:    s_clause 0x3
5657 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v43, off, s33
5658 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v42, off, s33 offset:4
5659 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v41, off, s33 offset:8
5660 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:12
5661 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v44, 1
5662 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v44, 0
5663 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v44, 2
5664 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
5665 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v44, off, s33 offset:16 ; 4-byte Folded Reload
5666 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
5667 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
5668 ; GFX10-SCRATCH-NEXT:    s_addk_i32 s32, 0xffe0
5669 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
5670 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
5671 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
5672   %val = load <32 x i8>, ptr addrspace(1) null
5673   %tmp = call amdgpu_gfx <32 x i8> @external_void_func_v3i8_ret(<32 x i8> %val)
5674   store <32 x i8> %tmp, ptr addrspace(1) null
5675   ret void
5680 define amdgpu_gfx void @test_call_external_void_func_v2i16() #0 {
5681 ; GFX9-LABEL: test_call_external_void_func_v2i16:
5682 ; GFX9:       ; %bb.0:
5683 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5684 ; GFX9-NEXT:    s_mov_b32 s34, s33
5685 ; GFX9-NEXT:    s_mov_b32 s33, s32
5686 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
5687 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
5688 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
5689 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
5690 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
5691 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
5692 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i16@abs32@hi
5693 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i16@abs32@lo
5694 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
5695 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
5696 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5697 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
5698 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
5699 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
5700 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
5701 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
5702 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
5703 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
5704 ; GFX9-NEXT:    s_mov_b32 s33, s34
5705 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5706 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5708 ; GFX10-LABEL: test_call_external_void_func_v2i16:
5709 ; GFX10:       ; %bb.0:
5710 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5711 ; GFX10-NEXT:    s_mov_b32 s34, s33
5712 ; GFX10-NEXT:    s_mov_b32 s33, s32
5713 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5714 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
5715 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5716 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5717 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
5718 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
5719 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i16@abs32@hi
5720 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i16@abs32@lo
5721 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
5722 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
5723 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
5724 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5725 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
5726 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
5727 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
5728 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5729 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
5730 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5731 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5732 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
5733 ; GFX10-NEXT:    s_mov_b32 s33, s34
5734 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5735 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5737 ; GFX11-LABEL: test_call_external_void_func_v2i16:
5738 ; GFX11:       ; %bb.0:
5739 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5740 ; GFX11-NEXT:    s_mov_b32 s0, s33
5741 ; GFX11-NEXT:    s_mov_b32 s33, s32
5742 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5743 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
5744 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5745 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
5746 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
5747 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i16@abs32@hi
5748 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i16@abs32@lo
5749 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
5750 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
5751 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
5752 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5753 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5754 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
5755 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
5756 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
5757 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5758 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
5759 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5760 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
5761 ; GFX11-NEXT:    s_mov_b32 s33, s0
5762 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5763 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5765 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i16:
5766 ; GFX10-SCRATCH:       ; %bb.0:
5767 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5768 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
5769 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
5770 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
5771 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
5772 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
5773 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
5774 ; GFX10-SCRATCH-NEXT:    global_load_dword v0, v[0:1], off
5775 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
5776 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i16@abs32@hi
5777 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i16@abs32@lo
5778 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
5779 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
5780 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
5781 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5782 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
5783 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
5784 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
5785 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
5786 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
5787 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
5788 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
5789 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
5790 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
5791 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
5792 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
5793   %val = load <2 x i16>, ptr addrspace(1) undef
5794   call amdgpu_gfx void @external_void_func_v2i16(<2 x i16> %val)
5795   ret void
5798 define amdgpu_gfx void @test_call_external_void_func_v3i16() #0 {
5799 ; GFX9-LABEL: test_call_external_void_func_v3i16:
5800 ; GFX9:       ; %bb.0:
5801 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5802 ; GFX9-NEXT:    s_mov_b32 s34, s33
5803 ; GFX9-NEXT:    s_mov_b32 s33, s32
5804 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
5805 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
5806 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
5807 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
5808 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
5809 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
5810 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i16@abs32@hi
5811 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i16@abs32@lo
5812 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
5813 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
5814 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5815 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
5816 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
5817 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
5818 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
5819 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
5820 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
5821 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
5822 ; GFX9-NEXT:    s_mov_b32 s33, s34
5823 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5824 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5826 ; GFX10-LABEL: test_call_external_void_func_v3i16:
5827 ; GFX10:       ; %bb.0:
5828 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5829 ; GFX10-NEXT:    s_mov_b32 s34, s33
5830 ; GFX10-NEXT:    s_mov_b32 s33, s32
5831 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5832 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
5833 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5834 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5835 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
5836 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
5837 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i16@abs32@hi
5838 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i16@abs32@lo
5839 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
5840 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
5841 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
5842 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5843 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
5844 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
5845 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
5846 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5847 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
5848 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5849 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5850 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
5851 ; GFX10-NEXT:    s_mov_b32 s33, s34
5852 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5853 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5855 ; GFX11-LABEL: test_call_external_void_func_v3i16:
5856 ; GFX11:       ; %bb.0:
5857 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5858 ; GFX11-NEXT:    s_mov_b32 s0, s33
5859 ; GFX11-NEXT:    s_mov_b32 s33, s32
5860 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5861 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
5862 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5863 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
5864 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
5865 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i16@abs32@hi
5866 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i16@abs32@lo
5867 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
5868 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
5869 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
5870 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5871 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5872 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
5873 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
5874 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
5875 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5876 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
5877 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5878 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
5879 ; GFX11-NEXT:    s_mov_b32 s33, s0
5880 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5881 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5883 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i16:
5884 ; GFX10-SCRATCH:       ; %bb.0:
5885 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5886 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
5887 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
5888 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
5889 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
5890 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
5891 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
5892 ; GFX10-SCRATCH-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
5893 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
5894 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i16@abs32@hi
5895 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i16@abs32@lo
5896 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
5897 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
5898 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
5899 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5900 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
5901 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
5902 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
5903 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
5904 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
5905 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
5906 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
5907 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
5908 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
5909 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
5910 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
5911   %val = load <3 x i16>, ptr addrspace(1) undef
5912   call amdgpu_gfx void @external_void_func_v3i16(<3 x i16> %val)
5913   ret void
5916 define amdgpu_gfx void @test_call_external_void_func_v3f16() #0 {
5917 ; GFX9-LABEL: test_call_external_void_func_v3f16:
5918 ; GFX9:       ; %bb.0:
5919 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5920 ; GFX9-NEXT:    s_mov_b32 s34, s33
5921 ; GFX9-NEXT:    s_mov_b32 s33, s32
5922 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
5923 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
5924 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
5925 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
5926 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
5927 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
5928 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3f16@abs32@hi
5929 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3f16@abs32@lo
5930 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
5931 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
5932 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5933 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
5934 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
5935 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
5936 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
5937 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
5938 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
5939 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
5940 ; GFX9-NEXT:    s_mov_b32 s33, s34
5941 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5942 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5944 ; GFX10-LABEL: test_call_external_void_func_v3f16:
5945 ; GFX10:       ; %bb.0:
5946 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5947 ; GFX10-NEXT:    s_mov_b32 s34, s33
5948 ; GFX10-NEXT:    s_mov_b32 s33, s32
5949 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5950 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
5951 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5952 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5953 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
5954 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
5955 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3f16@abs32@hi
5956 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3f16@abs32@lo
5957 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
5958 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
5959 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
5960 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
5961 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
5962 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
5963 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
5964 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
5965 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
5966 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5967 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
5968 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
5969 ; GFX10-NEXT:    s_mov_b32 s33, s34
5970 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5971 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5973 ; GFX11-LABEL: test_call_external_void_func_v3f16:
5974 ; GFX11:       ; %bb.0:
5975 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5976 ; GFX11-NEXT:    s_mov_b32 s0, s33
5977 ; GFX11-NEXT:    s_mov_b32 s33, s32
5978 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5979 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
5980 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5981 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
5982 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
5983 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3f16@abs32@hi
5984 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3f16@abs32@lo
5985 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
5986 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
5987 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
5988 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5989 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5990 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
5991 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
5992 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
5993 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
5994 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
5995 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
5996 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
5997 ; GFX11-NEXT:    s_mov_b32 s33, s0
5998 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5999 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6001 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3f16:
6002 ; GFX10-SCRATCH:       ; %bb.0:
6003 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6004 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6005 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6006 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6007 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6008 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6009 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6010 ; GFX10-SCRATCH-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6011 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6012 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3f16@abs32@hi
6013 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3f16@abs32@lo
6014 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6015 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6016 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6017 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6018 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6019 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6020 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6021 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6022 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6023 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6024 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6025 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6026 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6027 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6028 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6029   %val = load <3 x half>, ptr addrspace(1) undef
6030   call amdgpu_gfx void @external_void_func_v3f16(<3 x half> %val)
6031   ret void
6034 define amdgpu_gfx void @test_call_external_void_func_v3i16_imm() #0 {
6035 ; GFX9-LABEL: test_call_external_void_func_v3i16_imm:
6036 ; GFX9:       ; %bb.0:
6037 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6038 ; GFX9-NEXT:    s_mov_b32 s34, s33
6039 ; GFX9-NEXT:    s_mov_b32 s33, s32
6040 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6041 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6042 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6043 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
6044 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
6045 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i16@abs32@hi
6046 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i16@abs32@lo
6047 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x20001
6048 ; GFX9-NEXT:    v_mov_b32_e32 v1, 3
6049 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
6050 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
6051 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6052 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
6053 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
6054 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
6055 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6056 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6057 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6058 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
6059 ; GFX9-NEXT:    s_mov_b32 s33, s34
6060 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6061 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6063 ; GFX10-LABEL: test_call_external_void_func_v3i16_imm:
6064 ; GFX10:       ; %bb.0:
6065 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6066 ; GFX10-NEXT:    s_mov_b32 s34, s33
6067 ; GFX10-NEXT:    s_mov_b32 s33, s32
6068 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6069 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6070 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6071 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6072 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
6073 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x20001
6074 ; GFX10-NEXT:    v_mov_b32_e32 v1, 3
6075 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i16@abs32@hi
6076 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i16@abs32@lo
6077 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
6078 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
6079 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
6080 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6081 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
6082 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
6083 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
6084 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6085 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6086 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6087 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6088 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
6089 ; GFX10-NEXT:    s_mov_b32 s33, s34
6090 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6091 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6093 ; GFX11-LABEL: test_call_external_void_func_v3i16_imm:
6094 ; GFX11:       ; %bb.0:
6095 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6096 ; GFX11-NEXT:    s_mov_b32 s0, s33
6097 ; GFX11-NEXT:    s_mov_b32 s33, s32
6098 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6099 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
6100 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6101 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
6102 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0x20001 :: v_dual_mov_b32 v1, 3
6103 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i16@abs32@hi
6104 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i16@abs32@lo
6105 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
6106 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
6107 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
6108 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6109 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6110 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
6111 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
6112 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
6113 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6114 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
6115 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6116 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
6117 ; GFX11-NEXT:    s_mov_b32 s33, s0
6118 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6119 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6121 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i16_imm:
6122 ; GFX10-SCRATCH:       ; %bb.0:
6123 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6124 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6125 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6126 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6127 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6128 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6129 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6130 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6131 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0x20001
6132 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 3
6133 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i16@abs32@hi
6134 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i16@abs32@lo
6135 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6136 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6137 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6138 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6139 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6140 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6141 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6142 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6143 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6144 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6145 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6146 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6147 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6148 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6149 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6150   call amdgpu_gfx void @external_void_func_v3i16(<3 x i16> <i16 1, i16 2, i16 3>)
6151   ret void
6154 define amdgpu_gfx void @test_call_external_void_func_v3f16_imm() #0 {
6155 ; GFX9-LABEL: test_call_external_void_func_v3f16_imm:
6156 ; GFX9:       ; %bb.0:
6157 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6158 ; GFX9-NEXT:    s_mov_b32 s34, s33
6159 ; GFX9-NEXT:    s_mov_b32 s33, s32
6160 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6161 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6162 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6163 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
6164 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
6165 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3f16@abs32@hi
6166 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3f16@abs32@lo
6167 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x40003c00
6168 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x4400
6169 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
6170 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
6171 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6172 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
6173 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
6174 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
6175 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6176 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6177 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6178 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
6179 ; GFX9-NEXT:    s_mov_b32 s33, s34
6180 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6181 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6183 ; GFX10-LABEL: test_call_external_void_func_v3f16_imm:
6184 ; GFX10:       ; %bb.0:
6185 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6186 ; GFX10-NEXT:    s_mov_b32 s34, s33
6187 ; GFX10-NEXT:    s_mov_b32 s33, s32
6188 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6189 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6190 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6191 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6192 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
6193 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x40003c00
6194 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0x4400
6195 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3f16@abs32@hi
6196 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3f16@abs32@lo
6197 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
6198 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
6199 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
6200 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6201 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
6202 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
6203 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
6204 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6205 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6206 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6207 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6208 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
6209 ; GFX10-NEXT:    s_mov_b32 s33, s34
6210 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6211 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6213 ; GFX11-LABEL: test_call_external_void_func_v3f16_imm:
6214 ; GFX11:       ; %bb.0:
6215 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6216 ; GFX11-NEXT:    s_mov_b32 s0, s33
6217 ; GFX11-NEXT:    s_mov_b32 s33, s32
6218 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6219 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
6220 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6221 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
6222 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0x40003c00
6223 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0x4400
6224 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3f16@abs32@hi
6225 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3f16@abs32@lo
6226 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
6227 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
6228 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
6229 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6230 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6231 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
6232 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
6233 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
6234 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6235 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
6236 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6237 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
6238 ; GFX11-NEXT:    s_mov_b32 s33, s0
6239 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6240 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6242 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3f16_imm:
6243 ; GFX10-SCRATCH:       ; %bb.0:
6244 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6245 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6246 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6247 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6248 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6249 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6250 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6251 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6252 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0x40003c00
6253 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0x4400
6254 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3f16@abs32@hi
6255 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3f16@abs32@lo
6256 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6257 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6258 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6259 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6260 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6261 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6262 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6263 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6264 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6265 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6266 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6267 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6268 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6269 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6270 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6271   call amdgpu_gfx void @external_void_func_v3f16(<3 x half> <half 1.0, half 2.0, half 4.0>)
6272   ret void
6275 define amdgpu_gfx void @test_call_external_void_func_v4i16() #0 {
6276 ; GFX9-LABEL: test_call_external_void_func_v4i16:
6277 ; GFX9:       ; %bb.0:
6278 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6279 ; GFX9-NEXT:    s_mov_b32 s34, s33
6280 ; GFX9-NEXT:    s_mov_b32 s33, s32
6281 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6282 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6283 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6284 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6285 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
6286 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
6287 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i16@abs32@hi
6288 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i16@abs32@lo
6289 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
6290 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
6291 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6292 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
6293 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
6294 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
6295 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6296 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6297 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6298 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
6299 ; GFX9-NEXT:    s_mov_b32 s33, s34
6300 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6301 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6303 ; GFX10-LABEL: test_call_external_void_func_v4i16:
6304 ; GFX10:       ; %bb.0:
6305 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6306 ; GFX10-NEXT:    s_mov_b32 s34, s33
6307 ; GFX10-NEXT:    s_mov_b32 s33, s32
6308 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6309 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6310 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6311 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6312 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6313 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
6314 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i16@abs32@hi
6315 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i16@abs32@lo
6316 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
6317 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
6318 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
6319 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6320 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
6321 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
6322 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
6323 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6324 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6325 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6326 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6327 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
6328 ; GFX10-NEXT:    s_mov_b32 s33, s34
6329 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6330 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6332 ; GFX11-LABEL: test_call_external_void_func_v4i16:
6333 ; GFX11:       ; %bb.0:
6334 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6335 ; GFX11-NEXT:    s_mov_b32 s0, s33
6336 ; GFX11-NEXT:    s_mov_b32 s33, s32
6337 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6338 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
6339 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6340 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
6341 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
6342 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i16@abs32@hi
6343 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i16@abs32@lo
6344 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
6345 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
6346 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
6347 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6348 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6349 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
6350 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
6351 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
6352 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6353 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
6354 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6355 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
6356 ; GFX11-NEXT:    s_mov_b32 s33, s0
6357 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6358 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6360 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i16:
6361 ; GFX10-SCRATCH:       ; %bb.0:
6362 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6363 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6364 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6365 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6366 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6367 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6368 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6369 ; GFX10-SCRATCH-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6370 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6371 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i16@abs32@hi
6372 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i16@abs32@lo
6373 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6374 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6375 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6376 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6377 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6378 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6379 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6380 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6381 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6382 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6383 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6384 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6385 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6386 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6387 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6388   %val = load <4 x i16>, ptr addrspace(1) undef
6389   call amdgpu_gfx void @external_void_func_v4i16(<4 x i16> %val)
6390   ret void
6393 define amdgpu_gfx void @test_call_external_void_func_v4i16_imm() #0 {
6394 ; GFX9-LABEL: test_call_external_void_func_v4i16_imm:
6395 ; GFX9:       ; %bb.0:
6396 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6397 ; GFX9-NEXT:    s_mov_b32 s34, s33
6398 ; GFX9-NEXT:    s_mov_b32 s33, s32
6399 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6400 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6401 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6402 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
6403 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
6404 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i16@abs32@hi
6405 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i16@abs32@lo
6406 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x20001
6407 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x40003
6408 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
6409 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
6410 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6411 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
6412 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
6413 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
6414 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6415 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6416 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6417 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
6418 ; GFX9-NEXT:    s_mov_b32 s33, s34
6419 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6420 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6422 ; GFX10-LABEL: test_call_external_void_func_v4i16_imm:
6423 ; GFX10:       ; %bb.0:
6424 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6425 ; GFX10-NEXT:    s_mov_b32 s34, s33
6426 ; GFX10-NEXT:    s_mov_b32 s33, s32
6427 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6428 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6429 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6430 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6431 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
6432 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x20001
6433 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0x40003
6434 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i16@abs32@hi
6435 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i16@abs32@lo
6436 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
6437 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
6438 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
6439 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6440 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
6441 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
6442 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
6443 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6444 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6445 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6446 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6447 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
6448 ; GFX10-NEXT:    s_mov_b32 s33, s34
6449 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6450 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6452 ; GFX11-LABEL: test_call_external_void_func_v4i16_imm:
6453 ; GFX11:       ; %bb.0:
6454 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6455 ; GFX11-NEXT:    s_mov_b32 s0, s33
6456 ; GFX11-NEXT:    s_mov_b32 s33, s32
6457 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6458 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
6459 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6460 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
6461 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0x20001
6462 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0x40003
6463 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i16@abs32@hi
6464 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i16@abs32@lo
6465 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
6466 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
6467 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
6468 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6469 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6470 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
6471 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
6472 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
6473 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6474 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
6475 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6476 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
6477 ; GFX11-NEXT:    s_mov_b32 s33, s0
6478 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6479 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6481 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i16_imm:
6482 ; GFX10-SCRATCH:       ; %bb.0:
6483 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6484 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6485 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6486 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6487 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6488 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6489 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6490 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6491 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0x20001
6492 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0x40003
6493 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i16@abs32@hi
6494 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i16@abs32@lo
6495 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6496 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6497 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6498 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6499 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6500 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6501 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6502 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6503 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6504 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6505 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6506 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6507 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6508 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6509 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6510   call amdgpu_gfx void @external_void_func_v4i16(<4 x i16> <i16 1, i16 2, i16 3, i16 4>)
6511   ret void
6514 define amdgpu_gfx void @test_call_external_void_func_v2f16() #0 {
6515 ; GFX9-LABEL: test_call_external_void_func_v2f16:
6516 ; GFX9:       ; %bb.0:
6517 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6518 ; GFX9-NEXT:    s_mov_b32 s34, s33
6519 ; GFX9-NEXT:    s_mov_b32 s33, s32
6520 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6521 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6522 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6523 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
6524 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
6525 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
6526 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2f16@abs32@hi
6527 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2f16@abs32@lo
6528 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
6529 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
6530 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6531 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
6532 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
6533 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
6534 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6535 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6536 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6537 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
6538 ; GFX9-NEXT:    s_mov_b32 s33, s34
6539 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6540 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6542 ; GFX10-LABEL: test_call_external_void_func_v2f16:
6543 ; GFX10:       ; %bb.0:
6544 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6545 ; GFX10-NEXT:    s_mov_b32 s34, s33
6546 ; GFX10-NEXT:    s_mov_b32 s33, s32
6547 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6548 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6549 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6550 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6551 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
6552 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
6553 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2f16@abs32@hi
6554 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2f16@abs32@lo
6555 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
6556 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
6557 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
6558 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6559 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
6560 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
6561 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
6562 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6563 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6564 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6565 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6566 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
6567 ; GFX10-NEXT:    s_mov_b32 s33, s34
6568 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6569 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6571 ; GFX11-LABEL: test_call_external_void_func_v2f16:
6572 ; GFX11:       ; %bb.0:
6573 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6574 ; GFX11-NEXT:    s_mov_b32 s0, s33
6575 ; GFX11-NEXT:    s_mov_b32 s33, s32
6576 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6577 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
6578 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6579 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
6580 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
6581 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2f16@abs32@hi
6582 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2f16@abs32@lo
6583 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
6584 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
6585 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
6586 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6587 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6588 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
6589 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
6590 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
6591 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6592 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
6593 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6594 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
6595 ; GFX11-NEXT:    s_mov_b32 s33, s0
6596 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6597 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6599 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2f16:
6600 ; GFX10-SCRATCH:       ; %bb.0:
6601 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6602 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6603 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6604 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6605 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6606 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6607 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6608 ; GFX10-SCRATCH-NEXT:    global_load_dword v0, v[0:1], off
6609 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6610 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2f16@abs32@hi
6611 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2f16@abs32@lo
6612 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6613 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6614 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6615 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6616 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6617 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6618 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6619 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6620 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6621 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6622 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6623 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6624 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6625 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6626 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6627   %val = load <2 x half>, ptr addrspace(1) undef
6628   call amdgpu_gfx void @external_void_func_v2f16(<2 x half> %val)
6629   ret void
6632 define amdgpu_gfx void @test_call_external_void_func_v2i32() #0 {
6633 ; GFX9-LABEL: test_call_external_void_func_v2i32:
6634 ; GFX9:       ; %bb.0:
6635 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6636 ; GFX9-NEXT:    s_mov_b32 s34, s33
6637 ; GFX9-NEXT:    s_mov_b32 s33, s32
6638 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6639 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6640 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6641 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6642 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
6643 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
6644 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i32@abs32@hi
6645 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i32@abs32@lo
6646 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
6647 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
6648 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6649 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
6650 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
6651 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
6652 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6653 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6654 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6655 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
6656 ; GFX9-NEXT:    s_mov_b32 s33, s34
6657 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6658 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6660 ; GFX10-LABEL: test_call_external_void_func_v2i32:
6661 ; GFX10:       ; %bb.0:
6662 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6663 ; GFX10-NEXT:    s_mov_b32 s34, s33
6664 ; GFX10-NEXT:    s_mov_b32 s33, s32
6665 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6666 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6667 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6668 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6669 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6670 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
6671 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i32@abs32@hi
6672 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i32@abs32@lo
6673 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
6674 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
6675 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
6676 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6677 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
6678 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
6679 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
6680 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6681 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6682 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6683 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6684 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
6685 ; GFX10-NEXT:    s_mov_b32 s33, s34
6686 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6687 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6689 ; GFX11-LABEL: test_call_external_void_func_v2i32:
6690 ; GFX11:       ; %bb.0:
6691 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6692 ; GFX11-NEXT:    s_mov_b32 s0, s33
6693 ; GFX11-NEXT:    s_mov_b32 s33, s32
6694 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6695 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
6696 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6697 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
6698 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
6699 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i32@abs32@hi
6700 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i32@abs32@lo
6701 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
6702 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
6703 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
6704 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6705 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6706 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
6707 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
6708 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
6709 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6710 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
6711 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6712 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
6713 ; GFX11-NEXT:    s_mov_b32 s33, s0
6714 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6715 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6717 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i32:
6718 ; GFX10-SCRATCH:       ; %bb.0:
6719 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6720 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6721 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6722 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6723 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6724 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6725 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6726 ; GFX10-SCRATCH-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6727 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6728 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i32@abs32@hi
6729 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i32@abs32@lo
6730 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6731 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6732 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6733 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6734 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6735 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6736 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6737 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6738 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6739 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6740 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6741 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6742 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6743 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6744 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6745   %val = load <2 x i32>, ptr addrspace(1) undef
6746   call amdgpu_gfx void @external_void_func_v2i32(<2 x i32> %val)
6747   ret void
6750 define amdgpu_gfx void @test_call_external_void_func_v2i32_imm() #0 {
6751 ; GFX9-LABEL: test_call_external_void_func_v2i32_imm:
6752 ; GFX9:       ; %bb.0:
6753 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6754 ; GFX9-NEXT:    s_mov_b32 s34, s33
6755 ; GFX9-NEXT:    s_mov_b32 s33, s32
6756 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6757 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6758 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6759 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
6760 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
6761 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i32@abs32@hi
6762 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i32@abs32@lo
6763 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1
6764 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2
6765 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
6766 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
6767 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6768 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
6769 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
6770 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
6771 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6772 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6773 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6774 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
6775 ; GFX9-NEXT:    s_mov_b32 s33, s34
6776 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6777 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6779 ; GFX10-LABEL: test_call_external_void_func_v2i32_imm:
6780 ; GFX10:       ; %bb.0:
6781 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6782 ; GFX10-NEXT:    s_mov_b32 s34, s33
6783 ; GFX10-NEXT:    s_mov_b32 s33, s32
6784 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6785 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6786 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6787 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6788 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
6789 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1
6790 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2
6791 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i32@abs32@hi
6792 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i32@abs32@lo
6793 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
6794 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
6795 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
6796 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6797 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
6798 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
6799 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
6800 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6801 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6802 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6803 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6804 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
6805 ; GFX10-NEXT:    s_mov_b32 s33, s34
6806 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6807 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6809 ; GFX11-LABEL: test_call_external_void_func_v2i32_imm:
6810 ; GFX11:       ; %bb.0:
6811 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6812 ; GFX11-NEXT:    s_mov_b32 s0, s33
6813 ; GFX11-NEXT:    s_mov_b32 s33, s32
6814 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6815 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
6816 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6817 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
6818 ; GFX11-NEXT:    v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 2
6819 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i32@abs32@hi
6820 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i32@abs32@lo
6821 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
6822 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
6823 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
6824 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6825 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6826 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
6827 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
6828 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
6829 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6830 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
6831 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6832 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
6833 ; GFX11-NEXT:    s_mov_b32 s33, s0
6834 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6835 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6837 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i32_imm:
6838 ; GFX10-SCRATCH:       ; %bb.0:
6839 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6840 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6841 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6842 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6843 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6844 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6845 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6846 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6847 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1
6848 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2
6849 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i32@abs32@hi
6850 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i32@abs32@lo
6851 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6852 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6853 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6854 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6855 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6856 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6857 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6858 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6859 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6860 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6861 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6862 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6863 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6864 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6865 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6866   call amdgpu_gfx void @external_void_func_v2i32(<2 x i32> <i32 1, i32 2>)
6867   ret void
6870 define amdgpu_gfx void @test_call_external_void_func_v3i32_imm(i32) #0 {
6871 ; GFX9-LABEL: test_call_external_void_func_v3i32_imm:
6872 ; GFX9:       ; %bb.0:
6873 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6874 ; GFX9-NEXT:    s_mov_b32 s34, s33
6875 ; GFX9-NEXT:    s_mov_b32 s33, s32
6876 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6877 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6878 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6879 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
6880 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
6881 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i32@abs32@hi
6882 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i32@abs32@lo
6883 ; GFX9-NEXT:    v_mov_b32_e32 v0, 3
6884 ; GFX9-NEXT:    v_mov_b32_e32 v1, 4
6885 ; GFX9-NEXT:    v_mov_b32_e32 v2, 5
6886 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
6887 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
6888 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6889 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
6890 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
6891 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
6892 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
6893 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6894 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
6895 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
6896 ; GFX9-NEXT:    s_mov_b32 s33, s34
6897 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6898 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6900 ; GFX10-LABEL: test_call_external_void_func_v3i32_imm:
6901 ; GFX10:       ; %bb.0:
6902 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6903 ; GFX10-NEXT:    s_mov_b32 s34, s33
6904 ; GFX10-NEXT:    s_mov_b32 s33, s32
6905 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6906 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
6907 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6908 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6909 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
6910 ; GFX10-NEXT:    v_mov_b32_e32 v0, 3
6911 ; GFX10-NEXT:    v_mov_b32_e32 v1, 4
6912 ; GFX10-NEXT:    v_mov_b32_e32 v2, 5
6913 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i32@abs32@hi
6914 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
6915 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i32@abs32@lo
6916 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
6917 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
6918 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
6919 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
6920 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
6921 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
6922 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
6923 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
6924 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6925 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
6926 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
6927 ; GFX10-NEXT:    s_mov_b32 s33, s34
6928 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6929 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6931 ; GFX11-LABEL: test_call_external_void_func_v3i32_imm:
6932 ; GFX11:       ; %bb.0:
6933 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6934 ; GFX11-NEXT:    s_mov_b32 s0, s33
6935 ; GFX11-NEXT:    s_mov_b32 s33, s32
6936 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6937 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
6938 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6939 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
6940 ; GFX11-NEXT:    v_dual_mov_b32 v0, 3 :: v_dual_mov_b32 v1, 4
6941 ; GFX11-NEXT:    v_mov_b32_e32 v2, 5
6942 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i32@abs32@hi
6943 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
6944 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i32@abs32@lo
6945 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
6946 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
6947 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6948 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6949 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
6950 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
6951 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
6952 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
6953 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
6954 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
6955 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
6956 ; GFX11-NEXT:    s_mov_b32 s33, s0
6957 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6958 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6960 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i32_imm:
6961 ; GFX10-SCRATCH:       ; %bb.0:
6962 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6963 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
6964 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
6965 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6966 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
6967 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6968 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6969 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
6970 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 3
6971 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 4
6972 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 5
6973 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i32@abs32@hi
6974 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
6975 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i32@abs32@lo
6976 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
6977 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
6978 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
6979 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
6980 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
6981 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
6982 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
6983 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
6984 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
6985 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
6986 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
6987 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
6988 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
6989 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
6990   call amdgpu_gfx void @external_void_func_v3i32(<3 x i32> <i32 3, i32 4, i32 5>)
6991   ret void
6994 define amdgpu_gfx void @test_call_external_void_func_v3i32_i32(i32) #0 {
6995 ; GFX9-LABEL: test_call_external_void_func_v3i32_i32:
6996 ; GFX9:       ; %bb.0:
6997 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6998 ; GFX9-NEXT:    s_mov_b32 s34, s33
6999 ; GFX9-NEXT:    s_mov_b32 s33, s32
7000 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7001 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7002 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7003 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
7004 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
7005 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i32_i32@abs32@hi
7006 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i32_i32@abs32@lo
7007 ; GFX9-NEXT:    v_mov_b32_e32 v0, 3
7008 ; GFX9-NEXT:    v_mov_b32_e32 v1, 4
7009 ; GFX9-NEXT:    v_mov_b32_e32 v2, 5
7010 ; GFX9-NEXT:    v_mov_b32_e32 v3, 6
7011 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
7012 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
7013 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7014 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
7015 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
7016 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
7017 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7018 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7019 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7020 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
7021 ; GFX9-NEXT:    s_mov_b32 s33, s34
7022 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7023 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7025 ; GFX10-LABEL: test_call_external_void_func_v3i32_i32:
7026 ; GFX10:       ; %bb.0:
7027 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7028 ; GFX10-NEXT:    s_mov_b32 s34, s33
7029 ; GFX10-NEXT:    s_mov_b32 s33, s32
7030 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7031 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7032 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7033 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7034 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
7035 ; GFX10-NEXT:    v_mov_b32_e32 v0, 3
7036 ; GFX10-NEXT:    v_mov_b32_e32 v1, 4
7037 ; GFX10-NEXT:    v_mov_b32_e32 v2, 5
7038 ; GFX10-NEXT:    v_mov_b32_e32 v3, 6
7039 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
7040 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i32_i32@abs32@hi
7041 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i32_i32@abs32@lo
7042 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
7043 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
7044 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7045 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
7046 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
7047 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
7048 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7049 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7050 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7051 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7052 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
7053 ; GFX10-NEXT:    s_mov_b32 s33, s34
7054 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7055 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7057 ; GFX11-LABEL: test_call_external_void_func_v3i32_i32:
7058 ; GFX11:       ; %bb.0:
7059 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7060 ; GFX11-NEXT:    s_mov_b32 s0, s33
7061 ; GFX11-NEXT:    s_mov_b32 s33, s32
7062 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7063 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
7064 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7065 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
7066 ; GFX11-NEXT:    v_dual_mov_b32 v0, 3 :: v_dual_mov_b32 v1, 4
7067 ; GFX11-NEXT:    v_dual_mov_b32 v2, 5 :: v_dual_mov_b32 v3, 6
7068 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
7069 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i32_i32@abs32@hi
7070 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i32_i32@abs32@lo
7071 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
7072 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
7073 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7074 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7075 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
7076 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
7077 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
7078 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7079 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
7080 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7081 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
7082 ; GFX11-NEXT:    s_mov_b32 s33, s0
7083 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7084 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7086 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i32_i32:
7087 ; GFX10-SCRATCH:       ; %bb.0:
7088 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7089 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
7090 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
7091 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7092 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
7093 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7094 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7095 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
7096 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 3
7097 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 4
7098 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 5
7099 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 6
7100 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
7101 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i32_i32@abs32@hi
7102 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i32_i32@abs32@lo
7103 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
7104 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
7105 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7106 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
7107 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
7108 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
7109 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7110 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
7111 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7112 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7113 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
7114 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
7115 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
7116 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
7117   call amdgpu_gfx void @external_void_func_v3i32_i32(<3 x i32> <i32 3, i32 4, i32 5>, i32 6)
7118   ret void
7121 define amdgpu_gfx void @test_call_external_void_func_v4i32() #0 {
7122 ; GFX9-LABEL: test_call_external_void_func_v4i32:
7123 ; GFX9:       ; %bb.0:
7124 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7125 ; GFX9-NEXT:    s_mov_b32 s34, s33
7126 ; GFX9-NEXT:    s_mov_b32 s33, s32
7127 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7128 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7129 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7130 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
7131 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
7132 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
7133 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i32@abs32@hi
7134 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i32@abs32@lo
7135 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
7136 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
7137 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7138 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
7139 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
7140 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
7141 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7142 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7143 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7144 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
7145 ; GFX9-NEXT:    s_mov_b32 s33, s34
7146 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7147 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7149 ; GFX10-LABEL: test_call_external_void_func_v4i32:
7150 ; GFX10:       ; %bb.0:
7151 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7152 ; GFX10-NEXT:    s_mov_b32 s34, s33
7153 ; GFX10-NEXT:    s_mov_b32 s33, s32
7154 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7155 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7156 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7157 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7158 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
7159 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
7160 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i32@abs32@hi
7161 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i32@abs32@lo
7162 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
7163 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
7164 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
7165 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7166 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
7167 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
7168 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
7169 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7170 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7171 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7172 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7173 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
7174 ; GFX10-NEXT:    s_mov_b32 s33, s34
7175 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7176 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7178 ; GFX11-LABEL: test_call_external_void_func_v4i32:
7179 ; GFX11:       ; %bb.0:
7180 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7181 ; GFX11-NEXT:    s_mov_b32 s0, s33
7182 ; GFX11-NEXT:    s_mov_b32 s33, s32
7183 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7184 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
7185 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7186 ; GFX11-NEXT:    global_load_b128 v[0:3], v[0:1], off
7187 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
7188 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i32@abs32@hi
7189 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i32@abs32@lo
7190 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
7191 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
7192 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
7193 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7194 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7195 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
7196 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
7197 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
7198 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7199 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
7200 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7201 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
7202 ; GFX11-NEXT:    s_mov_b32 s33, s0
7203 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7204 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7206 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i32:
7207 ; GFX10-SCRATCH:       ; %bb.0:
7208 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7209 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
7210 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
7211 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7212 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
7213 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7214 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7215 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
7216 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
7217 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i32@abs32@hi
7218 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i32@abs32@lo
7219 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
7220 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
7221 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
7222 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7223 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
7224 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
7225 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
7226 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7227 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
7228 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7229 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7230 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
7231 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
7232 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
7233 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
7234   %val = load <4 x i32>, ptr addrspace(1) undef
7235   call amdgpu_gfx void @external_void_func_v4i32(<4 x i32> %val)
7236   ret void
7239 define amdgpu_gfx void @test_call_external_void_func_v4i32_imm() #0 {
7240 ; GFX9-LABEL: test_call_external_void_func_v4i32_imm:
7241 ; GFX9:       ; %bb.0:
7242 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7243 ; GFX9-NEXT:    s_mov_b32 s34, s33
7244 ; GFX9-NEXT:    s_mov_b32 s33, s32
7245 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7246 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7247 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7248 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
7249 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
7250 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i32@abs32@hi
7251 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i32@abs32@lo
7252 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1
7253 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2
7254 ; GFX9-NEXT:    v_mov_b32_e32 v2, 3
7255 ; GFX9-NEXT:    v_mov_b32_e32 v3, 4
7256 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
7257 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
7258 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7259 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
7260 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
7261 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
7262 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7263 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7264 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7265 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
7266 ; GFX9-NEXT:    s_mov_b32 s33, s34
7267 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7268 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7270 ; GFX10-LABEL: test_call_external_void_func_v4i32_imm:
7271 ; GFX10:       ; %bb.0:
7272 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7273 ; GFX10-NEXT:    s_mov_b32 s34, s33
7274 ; GFX10-NEXT:    s_mov_b32 s33, s32
7275 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7276 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7277 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7278 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7279 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
7280 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1
7281 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2
7282 ; GFX10-NEXT:    v_mov_b32_e32 v2, 3
7283 ; GFX10-NEXT:    v_mov_b32_e32 v3, 4
7284 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
7285 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i32@abs32@hi
7286 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i32@abs32@lo
7287 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
7288 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
7289 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7290 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
7291 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
7292 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
7293 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7294 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7295 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7296 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7297 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
7298 ; GFX10-NEXT:    s_mov_b32 s33, s34
7299 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7300 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7302 ; GFX11-LABEL: test_call_external_void_func_v4i32_imm:
7303 ; GFX11:       ; %bb.0:
7304 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7305 ; GFX11-NEXT:    s_mov_b32 s0, s33
7306 ; GFX11-NEXT:    s_mov_b32 s33, s32
7307 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7308 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
7309 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7310 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
7311 ; GFX11-NEXT:    v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 2
7312 ; GFX11-NEXT:    v_dual_mov_b32 v2, 3 :: v_dual_mov_b32 v3, 4
7313 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
7314 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i32@abs32@hi
7315 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i32@abs32@lo
7316 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
7317 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
7318 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7319 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7320 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
7321 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
7322 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
7323 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7324 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
7325 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7326 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
7327 ; GFX11-NEXT:    s_mov_b32 s33, s0
7328 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7329 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7331 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i32_imm:
7332 ; GFX10-SCRATCH:       ; %bb.0:
7333 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7334 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
7335 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
7336 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7337 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
7338 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7339 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7340 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
7341 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1
7342 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2
7343 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 3
7344 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 4
7345 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
7346 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i32@abs32@hi
7347 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i32@abs32@lo
7348 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
7349 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
7350 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7351 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
7352 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
7353 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
7354 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7355 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
7356 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7357 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7358 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
7359 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
7360 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
7361 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
7362   call amdgpu_gfx void @external_void_func_v4i32(<4 x i32> <i32 1, i32 2, i32 3, i32 4>)
7363   ret void
7366 define amdgpu_gfx void @test_call_external_void_func_v5i32_imm() #0 {
7367 ; GFX9-LABEL: test_call_external_void_func_v5i32_imm:
7368 ; GFX9:       ; %bb.0:
7369 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7370 ; GFX9-NEXT:    s_mov_b32 s34, s33
7371 ; GFX9-NEXT:    s_mov_b32 s33, s32
7372 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7373 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7374 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7375 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
7376 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
7377 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v5i32@abs32@hi
7378 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v5i32@abs32@lo
7379 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1
7380 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2
7381 ; GFX9-NEXT:    v_mov_b32_e32 v2, 3
7382 ; GFX9-NEXT:    v_mov_b32_e32 v3, 4
7383 ; GFX9-NEXT:    v_mov_b32_e32 v4, 5
7384 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
7385 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
7386 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7387 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
7388 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
7389 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
7390 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7391 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7392 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7393 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
7394 ; GFX9-NEXT:    s_mov_b32 s33, s34
7395 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7396 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7398 ; GFX10-LABEL: test_call_external_void_func_v5i32_imm:
7399 ; GFX10:       ; %bb.0:
7400 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7401 ; GFX10-NEXT:    s_mov_b32 s34, s33
7402 ; GFX10-NEXT:    s_mov_b32 s33, s32
7403 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7404 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7405 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7406 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7407 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
7408 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1
7409 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2
7410 ; GFX10-NEXT:    v_mov_b32_e32 v2, 3
7411 ; GFX10-NEXT:    v_mov_b32_e32 v3, 4
7412 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
7413 ; GFX10-NEXT:    v_mov_b32_e32 v4, 5
7414 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v5i32@abs32@hi
7415 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v5i32@abs32@lo
7416 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
7417 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
7418 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7419 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
7420 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
7421 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
7422 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7423 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7424 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7425 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7426 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
7427 ; GFX10-NEXT:    s_mov_b32 s33, s34
7428 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7429 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7431 ; GFX11-LABEL: test_call_external_void_func_v5i32_imm:
7432 ; GFX11:       ; %bb.0:
7433 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7434 ; GFX11-NEXT:    s_mov_b32 s0, s33
7435 ; GFX11-NEXT:    s_mov_b32 s33, s32
7436 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7437 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
7438 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7439 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
7440 ; GFX11-NEXT:    v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 2
7441 ; GFX11-NEXT:    v_dual_mov_b32 v2, 3 :: v_dual_mov_b32 v3, 4
7442 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
7443 ; GFX11-NEXT:    v_mov_b32_e32 v4, 5
7444 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v5i32@abs32@hi
7445 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v5i32@abs32@lo
7446 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
7447 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
7448 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7449 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7450 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
7451 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
7452 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
7453 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7454 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
7455 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7456 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
7457 ; GFX11-NEXT:    s_mov_b32 s33, s0
7458 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7459 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7461 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v5i32_imm:
7462 ; GFX10-SCRATCH:       ; %bb.0:
7463 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7464 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
7465 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
7466 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7467 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
7468 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7469 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7470 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
7471 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1
7472 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2
7473 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 3
7474 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 4
7475 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
7476 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 5
7477 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v5i32@abs32@hi
7478 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v5i32@abs32@lo
7479 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
7480 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
7481 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7482 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
7483 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
7484 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
7485 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7486 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
7487 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7488 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7489 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
7490 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
7491 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
7492 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
7493   call amdgpu_gfx void @external_void_func_v5i32(<5 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5>)
7494   ret void
7497 define amdgpu_gfx void @test_call_external_void_func_v8i32() #0 {
7498 ; GFX9-LABEL: test_call_external_void_func_v8i32:
7499 ; GFX9:       ; %bb.0:
7500 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7501 ; GFX9-NEXT:    s_mov_b32 s34, s33
7502 ; GFX9-NEXT:    s_mov_b32 s33, s32
7503 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7504 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7505 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7506 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
7507 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
7508 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
7509 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
7510 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
7511 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
7512 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v8, s[34:35]
7513 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v8, s[34:35] offset:16
7514 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v8i32@abs32@hi
7515 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v8i32@abs32@lo
7516 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
7517 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7518 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
7519 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
7520 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
7521 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7522 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7523 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7524 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
7525 ; GFX9-NEXT:    s_mov_b32 s33, s34
7526 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7527 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7529 ; GFX10-LABEL: test_call_external_void_func_v8i32:
7530 ; GFX10:       ; %bb.0:
7531 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7532 ; GFX10-NEXT:    s_mov_b32 s34, s33
7533 ; GFX10-NEXT:    s_mov_b32 s33, s32
7534 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7535 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7536 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7537 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7538 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
7539 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
7540 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
7541 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
7542 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
7543 ; GFX10-NEXT:    s_clause 0x1
7544 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v8, s[34:35]
7545 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v8, s[34:35] offset:16
7546 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
7547 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v8i32@abs32@hi
7548 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v8i32@abs32@lo
7549 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
7550 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7551 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
7552 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
7553 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
7554 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7555 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7556 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7557 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7558 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
7559 ; GFX10-NEXT:    s_mov_b32 s33, s34
7560 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7561 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7563 ; GFX11-LABEL: test_call_external_void_func_v8i32:
7564 ; GFX11:       ; %bb.0:
7565 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7566 ; GFX11-NEXT:    s_mov_b32 s0, s33
7567 ; GFX11-NEXT:    s_mov_b32 s33, s32
7568 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7569 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
7570 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7571 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
7572 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
7573 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0
7574 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
7575 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
7576 ; GFX11-NEXT:    s_clause 0x1
7577 ; GFX11-NEXT:    global_load_b128 v[0:3], v4, s[0:1]
7578 ; GFX11-NEXT:    global_load_b128 v[4:7], v4, s[0:1] offset:16
7579 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
7580 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v8i32@abs32@hi
7581 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v8i32@abs32@lo
7582 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
7583 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7584 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7585 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
7586 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
7587 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
7588 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7589 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
7590 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7591 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
7592 ; GFX11-NEXT:    s_mov_b32 s33, s0
7593 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7594 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7596 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v8i32:
7597 ; GFX10-SCRATCH:       ; %bb.0:
7598 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7599 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
7600 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
7601 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7602 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
7603 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7604 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7605 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
7606 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
7607 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v8, 0
7608 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
7609 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
7610 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
7611 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v8, s[0:1]
7612 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[4:7], v8, s[0:1] offset:16
7613 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
7614 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v8i32@abs32@hi
7615 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v8i32@abs32@lo
7616 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
7617 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7618 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
7619 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
7620 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
7621 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7622 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
7623 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7624 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7625 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
7626 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
7627 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
7628 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
7629   %ptr = load ptr addrspace(1), ptr addrspace(4) undef
7630   %val = load <8 x i32>, ptr addrspace(1) %ptr
7631   call amdgpu_gfx void @external_void_func_v8i32(<8 x i32> %val)
7632   ret void
7635 define amdgpu_gfx void @test_call_external_void_func_v8i32_imm() #0 {
7636 ; GFX9-LABEL: test_call_external_void_func_v8i32_imm:
7637 ; GFX9:       ; %bb.0:
7638 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7639 ; GFX9-NEXT:    s_mov_b32 s34, s33
7640 ; GFX9-NEXT:    s_mov_b32 s33, s32
7641 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7642 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7643 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7644 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
7645 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
7646 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v8i32@abs32@hi
7647 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v8i32@abs32@lo
7648 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1
7649 ; GFX9-NEXT:    v_mov_b32_e32 v1, 2
7650 ; GFX9-NEXT:    v_mov_b32_e32 v2, 3
7651 ; GFX9-NEXT:    v_mov_b32_e32 v3, 4
7652 ; GFX9-NEXT:    v_mov_b32_e32 v4, 5
7653 ; GFX9-NEXT:    v_mov_b32_e32 v5, 6
7654 ; GFX9-NEXT:    v_mov_b32_e32 v6, 7
7655 ; GFX9-NEXT:    v_mov_b32_e32 v7, 8
7656 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
7657 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
7658 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7659 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
7660 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
7661 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
7662 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7663 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7664 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7665 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
7666 ; GFX9-NEXT:    s_mov_b32 s33, s34
7667 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7668 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7670 ; GFX10-LABEL: test_call_external_void_func_v8i32_imm:
7671 ; GFX10:       ; %bb.0:
7672 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7673 ; GFX10-NEXT:    s_mov_b32 s34, s33
7674 ; GFX10-NEXT:    s_mov_b32 s33, s32
7675 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7676 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7677 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7678 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7679 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
7680 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1
7681 ; GFX10-NEXT:    v_mov_b32_e32 v1, 2
7682 ; GFX10-NEXT:    v_mov_b32_e32 v2, 3
7683 ; GFX10-NEXT:    v_mov_b32_e32 v3, 4
7684 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
7685 ; GFX10-NEXT:    v_mov_b32_e32 v4, 5
7686 ; GFX10-NEXT:    v_mov_b32_e32 v5, 6
7687 ; GFX10-NEXT:    v_mov_b32_e32 v6, 7
7688 ; GFX10-NEXT:    v_mov_b32_e32 v7, 8
7689 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v8i32@abs32@hi
7690 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v8i32@abs32@lo
7691 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
7692 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
7693 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7694 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
7695 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
7696 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
7697 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7698 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7699 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7700 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7701 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
7702 ; GFX10-NEXT:    s_mov_b32 s33, s34
7703 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7704 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7706 ; GFX11-LABEL: test_call_external_void_func_v8i32_imm:
7707 ; GFX11:       ; %bb.0:
7708 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7709 ; GFX11-NEXT:    s_mov_b32 s0, s33
7710 ; GFX11-NEXT:    s_mov_b32 s33, s32
7711 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7712 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
7713 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7714 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
7715 ; GFX11-NEXT:    v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 2
7716 ; GFX11-NEXT:    v_dual_mov_b32 v2, 3 :: v_dual_mov_b32 v3, 4
7717 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
7718 ; GFX11-NEXT:    v_dual_mov_b32 v4, 5 :: v_dual_mov_b32 v5, 6
7719 ; GFX11-NEXT:    v_dual_mov_b32 v6, 7 :: v_dual_mov_b32 v7, 8
7720 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v8i32@abs32@hi
7721 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v8i32@abs32@lo
7722 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
7723 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
7724 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7725 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7726 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
7727 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
7728 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
7729 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7730 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
7731 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7732 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
7733 ; GFX11-NEXT:    s_mov_b32 s33, s0
7734 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7735 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7737 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v8i32_imm:
7738 ; GFX10-SCRATCH:       ; %bb.0:
7739 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7740 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
7741 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
7742 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7743 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
7744 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7745 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7746 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
7747 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1
7748 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 2
7749 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 3
7750 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 4
7751 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
7752 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 5
7753 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 6
7754 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v6, 7
7755 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v7, 8
7756 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v8i32@abs32@hi
7757 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v8i32@abs32@lo
7758 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
7759 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
7760 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7761 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
7762 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
7763 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
7764 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7765 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
7766 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7767 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7768 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
7769 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
7770 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
7771 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
7772   call amdgpu_gfx void @external_void_func_v8i32(<8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>)
7773   ret void
7776 define amdgpu_gfx void @test_call_external_void_func_v16i32() #0 {
7777 ; GFX9-LABEL: test_call_external_void_func_v16i32:
7778 ; GFX9:       ; %bb.0:
7779 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7780 ; GFX9-NEXT:    s_mov_b32 s34, s33
7781 ; GFX9-NEXT:    s_mov_b32 s33, s32
7782 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7783 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7784 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7785 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
7786 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
7787 ; GFX9-NEXT:    v_mov_b32_e32 v16, 0
7788 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
7789 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
7790 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
7791 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v16, s[34:35]
7792 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v16, s[34:35] offset:16
7793 ; GFX9-NEXT:    global_load_dwordx4 v[8:11], v16, s[34:35] offset:32
7794 ; GFX9-NEXT:    global_load_dwordx4 v[12:15], v16, s[34:35] offset:48
7795 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v16i32@abs32@hi
7796 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v16i32@abs32@lo
7797 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
7798 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7799 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
7800 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
7801 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
7802 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7803 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7804 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7805 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
7806 ; GFX9-NEXT:    s_mov_b32 s33, s34
7807 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7808 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7810 ; GFX10-LABEL: test_call_external_void_func_v16i32:
7811 ; GFX10:       ; %bb.0:
7812 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7813 ; GFX10-NEXT:    s_mov_b32 s34, s33
7814 ; GFX10-NEXT:    s_mov_b32 s33, s32
7815 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7816 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7817 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7818 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7819 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
7820 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
7821 ; GFX10-NEXT:    v_mov_b32_e32 v16, 0
7822 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
7823 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
7824 ; GFX10-NEXT:    s_clause 0x3
7825 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v16, s[34:35]
7826 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v16, s[34:35] offset:16
7827 ; GFX10-NEXT:    global_load_dwordx4 v[8:11], v16, s[34:35] offset:32
7828 ; GFX10-NEXT:    global_load_dwordx4 v[12:15], v16, s[34:35] offset:48
7829 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
7830 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v16i32@abs32@hi
7831 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v16i32@abs32@lo
7832 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
7833 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7834 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
7835 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
7836 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
7837 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7838 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7839 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7840 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7841 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
7842 ; GFX10-NEXT:    s_mov_b32 s33, s34
7843 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7844 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7846 ; GFX11-LABEL: test_call_external_void_func_v16i32:
7847 ; GFX11:       ; %bb.0:
7848 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7849 ; GFX11-NEXT:    s_mov_b32 s0, s33
7850 ; GFX11-NEXT:    s_mov_b32 s33, s32
7851 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7852 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
7853 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7854 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
7855 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
7856 ; GFX11-NEXT:    v_mov_b32_e32 v12, 0
7857 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
7858 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
7859 ; GFX11-NEXT:    s_clause 0x3
7860 ; GFX11-NEXT:    global_load_b128 v[0:3], v12, s[0:1]
7861 ; GFX11-NEXT:    global_load_b128 v[4:7], v12, s[0:1] offset:16
7862 ; GFX11-NEXT:    global_load_b128 v[8:11], v12, s[0:1] offset:32
7863 ; GFX11-NEXT:    global_load_b128 v[12:15], v12, s[0:1] offset:48
7864 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
7865 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v16i32@abs32@hi
7866 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v16i32@abs32@lo
7867 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
7868 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7869 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7870 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
7871 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
7872 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
7873 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
7874 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
7875 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
7876 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
7877 ; GFX11-NEXT:    s_mov_b32 s33, s0
7878 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7879 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7881 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v16i32:
7882 ; GFX10-SCRATCH:       ; %bb.0:
7883 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7884 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
7885 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
7886 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7887 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
7888 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7889 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7890 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
7891 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
7892 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v16, 0
7893 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
7894 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
7895 ; GFX10-SCRATCH-NEXT:    s_clause 0x3
7896 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
7897 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
7898 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
7899 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
7900 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
7901 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v16i32@abs32@hi
7902 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v16i32@abs32@lo
7903 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
7904 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
7905 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
7906 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
7907 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
7908 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
7909 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
7910 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
7911 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
7912 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
7913 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
7914 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
7915 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
7916   %ptr = load ptr addrspace(1), ptr addrspace(4) undef
7917   %val = load <16 x i32>, ptr addrspace(1) %ptr
7918   call amdgpu_gfx void @external_void_func_v16i32(<16 x i32> %val)
7919   ret void
7922 define amdgpu_gfx void @test_call_external_void_func_v32i32() #0 {
7923 ; GFX9-LABEL: test_call_external_void_func_v32i32:
7924 ; GFX9:       ; %bb.0:
7925 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7926 ; GFX9-NEXT:    s_mov_b32 s34, s33
7927 ; GFX9-NEXT:    s_mov_b32 s33, s32
7928 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7929 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7930 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7931 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
7932 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
7933 ; GFX9-NEXT:    v_mov_b32_e32 v28, 0
7934 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
7935 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
7936 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
7937 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v28, s[34:35]
7938 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v28, s[34:35] offset:16
7939 ; GFX9-NEXT:    global_load_dwordx4 v[8:11], v28, s[34:35] offset:32
7940 ; GFX9-NEXT:    global_load_dwordx4 v[12:15], v28, s[34:35] offset:48
7941 ; GFX9-NEXT:    global_load_dwordx4 v[16:19], v28, s[34:35] offset:64
7942 ; GFX9-NEXT:    global_load_dwordx4 v[20:23], v28, s[34:35] offset:80
7943 ; GFX9-NEXT:    global_load_dwordx4 v[24:27], v28, s[34:35] offset:96
7944 ; GFX9-NEXT:    s_nop 0
7945 ; GFX9-NEXT:    global_load_dwordx4 v[28:31], v28, s[34:35] offset:112
7946 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v32i32@abs32@hi
7947 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v32i32@abs32@lo
7948 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
7949 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7950 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
7951 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
7952 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
7953 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
7954 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7955 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
7956 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
7957 ; GFX9-NEXT:    s_mov_b32 s33, s34
7958 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7959 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7961 ; GFX10-LABEL: test_call_external_void_func_v32i32:
7962 ; GFX10:       ; %bb.0:
7963 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7964 ; GFX10-NEXT:    s_mov_b32 s34, s33
7965 ; GFX10-NEXT:    s_mov_b32 s33, s32
7966 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7967 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
7968 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7969 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7970 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
7971 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
7972 ; GFX10-NEXT:    v_mov_b32_e32 v32, 0
7973 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
7974 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
7975 ; GFX10-NEXT:    s_clause 0x7
7976 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v32, s[34:35]
7977 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v32, s[34:35] offset:16
7978 ; GFX10-NEXT:    global_load_dwordx4 v[8:11], v32, s[34:35] offset:32
7979 ; GFX10-NEXT:    global_load_dwordx4 v[12:15], v32, s[34:35] offset:48
7980 ; GFX10-NEXT:    global_load_dwordx4 v[16:19], v32, s[34:35] offset:64
7981 ; GFX10-NEXT:    global_load_dwordx4 v[20:23], v32, s[34:35] offset:80
7982 ; GFX10-NEXT:    global_load_dwordx4 v[24:27], v32, s[34:35] offset:96
7983 ; GFX10-NEXT:    global_load_dwordx4 v[28:31], v32, s[34:35] offset:112
7984 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
7985 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v32i32@abs32@hi
7986 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v32i32@abs32@lo
7987 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
7988 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
7989 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
7990 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
7991 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
7992 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
7993 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
7994 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
7995 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
7996 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
7997 ; GFX10-NEXT:    s_mov_b32 s33, s34
7998 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7999 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8001 ; GFX11-LABEL: test_call_external_void_func_v32i32:
8002 ; GFX11:       ; %bb.0:
8003 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8004 ; GFX11-NEXT:    s_mov_b32 s0, s33
8005 ; GFX11-NEXT:    s_mov_b32 s33, s32
8006 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8007 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
8008 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8009 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
8010 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
8011 ; GFX11-NEXT:    v_mov_b32_e32 v28, 0
8012 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
8013 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
8014 ; GFX11-NEXT:    s_clause 0x7
8015 ; GFX11-NEXT:    global_load_b128 v[0:3], v28, s[0:1]
8016 ; GFX11-NEXT:    global_load_b128 v[4:7], v28, s[0:1] offset:16
8017 ; GFX11-NEXT:    global_load_b128 v[8:11], v28, s[0:1] offset:32
8018 ; GFX11-NEXT:    global_load_b128 v[12:15], v28, s[0:1] offset:48
8019 ; GFX11-NEXT:    global_load_b128 v[16:19], v28, s[0:1] offset:64
8020 ; GFX11-NEXT:    global_load_b128 v[20:23], v28, s[0:1] offset:80
8021 ; GFX11-NEXT:    global_load_b128 v[24:27], v28, s[0:1] offset:96
8022 ; GFX11-NEXT:    global_load_b128 v[28:31], v28, s[0:1] offset:112
8023 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
8024 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v32i32@abs32@hi
8025 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v32i32@abs32@lo
8026 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
8027 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8028 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8029 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
8030 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
8031 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
8032 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8033 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
8034 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8035 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
8036 ; GFX11-NEXT:    s_mov_b32 s33, s0
8037 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8038 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8040 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v32i32:
8041 ; GFX10-SCRATCH:       ; %bb.0:
8042 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8043 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
8044 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
8045 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8046 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
8047 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8048 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8049 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
8050 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
8051 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v32, 0
8052 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
8053 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
8054 ; GFX10-SCRATCH-NEXT:    s_clause 0x7
8055 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v32, s[0:1]
8056 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[4:7], v32, s[0:1] offset:16
8057 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[8:11], v32, s[0:1] offset:32
8058 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[12:15], v32, s[0:1] offset:48
8059 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[16:19], v32, s[0:1] offset:64
8060 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[20:23], v32, s[0:1] offset:80
8061 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[24:27], v32, s[0:1] offset:96
8062 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[28:31], v32, s[0:1] offset:112
8063 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
8064 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v32i32@abs32@hi
8065 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v32i32@abs32@lo
8066 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
8067 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8068 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
8069 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
8070 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
8071 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8072 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
8073 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8074 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8075 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
8076 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
8077 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
8078 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
8079   %ptr = load ptr addrspace(1), ptr addrspace(4) undef
8080   %val = load <32 x i32>, ptr addrspace(1) %ptr
8081   call amdgpu_gfx void @external_void_func_v32i32(<32 x i32> %val)
8082   ret void
8085 define amdgpu_gfx void @test_call_external_void_func_v32i32_i32(i32) #0 {
8086 ; GFX9-LABEL: test_call_external_void_func_v32i32_i32:
8087 ; GFX9:       ; %bb.0:
8088 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8089 ; GFX9-NEXT:    s_mov_b32 s34, s33
8090 ; GFX9-NEXT:    s_mov_b32 s33, s32
8091 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8092 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
8093 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8094 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
8095 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
8096 ; GFX9-NEXT:    v_mov_b32_e32 v28, 0
8097 ; GFX9-NEXT:    global_load_dword v32, v[0:1], off
8098 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
8099 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
8100 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v28, s[34:35]
8101 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v28, s[34:35] offset:16
8102 ; GFX9-NEXT:    global_load_dwordx4 v[8:11], v28, s[34:35] offset:32
8103 ; GFX9-NEXT:    global_load_dwordx4 v[12:15], v28, s[34:35] offset:48
8104 ; GFX9-NEXT:    global_load_dwordx4 v[16:19], v28, s[34:35] offset:64
8105 ; GFX9-NEXT:    global_load_dwordx4 v[20:23], v28, s[34:35] offset:80
8106 ; GFX9-NEXT:    global_load_dwordx4 v[24:27], v28, s[34:35] offset:96
8107 ; GFX9-NEXT:    s_nop 0
8108 ; GFX9-NEXT:    global_load_dwordx4 v[28:31], v28, s[34:35] offset:112
8109 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
8110 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v32i32_i32@abs32@hi
8111 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v32i32_i32@abs32@lo
8112 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
8113 ; GFX9-NEXT:    s_waitcnt vmcnt(8)
8114 ; GFX9-NEXT:    buffer_store_dword v32, off, s[0:3], s32
8115 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8116 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
8117 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
8118 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
8119 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8120 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
8121 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8122 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
8123 ; GFX9-NEXT:    s_mov_b32 s33, s34
8124 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8125 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
8127 ; GFX10-LABEL: test_call_external_void_func_v32i32_i32:
8128 ; GFX10:       ; %bb.0:
8129 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8130 ; GFX10-NEXT:    s_mov_b32 s34, s33
8131 ; GFX10-NEXT:    s_mov_b32 s33, s32
8132 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8133 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
8134 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8135 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8136 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
8137 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
8138 ; GFX10-NEXT:    v_mov_b32_e32 v32, 0
8139 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
8140 ; GFX10-NEXT:    global_load_dword v33, v[0:1], off
8141 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
8142 ; GFX10-NEXT:    s_clause 0x7
8143 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v32, s[34:35]
8144 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v32, s[34:35] offset:16
8145 ; GFX10-NEXT:    global_load_dwordx4 v[8:11], v32, s[34:35] offset:32
8146 ; GFX10-NEXT:    global_load_dwordx4 v[12:15], v32, s[34:35] offset:48
8147 ; GFX10-NEXT:    global_load_dwordx4 v[16:19], v32, s[34:35] offset:64
8148 ; GFX10-NEXT:    global_load_dwordx4 v[20:23], v32, s[34:35] offset:80
8149 ; GFX10-NEXT:    global_load_dwordx4 v[24:27], v32, s[34:35] offset:96
8150 ; GFX10-NEXT:    global_load_dwordx4 v[28:31], v32, s[34:35] offset:112
8151 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
8152 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v32i32_i32@abs32@hi
8153 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v32i32_i32@abs32@lo
8154 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
8155 ; GFX10-NEXT:    s_waitcnt vmcnt(8)
8156 ; GFX10-NEXT:    buffer_store_dword v33, off, s[0:3], s32
8157 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8158 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
8159 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
8160 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
8161 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8162 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
8163 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8164 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8165 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
8166 ; GFX10-NEXT:    s_mov_b32 s33, s34
8167 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8168 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8170 ; GFX11-LABEL: test_call_external_void_func_v32i32_i32:
8171 ; GFX11:       ; %bb.0:
8172 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8173 ; GFX11-NEXT:    s_mov_b32 s0, s33
8174 ; GFX11-NEXT:    s_mov_b32 s33, s32
8175 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8176 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
8177 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8178 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
8179 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
8180 ; GFX11-NEXT:    v_mov_b32_e32 v28, 0
8181 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
8182 ; GFX11-NEXT:    global_load_b32 v32, v[0:1], off
8183 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
8184 ; GFX11-NEXT:    s_clause 0x7
8185 ; GFX11-NEXT:    global_load_b128 v[0:3], v28, s[0:1]
8186 ; GFX11-NEXT:    global_load_b128 v[4:7], v28, s[0:1] offset:16
8187 ; GFX11-NEXT:    global_load_b128 v[8:11], v28, s[0:1] offset:32
8188 ; GFX11-NEXT:    global_load_b128 v[12:15], v28, s[0:1] offset:48
8189 ; GFX11-NEXT:    global_load_b128 v[16:19], v28, s[0:1] offset:64
8190 ; GFX11-NEXT:    global_load_b128 v[20:23], v28, s[0:1] offset:80
8191 ; GFX11-NEXT:    global_load_b128 v[24:27], v28, s[0:1] offset:96
8192 ; GFX11-NEXT:    global_load_b128 v[28:31], v28, s[0:1] offset:112
8193 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
8194 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v32i32_i32@abs32@hi
8195 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v32i32_i32@abs32@lo
8196 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
8197 ; GFX11-NEXT:    s_waitcnt vmcnt(8)
8198 ; GFX11-NEXT:    scratch_store_b32 off, v32, s32
8199 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8200 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
8201 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
8202 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
8203 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8204 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
8205 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8206 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
8207 ; GFX11-NEXT:    s_mov_b32 s33, s0
8208 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8209 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8211 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v32i32_i32:
8212 ; GFX10-SCRATCH:       ; %bb.0:
8213 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8214 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
8215 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
8216 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8217 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
8218 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8219 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8220 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
8221 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
8222 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v32, 0
8223 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
8224 ; GFX10-SCRATCH-NEXT:    global_load_dword v33, v[0:1], off
8225 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
8226 ; GFX10-SCRATCH-NEXT:    s_clause 0x7
8227 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v32, s[0:1]
8228 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[4:7], v32, s[0:1] offset:16
8229 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[8:11], v32, s[0:1] offset:32
8230 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[12:15], v32, s[0:1] offset:48
8231 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[16:19], v32, s[0:1] offset:64
8232 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[20:23], v32, s[0:1] offset:80
8233 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[24:27], v32, s[0:1] offset:96
8234 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[28:31], v32, s[0:1] offset:112
8235 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
8236 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v32i32_i32@abs32@hi
8237 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v32i32_i32@abs32@lo
8238 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
8239 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(8)
8240 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v33, s32
8241 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8242 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
8243 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
8244 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
8245 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8246 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
8247 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8248 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8249 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
8250 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
8251 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
8252 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
8253   %ptr0 = load ptr addrspace(1), ptr addrspace(4) undef
8254   %val0 = load <32 x i32>, ptr addrspace(1) %ptr0
8255   %val1 = load i32, ptr addrspace(1) undef
8256   call amdgpu_gfx void @external_void_func_v32i32_i32(<32 x i32> %val0, i32 %val1)
8257   ret void
8260 define amdgpu_gfx void @test_call_external_i32_func_i32_imm(ptr addrspace(1) %out) #0 {
8261 ; GFX9-LABEL: test_call_external_i32_func_i32_imm:
8262 ; GFX9:       ; %bb.0:
8263 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8264 ; GFX9-NEXT:    s_mov_b32 s34, s33
8265 ; GFX9-NEXT:    s_mov_b32 s33, s32
8266 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8267 ; GFX9-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
8268 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8269 ; GFX9-NEXT:    v_writelane_b32 v42, s34, 2
8270 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
8271 ; GFX9-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
8272 ; GFX9-NEXT:    v_writelane_b32 v42, s30, 0
8273 ; GFX9-NEXT:    v_mov_b32_e32 v40, v0
8274 ; GFX9-NEXT:    s_mov_b32 s35, external_i32_func_i32@abs32@hi
8275 ; GFX9-NEXT:    s_mov_b32 s34, external_i32_func_i32@abs32@lo
8276 ; GFX9-NEXT:    v_mov_b32_e32 v0, 42
8277 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
8278 ; GFX9-NEXT:    v_writelane_b32 v42, s31, 1
8279 ; GFX9-NEXT:    v_mov_b32_e32 v41, v1
8280 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8281 ; GFX9-NEXT:    global_store_dword v[40:41], v0, off
8282 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8283 ; GFX9-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload
8284 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
8285 ; GFX9-NEXT:    v_readlane_b32 s31, v42, 1
8286 ; GFX9-NEXT:    v_readlane_b32 s30, v42, 0
8287 ; GFX9-NEXT:    v_readlane_b32 s34, v42, 2
8288 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8289 ; GFX9-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
8290 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8291 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
8292 ; GFX9-NEXT:    s_mov_b32 s33, s34
8293 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8294 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
8296 ; GFX10-LABEL: test_call_external_i32_func_i32_imm:
8297 ; GFX10:       ; %bb.0:
8298 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8299 ; GFX10-NEXT:    s_mov_b32 s34, s33
8300 ; GFX10-NEXT:    s_mov_b32 s33, s32
8301 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8302 ; GFX10-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
8303 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8304 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8305 ; GFX10-NEXT:    v_writelane_b32 v42, s34, 2
8306 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
8307 ; GFX10-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
8308 ; GFX10-NEXT:    v_mov_b32_e32 v40, v0
8309 ; GFX10-NEXT:    v_mov_b32_e32 v0, 42
8310 ; GFX10-NEXT:    s_mov_b32 s35, external_i32_func_i32@abs32@hi
8311 ; GFX10-NEXT:    v_writelane_b32 v42, s30, 0
8312 ; GFX10-NEXT:    s_mov_b32 s34, external_i32_func_i32@abs32@lo
8313 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
8314 ; GFX10-NEXT:    v_mov_b32_e32 v41, v1
8315 ; GFX10-NEXT:    v_writelane_b32 v42, s31, 1
8316 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8317 ; GFX10-NEXT:    global_store_dword v[40:41], v0, off
8318 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
8319 ; GFX10-NEXT:    s_clause 0x1
8320 ; GFX10-NEXT:    buffer_load_dword v41, off, s[0:3], s33
8321 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4
8322 ; GFX10-NEXT:    v_readlane_b32 s31, v42, 1
8323 ; GFX10-NEXT:    v_readlane_b32 s30, v42, 0
8324 ; GFX10-NEXT:    v_readlane_b32 s34, v42, 2
8325 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8326 ; GFX10-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
8327 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8328 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8329 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
8330 ; GFX10-NEXT:    s_mov_b32 s33, s34
8331 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8332 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8334 ; GFX11-LABEL: test_call_external_i32_func_i32_imm:
8335 ; GFX11:       ; %bb.0:
8336 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8337 ; GFX11-NEXT:    s_mov_b32 s0, s33
8338 ; GFX11-NEXT:    s_mov_b32 s33, s32
8339 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8340 ; GFX11-NEXT:    scratch_store_b32 off, v42, s33 offset:8 ; 4-byte Folded Spill
8341 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8342 ; GFX11-NEXT:    v_writelane_b32 v42, s0, 2
8343 ; GFX11-NEXT:    s_clause 0x1
8344 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:4
8345 ; GFX11-NEXT:    scratch_store_b32 off, v41, s33
8346 ; GFX11-NEXT:    v_dual_mov_b32 v41, v1 :: v_dual_mov_b32 v40, v0
8347 ; GFX11-NEXT:    v_mov_b32_e32 v0, 42
8348 ; GFX11-NEXT:    v_writelane_b32 v42, s30, 0
8349 ; GFX11-NEXT:    s_mov_b32 s1, external_i32_func_i32@abs32@hi
8350 ; GFX11-NEXT:    s_mov_b32 s0, external_i32_func_i32@abs32@lo
8351 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
8352 ; GFX11-NEXT:    v_writelane_b32 v42, s31, 1
8353 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8354 ; GFX11-NEXT:    global_store_b32 v[40:41], v0, off dlc
8355 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
8356 ; GFX11-NEXT:    s_clause 0x1
8357 ; GFX11-NEXT:    scratch_load_b32 v41, off, s33
8358 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:4
8359 ; GFX11-NEXT:    v_readlane_b32 s31, v42, 1
8360 ; GFX11-NEXT:    v_readlane_b32 s30, v42, 0
8361 ; GFX11-NEXT:    v_readlane_b32 s0, v42, 2
8362 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8363 ; GFX11-NEXT:    scratch_load_b32 v42, off, s33 offset:8 ; 4-byte Folded Reload
8364 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8365 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
8366 ; GFX11-NEXT:    s_mov_b32 s33, s0
8367 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8368 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8370 ; GFX10-SCRATCH-LABEL: test_call_external_i32_func_i32_imm:
8371 ; GFX10-SCRATCH:       ; %bb.0:
8372 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8373 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
8374 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
8375 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8376 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v42, s33 offset:8 ; 4-byte Folded Spill
8377 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8378 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8379 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s0, 2
8380 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:4 ; 4-byte Folded Spill
8381 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v41, s33 ; 4-byte Folded Spill
8382 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v40, v0
8383 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 42
8384 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_i32_func_i32@abs32@hi
8385 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s30, 0
8386 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_i32_func_i32@abs32@lo
8387 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
8388 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v41, v1
8389 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v42, s31, 1
8390 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8391 ; GFX10-SCRATCH-NEXT:    global_store_dword v[40:41], v0, off
8392 ; GFX10-SCRATCH-NEXT:    s_waitcnt_vscnt null, 0x0
8393 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
8394 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v41, off, s33
8395 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:4
8396 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v42, 1
8397 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v42, 0
8398 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v42, 2
8399 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8400 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v42, off, s33 offset:8 ; 4-byte Folded Reload
8401 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8402 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8403 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
8404 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
8405 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
8406 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
8407   %val = call amdgpu_gfx i32 @external_i32_func_i32(i32 42)
8408   store volatile i32 %val, ptr addrspace(1) %out
8409   ret void
8412 define amdgpu_gfx void @test_call_external_void_func_struct_i8_i32() #0 {
8413 ; GFX9-LABEL: test_call_external_void_func_struct_i8_i32:
8414 ; GFX9:       ; %bb.0:
8415 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8416 ; GFX9-NEXT:    s_mov_b32 s34, s33
8417 ; GFX9-NEXT:    s_mov_b32 s33, s32
8418 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8419 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
8420 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8421 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
8422 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
8423 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
8424 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
8425 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
8426 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
8427 ; GFX9-NEXT:    global_load_ubyte v0, v2, s[34:35]
8428 ; GFX9-NEXT:    global_load_dword v1, v2, s[34:35] offset:4
8429 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_struct_i8_i32@abs32@hi
8430 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_struct_i8_i32@abs32@lo
8431 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
8432 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8433 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
8434 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
8435 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
8436 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8437 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
8438 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8439 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
8440 ; GFX9-NEXT:    s_mov_b32 s33, s34
8441 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8442 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
8444 ; GFX10-LABEL: test_call_external_void_func_struct_i8_i32:
8445 ; GFX10:       ; %bb.0:
8446 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8447 ; GFX10-NEXT:    s_mov_b32 s34, s33
8448 ; GFX10-NEXT:    s_mov_b32 s33, s32
8449 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8450 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
8451 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8452 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8453 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
8454 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
8455 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
8456 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
8457 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
8458 ; GFX10-NEXT:    s_clause 0x1
8459 ; GFX10-NEXT:    global_load_ubyte v0, v2, s[34:35]
8460 ; GFX10-NEXT:    global_load_dword v1, v2, s[34:35] offset:4
8461 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
8462 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_struct_i8_i32@abs32@hi
8463 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_struct_i8_i32@abs32@lo
8464 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
8465 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8466 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
8467 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
8468 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
8469 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8470 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
8471 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8472 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8473 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
8474 ; GFX10-NEXT:    s_mov_b32 s33, s34
8475 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8476 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8478 ; GFX11-LABEL: test_call_external_void_func_struct_i8_i32:
8479 ; GFX11:       ; %bb.0:
8480 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8481 ; GFX11-NEXT:    s_mov_b32 s0, s33
8482 ; GFX11-NEXT:    s_mov_b32 s33, s32
8483 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8484 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
8485 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8486 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
8487 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
8488 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
8489 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
8490 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
8491 ; GFX11-NEXT:    s_clause 0x1
8492 ; GFX11-NEXT:    global_load_u8 v0, v1, s[0:1]
8493 ; GFX11-NEXT:    global_load_b32 v1, v1, s[0:1] offset:4
8494 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
8495 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_struct_i8_i32@abs32@hi
8496 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_struct_i8_i32@abs32@lo
8497 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
8498 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8499 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8500 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
8501 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
8502 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
8503 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8504 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
8505 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8506 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
8507 ; GFX11-NEXT:    s_mov_b32 s33, s0
8508 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8509 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8511 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_struct_i8_i32:
8512 ; GFX10-SCRATCH:       ; %bb.0:
8513 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8514 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
8515 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
8516 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8517 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
8518 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8519 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8520 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
8521 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
8522 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 0
8523 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
8524 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
8525 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
8526 ; GFX10-SCRATCH-NEXT:    global_load_ubyte v0, v2, s[0:1]
8527 ; GFX10-SCRATCH-NEXT:    global_load_dword v1, v2, s[0:1] offset:4
8528 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
8529 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_struct_i8_i32@abs32@hi
8530 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_struct_i8_i32@abs32@lo
8531 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
8532 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8533 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
8534 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
8535 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
8536 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8537 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
8538 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8539 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8540 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
8541 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
8542 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
8543 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
8544   %ptr0 = load ptr addrspace(1), ptr addrspace(4) undef
8545   %val = load { i8, i32 }, ptr addrspace(1) %ptr0
8546   call amdgpu_gfx void @external_void_func_struct_i8_i32({ i8, i32 } %val)
8547   ret void
8550 define amdgpu_gfx void @test_call_external_void_func_byval_struct_i8_i32() #0 {
8551 ; GFX9-LABEL: test_call_external_void_func_byval_struct_i8_i32:
8552 ; GFX9:       ; %bb.0:
8553 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8554 ; GFX9-NEXT:    s_mov_b32 s34, s33
8555 ; GFX9-NEXT:    s_mov_b32 s33, s32
8556 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8557 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
8558 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8559 ; GFX9-NEXT:    v_mov_b32_e32 v0, 3
8560 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
8561 ; GFX9-NEXT:    buffer_store_byte v0, off, s[0:3], s33
8562 ; GFX9-NEXT:    v_mov_b32_e32 v0, 8
8563 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
8564 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:4
8565 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_byval_struct_i8_i32@abs32@hi
8566 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_byval_struct_i8_i32@abs32@lo
8567 ; GFX9-NEXT:    v_lshrrev_b32_e64 v0, 6, s33
8568 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
8569 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
8570 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8571 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
8572 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
8573 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
8574 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8575 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
8576 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8577 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
8578 ; GFX9-NEXT:    s_mov_b32 s33, s34
8579 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8580 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
8582 ; GFX10-LABEL: test_call_external_void_func_byval_struct_i8_i32:
8583 ; GFX10:       ; %bb.0:
8584 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8585 ; GFX10-NEXT:    s_mov_b32 s34, s33
8586 ; GFX10-NEXT:    s_mov_b32 s33, s32
8587 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8588 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
8589 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8590 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8591 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
8592 ; GFX10-NEXT:    v_mov_b32_e32 v0, 3
8593 ; GFX10-NEXT:    v_mov_b32_e32 v1, 8
8594 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_byval_struct_i8_i32@abs32@hi
8595 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_byval_struct_i8_i32@abs32@lo
8596 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
8597 ; GFX10-NEXT:    buffer_store_byte v0, off, s[0:3], s33
8598 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s33 offset:4
8599 ; GFX10-NEXT:    v_lshrrev_b32_e64 v0, 5, s33
8600 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
8601 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
8602 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8603 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
8604 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
8605 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
8606 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8607 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
8608 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8609 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8610 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
8611 ; GFX10-NEXT:    s_mov_b32 s33, s34
8612 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8613 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8615 ; GFX11-LABEL: test_call_external_void_func_byval_struct_i8_i32:
8616 ; GFX11:       ; %bb.0:
8617 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8618 ; GFX11-NEXT:    s_mov_b32 s0, s33
8619 ; GFX11-NEXT:    s_mov_b32 s33, s32
8620 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8621 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:8 ; 4-byte Folded Spill
8622 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8623 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
8624 ; GFX11-NEXT:    v_dual_mov_b32 v0, 3 :: v_dual_mov_b32 v1, 8
8625 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_byval_struct_i8_i32@abs32@hi
8626 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_byval_struct_i8_i32@abs32@lo
8627 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
8628 ; GFX11-NEXT:    s_clause 0x1
8629 ; GFX11-NEXT:    scratch_store_b8 off, v0, s33
8630 ; GFX11-NEXT:    scratch_store_b32 off, v1, s33 offset:4
8631 ; GFX11-NEXT:    v_mov_b32_e32 v0, s33
8632 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
8633 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
8634 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8635 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8636 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
8637 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
8638 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
8639 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8640 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:8 ; 4-byte Folded Reload
8641 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8642 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
8643 ; GFX11-NEXT:    s_mov_b32 s33, s0
8644 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8645 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8647 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_byval_struct_i8_i32:
8648 ; GFX10-SCRATCH:       ; %bb.0:
8649 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8650 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
8651 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
8652 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8653 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:8 ; 4-byte Folded Spill
8654 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8655 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8656 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
8657 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 3
8658 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 8
8659 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_byval_struct_i8_i32@abs32@hi
8660 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_byval_struct_i8_i32@abs32@lo
8661 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
8662 ; GFX10-SCRATCH-NEXT:    scratch_store_byte off, v0, s33
8663 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v1, s33 offset:4
8664 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, s33
8665 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
8666 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
8667 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8668 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
8669 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
8670 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
8671 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8672 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:8 ; 4-byte Folded Reload
8673 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8674 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8675 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
8676 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
8677 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
8678 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
8679   %val = alloca { i8, i32 }, align 4, addrspace(5)
8680   %gep0 = getelementptr inbounds { i8, i32 }, ptr addrspace(5) %val, i32 0, i32 0
8681   %gep1 = getelementptr inbounds { i8, i32 }, ptr addrspace(5) %val, i32 0, i32 1
8682   store i8 3, ptr addrspace(5) %gep0
8683   store i32 8, ptr addrspace(5) %gep1
8684   call amdgpu_gfx void @external_void_func_byval_struct_i8_i32(ptr addrspace(5) byval({ i8, i32 }) %val)
8685   ret void
8688 define amdgpu_gfx void @test_call_external_void_func_sret_struct_i8_i32_byval_struct_i8_i32(i32) #0 {
8689 ; GFX9-LABEL: test_call_external_void_func_sret_struct_i8_i32_byval_struct_i8_i32:
8690 ; GFX9:       ; %bb.0:
8691 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8692 ; GFX9-NEXT:    s_mov_b32 s34, s33
8693 ; GFX9-NEXT:    s_mov_b32 s33, s32
8694 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8695 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:16 ; 4-byte Folded Spill
8696 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8697 ; GFX9-NEXT:    v_mov_b32_e32 v0, 3
8698 ; GFX9-NEXT:    buffer_store_byte v0, off, s[0:3], s33
8699 ; GFX9-NEXT:    v_mov_b32_e32 v0, 8
8700 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
8701 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:4
8702 ; GFX9-NEXT:    v_lshrrev_b32_e64 v0, 6, s33
8703 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
8704 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_sret_struct_i8_i32_byval_struct_i8_i32@abs32@hi
8705 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_sret_struct_i8_i32_byval_struct_i8_i32@abs32@lo
8706 ; GFX9-NEXT:    v_add_u32_e32 v0, 8, v0
8707 ; GFX9-NEXT:    v_lshrrev_b32_e64 v1, 6, s33
8708 ; GFX9-NEXT:    s_addk_i32 s32, 0x800
8709 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
8710 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8711 ; GFX9-NEXT:    buffer_load_ubyte v0, off, s[0:3], s33 offset:8
8712 ; GFX9-NEXT:    buffer_load_dword v1, off, s[0:3], s33 offset:12
8713 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
8714 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
8715 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
8716 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8717 ; GFX9-NEXT:    global_store_byte v[0:1], v0, off
8718 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8719 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
8720 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8721 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8722 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:16 ; 4-byte Folded Reload
8723 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8724 ; GFX9-NEXT:    s_addk_i32 s32, 0xf800
8725 ; GFX9-NEXT:    s_mov_b32 s33, s34
8726 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8727 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
8729 ; GFX10-LABEL: test_call_external_void_func_sret_struct_i8_i32_byval_struct_i8_i32:
8730 ; GFX10:       ; %bb.0:
8731 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8732 ; GFX10-NEXT:    s_mov_b32 s34, s33
8733 ; GFX10-NEXT:    s_mov_b32 s33, s32
8734 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8735 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:16 ; 4-byte Folded Spill
8736 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8737 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8738 ; GFX10-NEXT:    v_mov_b32_e32 v0, 3
8739 ; GFX10-NEXT:    v_mov_b32_e32 v1, 8
8740 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
8741 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_sret_struct_i8_i32_byval_struct_i8_i32@abs32@hi
8742 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_sret_struct_i8_i32_byval_struct_i8_i32@abs32@lo
8743 ; GFX10-NEXT:    buffer_store_byte v0, off, s[0:3], s33
8744 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s33 offset:4
8745 ; GFX10-NEXT:    v_lshrrev_b32_e64 v0, 5, s33
8746 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
8747 ; GFX10-NEXT:    v_lshrrev_b32_e64 v1, 5, s33
8748 ; GFX10-NEXT:    s_addk_i32 s32, 0x400
8749 ; GFX10-NEXT:    v_add_nc_u32_e32 v0, 8, v0
8750 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
8751 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8752 ; GFX10-NEXT:    s_clause 0x1
8753 ; GFX10-NEXT:    buffer_load_ubyte v0, off, s[0:3], s33 offset:8
8754 ; GFX10-NEXT:    buffer_load_dword v1, off, s[0:3], s33 offset:12
8755 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
8756 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
8757 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
8758 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8759 ; GFX10-NEXT:    global_store_byte v[0:1], v0, off
8760 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
8761 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
8762 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
8763 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8764 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:16 ; 4-byte Folded Reload
8765 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8766 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8767 ; GFX10-NEXT:    s_addk_i32 s32, 0xfc00
8768 ; GFX10-NEXT:    s_mov_b32 s33, s34
8769 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8770 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8772 ; GFX11-LABEL: test_call_external_void_func_sret_struct_i8_i32_byval_struct_i8_i32:
8773 ; GFX11:       ; %bb.0:
8774 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8775 ; GFX11-NEXT:    s_mov_b32 s0, s33
8776 ; GFX11-NEXT:    s_mov_b32 s33, s32
8777 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8778 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:16 ; 4-byte Folded Spill
8779 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8780 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
8781 ; GFX11-NEXT:    v_dual_mov_b32 v0, 3 :: v_dual_mov_b32 v1, 8
8782 ; GFX11-NEXT:    s_add_i32 s32, s32, 32
8783 ; GFX11-NEXT:    s_add_i32 s2, s33, 8
8784 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
8785 ; GFX11-NEXT:    s_clause 0x1
8786 ; GFX11-NEXT:    scratch_store_b8 off, v0, s33
8787 ; GFX11-NEXT:    scratch_store_b32 off, v1, s33 offset:4
8788 ; GFX11-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s33
8789 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_sret_struct_i8_i32_byval_struct_i8_i32@abs32@hi
8790 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_sret_struct_i8_i32_byval_struct_i8_i32@abs32@lo
8791 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
8792 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8793 ; GFX11-NEXT:    s_clause 0x1
8794 ; GFX11-NEXT:    scratch_load_u8 v0, off, s33 offset:8
8795 ; GFX11-NEXT:    scratch_load_b32 v1, off, s33 offset:12
8796 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
8797 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
8798 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
8799 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8800 ; GFX11-NEXT:    global_store_b8 v[0:1], v0, off dlc
8801 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
8802 ; GFX11-NEXT:    global_store_b32 v[0:1], v1, off dlc
8803 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
8804 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8805 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:16 ; 4-byte Folded Reload
8806 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8807 ; GFX11-NEXT:    s_addk_i32 s32, 0xffe0
8808 ; GFX11-NEXT:    s_mov_b32 s33, s0
8809 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8810 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8812 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_sret_struct_i8_i32_byval_struct_i8_i32:
8813 ; GFX10-SCRATCH:       ; %bb.0:
8814 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8815 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
8816 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
8817 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8818 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:16 ; 4-byte Folded Spill
8819 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8820 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8821 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
8822 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 3
8823 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 8
8824 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 32
8825 ; GFX10-SCRATCH-NEXT:    s_add_i32 s2, s33, 8
8826 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
8827 ; GFX10-SCRATCH-NEXT:    scratch_store_byte off, v0, s33
8828 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v1, s33 offset:4
8829 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, s2
8830 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, s33
8831 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_sret_struct_i8_i32_byval_struct_i8_i32@abs32@hi
8832 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_sret_struct_i8_i32_byval_struct_i8_i32@abs32@lo
8833 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
8834 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
8835 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
8836 ; GFX10-SCRATCH-NEXT:    scratch_load_ubyte v0, off, s33 offset:8
8837 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v1, off, s33 offset:12
8838 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
8839 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
8840 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
8841 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
8842 ; GFX10-SCRATCH-NEXT:    global_store_byte v[0:1], v0, off
8843 ; GFX10-SCRATCH-NEXT:    s_waitcnt_vscnt null, 0x0
8844 ; GFX10-SCRATCH-NEXT:    global_store_dword v[0:1], v1, off
8845 ; GFX10-SCRATCH-NEXT:    s_waitcnt_vscnt null, 0x0
8846 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
8847 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:16 ; 4-byte Folded Reload
8848 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
8849 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
8850 ; GFX10-SCRATCH-NEXT:    s_addk_i32 s32, 0xffe0
8851 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
8852 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
8853 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
8854   %in.val = alloca { i8, i32 }, align 4, addrspace(5)
8855   %out.val = alloca { i8, i32 }, align 4, addrspace(5)
8856   %in.gep0 = getelementptr inbounds { i8, i32 }, ptr addrspace(5) %in.val, i32 0, i32 0
8857   %in.gep1 = getelementptr inbounds { i8, i32 }, ptr addrspace(5) %in.val, i32 0, i32 1
8858   store i8 3, ptr addrspace(5) %in.gep0
8859   store i32 8, ptr addrspace(5) %in.gep1
8860   call amdgpu_gfx void @external_void_func_sret_struct_i8_i32_byval_struct_i8_i32(ptr addrspace(5) sret({ i8, i32 }) %out.val, ptr addrspace(5) byval({ i8, i32 }) %in.val)
8861   %out.gep0 = getelementptr inbounds { i8, i32 }, ptr addrspace(5) %out.val, i32 0, i32 0
8862   %out.gep1 = getelementptr inbounds { i8, i32 }, ptr addrspace(5) %out.val, i32 0, i32 1
8863   %out.val0 = load i8, ptr addrspace(5) %out.gep0
8864   %out.val1 = load i32, ptr addrspace(5) %out.gep1
8866   store volatile i8 %out.val0, ptr addrspace(1) undef
8867   store volatile i32 %out.val1, ptr addrspace(1) undef
8868   ret void
8871 define amdgpu_gfx void @test_call_external_void_func_v16i8() #0 {
8872 ; GFX9-LABEL: test_call_external_void_func_v16i8:
8873 ; GFX9:       ; %bb.0:
8874 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8875 ; GFX9-NEXT:    s_mov_b32 s34, s33
8876 ; GFX9-NEXT:    s_mov_b32 s33, s32
8877 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8878 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
8879 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8880 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
8881 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
8882 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
8883 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
8884 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
8885 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
8886 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
8887 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v0, s[34:35]
8888 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v16i8@abs32@hi
8889 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v16i8@abs32@lo
8890 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8891 ; GFX9-NEXT:    v_lshrrev_b32_e32 v16, 8, v0
8892 ; GFX9-NEXT:    v_lshrrev_b32_e32 v17, 16, v0
8893 ; GFX9-NEXT:    v_lshrrev_b32_e32 v18, 24, v0
8894 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
8895 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
8896 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
8897 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
8898 ; GFX9-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
8899 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
8900 ; GFX9-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
8901 ; GFX9-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
8902 ; GFX9-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
8903 ; GFX9-NEXT:    v_mov_b32_e32 v4, v1
8904 ; GFX9-NEXT:    v_mov_b32_e32 v8, v2
8905 ; GFX9-NEXT:    v_mov_b32_e32 v12, v3
8906 ; GFX9-NEXT:    v_mov_b32_e32 v1, v16
8907 ; GFX9-NEXT:    v_mov_b32_e32 v2, v17
8908 ; GFX9-NEXT:    v_mov_b32_e32 v3, v18
8909 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8910 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
8911 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
8912 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
8913 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
8914 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
8915 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
8916 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
8917 ; GFX9-NEXT:    s_mov_b32 s33, s34
8918 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8919 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
8921 ; GFX10-LABEL: test_call_external_void_func_v16i8:
8922 ; GFX10:       ; %bb.0:
8923 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8924 ; GFX10-NEXT:    s_mov_b32 s34, s33
8925 ; GFX10-NEXT:    s_mov_b32 s33, s32
8926 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8927 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
8928 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8929 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8930 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
8931 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
8932 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
8933 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
8934 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
8935 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
8936 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
8937 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v0, s[34:35]
8938 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8939 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v16i8@abs32@hi
8940 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v16i8@abs32@lo
8941 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8942 ; GFX10-NEXT:    v_lshrrev_b32_e32 v16, 8, v0
8943 ; GFX10-NEXT:    v_lshrrev_b32_e32 v17, 16, v0
8944 ; GFX10-NEXT:    v_lshrrev_b32_e32 v18, 24, v0
8945 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
8946 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
8947 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
8948 ; GFX10-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
8949 ; GFX10-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
8950 ; GFX10-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
8951 ; GFX10-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
8952 ; GFX10-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
8953 ; GFX10-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
8954 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
8955 ; GFX10-NEXT:    v_mov_b32_e32 v8, v2
8956 ; GFX10-NEXT:    v_mov_b32_e32 v12, v3
8957 ; GFX10-NEXT:    v_mov_b32_e32 v1, v16
8958 ; GFX10-NEXT:    v_mov_b32_e32 v2, v17
8959 ; GFX10-NEXT:    v_mov_b32_e32 v3, v18
8960 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
8961 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
8962 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
8963 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
8964 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
8965 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
8966 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
8967 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
8968 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
8969 ; GFX10-NEXT:    s_mov_b32 s33, s34
8970 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8971 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8973 ; GFX11-LABEL: test_call_external_void_func_v16i8:
8974 ; GFX11:       ; %bb.0:
8975 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8976 ; GFX11-NEXT:    s_mov_b32 s0, s33
8977 ; GFX11-NEXT:    s_mov_b32 s33, s32
8978 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
8979 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
8980 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
8981 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
8982 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
8983 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
8984 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
8985 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
8986 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
8987 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
8988 ; GFX11-NEXT:    global_load_b128 v[0:3], v0, s[0:1]
8989 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v16i8@abs32@hi
8990 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v16i8@abs32@lo
8991 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8992 ; GFX11-NEXT:    v_lshrrev_b32_e32 v16, 8, v0
8993 ; GFX11-NEXT:    v_lshrrev_b32_e32 v17, 16, v0
8994 ; GFX11-NEXT:    v_lshrrev_b32_e32 v18, 24, v0
8995 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
8996 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
8997 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
8998 ; GFX11-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
8999 ; GFX11-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
9000 ; GFX11-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
9001 ; GFX11-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
9002 ; GFX11-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
9003 ; GFX11-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
9004 ; GFX11-NEXT:    v_mov_b32_e32 v4, v1
9005 ; GFX11-NEXT:    v_mov_b32_e32 v8, v2
9006 ; GFX11-NEXT:    v_dual_mov_b32 v12, v3 :: v_dual_mov_b32 v3, v18
9007 ; GFX11-NEXT:    v_dual_mov_b32 v1, v16 :: v_dual_mov_b32 v2, v17
9008 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9009 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
9010 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
9011 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
9012 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9013 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
9014 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9015 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
9016 ; GFX11-NEXT:    s_mov_b32 s33, s0
9017 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9018 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9020 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v16i8:
9021 ; GFX10-SCRATCH:       ; %bb.0:
9022 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9023 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
9024 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
9025 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9026 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
9027 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9028 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9029 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
9030 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
9031 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
9032 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
9033 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
9034 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
9035 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
9036 ; GFX10-SCRATCH-NEXT:    global_load_dwordx4 v[0:3], v0, s[0:1]
9037 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9038 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v16i8@abs32@hi
9039 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v16i8@abs32@lo
9040 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
9041 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v16, 8, v0
9042 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v17, 16, v0
9043 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v18, 24, v0
9044 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
9045 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
9046 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
9047 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
9048 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
9049 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
9050 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
9051 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
9052 ; GFX10-SCRATCH-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
9053 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, v1
9054 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v8, v2
9055 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v12, v3
9056 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, v16
9057 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, v17
9058 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, v18
9059 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9060 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
9061 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
9062 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
9063 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9064 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
9065 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9066 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9067 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
9068 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
9069 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
9070 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
9071   %ptr = load ptr addrspace(1), ptr addrspace(4) undef
9072   %val = load <16 x i8>, ptr addrspace(1) %ptr
9073   call amdgpu_gfx void @external_void_func_v16i8(<16 x i8> %val)
9074   ret void
9077 define void @tail_call_byval_align16(<32 x i32> %val, double %tmp) #0 {
9078 ; GFX9-LABEL: tail_call_byval_align16:
9079 ; GFX9:       ; %bb.0: ; %entry
9080 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9081 ; GFX9-NEXT:    s_mov_b32 s6, s33
9082 ; GFX9-NEXT:    s_mov_b32 s33, s32
9083 ; GFX9-NEXT:    s_or_saveexec_b64 s[4:5], -1
9084 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:24 ; 4-byte Folded Spill
9085 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
9086 ; GFX9-NEXT:    buffer_load_dword v32, off, s[0:3], s33 offset:16
9087 ; GFX9-NEXT:    buffer_load_dword v33, off, s[0:3], s33 offset:20
9088 ; GFX9-NEXT:    buffer_load_dword v31, off, s[0:3], s33
9089 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
9090 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
9091 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
9092 ; GFX9-NEXT:    v_writelane_b32 v40, s35, 3
9093 ; GFX9-NEXT:    v_writelane_b32 v40, s36, 4
9094 ; GFX9-NEXT:    v_writelane_b32 v40, s37, 5
9095 ; GFX9-NEXT:    v_writelane_b32 v40, s38, 6
9096 ; GFX9-NEXT:    v_writelane_b32 v40, s39, 7
9097 ; GFX9-NEXT:    v_writelane_b32 v40, s40, 8
9098 ; GFX9-NEXT:    v_writelane_b32 v40, s41, 9
9099 ; GFX9-NEXT:    v_writelane_b32 v40, s42, 10
9100 ; GFX9-NEXT:    v_writelane_b32 v40, s43, 11
9101 ; GFX9-NEXT:    v_writelane_b32 v40, s44, 12
9102 ; GFX9-NEXT:    v_writelane_b32 v40, s45, 13
9103 ; GFX9-NEXT:    v_writelane_b32 v40, s46, 14
9104 ; GFX9-NEXT:    v_writelane_b32 v40, s47, 15
9105 ; GFX9-NEXT:    v_writelane_b32 v40, s48, 16
9106 ; GFX9-NEXT:    v_writelane_b32 v40, s49, 17
9107 ; GFX9-NEXT:    v_writelane_b32 v40, s50, 18
9108 ; GFX9-NEXT:    v_writelane_b32 v40, s51, 19
9109 ; GFX9-NEXT:    v_writelane_b32 v40, s52, 20
9110 ; GFX9-NEXT:    v_writelane_b32 v40, s53, 21
9111 ; GFX9-NEXT:    v_writelane_b32 v40, s54, 22
9112 ; GFX9-NEXT:    v_writelane_b32 v40, s55, 23
9113 ; GFX9-NEXT:    v_writelane_b32 v40, s56, 24
9114 ; GFX9-NEXT:    v_writelane_b32 v40, s57, 25
9115 ; GFX9-NEXT:    v_writelane_b32 v40, s58, 26
9116 ; GFX9-NEXT:    v_writelane_b32 v40, s59, 27
9117 ; GFX9-NEXT:    v_writelane_b32 v40, s60, 28
9118 ; GFX9-NEXT:    v_writelane_b32 v40, s61, 29
9119 ; GFX9-NEXT:    s_addk_i32 s32, 0x800
9120 ; GFX9-NEXT:    v_writelane_b32 v40, s62, 30
9121 ; GFX9-NEXT:    s_mov_b32 s5, byval_align16_f64_arg@abs32@hi
9122 ; GFX9-NEXT:    s_mov_b32 s4, byval_align16_f64_arg@abs32@lo
9123 ; GFX9-NEXT:    v_writelane_b32 v40, s63, 31
9124 ; GFX9-NEXT:    s_waitcnt vmcnt(2)
9125 ; GFX9-NEXT:    buffer_store_dword v32, off, s[0:3], s32
9126 ; GFX9-NEXT:    s_waitcnt vmcnt(2)
9127 ; GFX9-NEXT:    buffer_store_dword v33, off, s[0:3], s32 offset:4
9128 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[4:5]
9129 ; GFX9-NEXT:    v_readlane_b32 s63, v40, 31
9130 ; GFX9-NEXT:    v_readlane_b32 s62, v40, 30
9131 ; GFX9-NEXT:    v_readlane_b32 s61, v40, 29
9132 ; GFX9-NEXT:    v_readlane_b32 s60, v40, 28
9133 ; GFX9-NEXT:    v_readlane_b32 s59, v40, 27
9134 ; GFX9-NEXT:    v_readlane_b32 s58, v40, 26
9135 ; GFX9-NEXT:    v_readlane_b32 s57, v40, 25
9136 ; GFX9-NEXT:    v_readlane_b32 s56, v40, 24
9137 ; GFX9-NEXT:    v_readlane_b32 s55, v40, 23
9138 ; GFX9-NEXT:    v_readlane_b32 s54, v40, 22
9139 ; GFX9-NEXT:    v_readlane_b32 s53, v40, 21
9140 ; GFX9-NEXT:    v_readlane_b32 s52, v40, 20
9141 ; GFX9-NEXT:    v_readlane_b32 s51, v40, 19
9142 ; GFX9-NEXT:    v_readlane_b32 s50, v40, 18
9143 ; GFX9-NEXT:    v_readlane_b32 s49, v40, 17
9144 ; GFX9-NEXT:    v_readlane_b32 s48, v40, 16
9145 ; GFX9-NEXT:    v_readlane_b32 s47, v40, 15
9146 ; GFX9-NEXT:    v_readlane_b32 s46, v40, 14
9147 ; GFX9-NEXT:    v_readlane_b32 s45, v40, 13
9148 ; GFX9-NEXT:    v_readlane_b32 s44, v40, 12
9149 ; GFX9-NEXT:    v_readlane_b32 s43, v40, 11
9150 ; GFX9-NEXT:    v_readlane_b32 s42, v40, 10
9151 ; GFX9-NEXT:    v_readlane_b32 s41, v40, 9
9152 ; GFX9-NEXT:    v_readlane_b32 s40, v40, 8
9153 ; GFX9-NEXT:    v_readlane_b32 s39, v40, 7
9154 ; GFX9-NEXT:    v_readlane_b32 s38, v40, 6
9155 ; GFX9-NEXT:    v_readlane_b32 s37, v40, 5
9156 ; GFX9-NEXT:    v_readlane_b32 s36, v40, 4
9157 ; GFX9-NEXT:    v_readlane_b32 s35, v40, 3
9158 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
9159 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
9160 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
9161 ; GFX9-NEXT:    s_or_saveexec_b64 s[4:5], -1
9162 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:24 ; 4-byte Folded Reload
9163 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
9164 ; GFX9-NEXT:    s_addk_i32 s32, 0xf800
9165 ; GFX9-NEXT:    s_mov_b32 s33, s6
9166 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
9167 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9169 ; GFX10-LABEL: tail_call_byval_align16:
9170 ; GFX10:       ; %bb.0: ; %entry
9171 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9172 ; GFX10-NEXT:    s_mov_b32 s6, s33
9173 ; GFX10-NEXT:    s_mov_b32 s33, s32
9174 ; GFX10-NEXT:    s_or_saveexec_b32 s4, -1
9175 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:24 ; 4-byte Folded Spill
9176 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9177 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
9178 ; GFX10-NEXT:    s_clause 0x2
9179 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s33 offset:16
9180 ; GFX10-NEXT:    buffer_load_dword v33, off, s[0:3], s33 offset:20
9181 ; GFX10-NEXT:    buffer_load_dword v31, off, s[0:3], s33
9182 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
9183 ; GFX10-NEXT:    s_addk_i32 s32, 0x400
9184 ; GFX10-NEXT:    s_mov_b32 s5, byval_align16_f64_arg@abs32@hi
9185 ; GFX10-NEXT:    s_mov_b32 s4, byval_align16_f64_arg@abs32@lo
9186 ; GFX10-NEXT:    s_waitcnt vmcnt(2)
9187 ; GFX10-NEXT:    buffer_store_dword v32, off, s[0:3], s32
9188 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
9189 ; GFX10-NEXT:    buffer_store_dword v33, off, s[0:3], s32 offset:4
9190 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
9191 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
9192 ; GFX10-NEXT:    v_writelane_b32 v40, s35, 3
9193 ; GFX10-NEXT:    v_writelane_b32 v40, s36, 4
9194 ; GFX10-NEXT:    v_writelane_b32 v40, s37, 5
9195 ; GFX10-NEXT:    v_writelane_b32 v40, s38, 6
9196 ; GFX10-NEXT:    v_writelane_b32 v40, s39, 7
9197 ; GFX10-NEXT:    v_writelane_b32 v40, s40, 8
9198 ; GFX10-NEXT:    v_writelane_b32 v40, s41, 9
9199 ; GFX10-NEXT:    v_writelane_b32 v40, s42, 10
9200 ; GFX10-NEXT:    v_writelane_b32 v40, s43, 11
9201 ; GFX10-NEXT:    v_writelane_b32 v40, s44, 12
9202 ; GFX10-NEXT:    v_writelane_b32 v40, s45, 13
9203 ; GFX10-NEXT:    v_writelane_b32 v40, s46, 14
9204 ; GFX10-NEXT:    v_writelane_b32 v40, s47, 15
9205 ; GFX10-NEXT:    v_writelane_b32 v40, s48, 16
9206 ; GFX10-NEXT:    v_writelane_b32 v40, s49, 17
9207 ; GFX10-NEXT:    v_writelane_b32 v40, s50, 18
9208 ; GFX10-NEXT:    v_writelane_b32 v40, s51, 19
9209 ; GFX10-NEXT:    v_writelane_b32 v40, s52, 20
9210 ; GFX10-NEXT:    v_writelane_b32 v40, s53, 21
9211 ; GFX10-NEXT:    v_writelane_b32 v40, s54, 22
9212 ; GFX10-NEXT:    v_writelane_b32 v40, s55, 23
9213 ; GFX10-NEXT:    v_writelane_b32 v40, s56, 24
9214 ; GFX10-NEXT:    v_writelane_b32 v40, s57, 25
9215 ; GFX10-NEXT:    v_writelane_b32 v40, s58, 26
9216 ; GFX10-NEXT:    v_writelane_b32 v40, s59, 27
9217 ; GFX10-NEXT:    v_writelane_b32 v40, s60, 28
9218 ; GFX10-NEXT:    v_writelane_b32 v40, s61, 29
9219 ; GFX10-NEXT:    v_writelane_b32 v40, s62, 30
9220 ; GFX10-NEXT:    v_writelane_b32 v40, s63, 31
9221 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[4:5]
9222 ; GFX10-NEXT:    v_readlane_b32 s63, v40, 31
9223 ; GFX10-NEXT:    v_readlane_b32 s62, v40, 30
9224 ; GFX10-NEXT:    v_readlane_b32 s61, v40, 29
9225 ; GFX10-NEXT:    v_readlane_b32 s60, v40, 28
9226 ; GFX10-NEXT:    v_readlane_b32 s59, v40, 27
9227 ; GFX10-NEXT:    v_readlane_b32 s58, v40, 26
9228 ; GFX10-NEXT:    v_readlane_b32 s57, v40, 25
9229 ; GFX10-NEXT:    v_readlane_b32 s56, v40, 24
9230 ; GFX10-NEXT:    v_readlane_b32 s55, v40, 23
9231 ; GFX10-NEXT:    v_readlane_b32 s54, v40, 22
9232 ; GFX10-NEXT:    v_readlane_b32 s53, v40, 21
9233 ; GFX10-NEXT:    v_readlane_b32 s52, v40, 20
9234 ; GFX10-NEXT:    v_readlane_b32 s51, v40, 19
9235 ; GFX10-NEXT:    v_readlane_b32 s50, v40, 18
9236 ; GFX10-NEXT:    v_readlane_b32 s49, v40, 17
9237 ; GFX10-NEXT:    v_readlane_b32 s48, v40, 16
9238 ; GFX10-NEXT:    v_readlane_b32 s47, v40, 15
9239 ; GFX10-NEXT:    v_readlane_b32 s46, v40, 14
9240 ; GFX10-NEXT:    v_readlane_b32 s45, v40, 13
9241 ; GFX10-NEXT:    v_readlane_b32 s44, v40, 12
9242 ; GFX10-NEXT:    v_readlane_b32 s43, v40, 11
9243 ; GFX10-NEXT:    v_readlane_b32 s42, v40, 10
9244 ; GFX10-NEXT:    v_readlane_b32 s41, v40, 9
9245 ; GFX10-NEXT:    v_readlane_b32 s40, v40, 8
9246 ; GFX10-NEXT:    v_readlane_b32 s39, v40, 7
9247 ; GFX10-NEXT:    v_readlane_b32 s38, v40, 6
9248 ; GFX10-NEXT:    v_readlane_b32 s37, v40, 5
9249 ; GFX10-NEXT:    v_readlane_b32 s36, v40, 4
9250 ; GFX10-NEXT:    v_readlane_b32 s35, v40, 3
9251 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
9252 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
9253 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
9254 ; GFX10-NEXT:    s_or_saveexec_b32 s4, -1
9255 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:24 ; 4-byte Folded Reload
9256 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9257 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
9258 ; GFX10-NEXT:    s_addk_i32 s32, 0xfc00
9259 ; GFX10-NEXT:    s_mov_b32 s33, s6
9260 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9261 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9263 ; GFX11-LABEL: tail_call_byval_align16:
9264 ; GFX11:       ; %bb.0: ; %entry
9265 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9266 ; GFX11-NEXT:    s_mov_b32 s4, s33
9267 ; GFX11-NEXT:    s_mov_b32 s33, s32
9268 ; GFX11-NEXT:    s_or_saveexec_b32 s0, -1
9269 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:24 ; 4-byte Folded Spill
9270 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
9271 ; GFX11-NEXT:    s_clause 0x1
9272 ; GFX11-NEXT:    scratch_load_b64 v[32:33], off, s33 offset:16
9273 ; GFX11-NEXT:    scratch_load_b32 v31, off, s33
9274 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
9275 ; GFX11-NEXT:    s_add_i32 s32, s32, 32
9276 ; GFX11-NEXT:    s_mov_b32 s1, byval_align16_f64_arg@abs32@hi
9277 ; GFX11-NEXT:    s_mov_b32 s0, byval_align16_f64_arg@abs32@lo
9278 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
9279 ; GFX11-NEXT:    v_writelane_b32 v40, s34, 2
9280 ; GFX11-NEXT:    v_writelane_b32 v40, s35, 3
9281 ; GFX11-NEXT:    v_writelane_b32 v40, s36, 4
9282 ; GFX11-NEXT:    v_writelane_b32 v40, s37, 5
9283 ; GFX11-NEXT:    v_writelane_b32 v40, s38, 6
9284 ; GFX11-NEXT:    v_writelane_b32 v40, s39, 7
9285 ; GFX11-NEXT:    v_writelane_b32 v40, s40, 8
9286 ; GFX11-NEXT:    v_writelane_b32 v40, s41, 9
9287 ; GFX11-NEXT:    v_writelane_b32 v40, s42, 10
9288 ; GFX11-NEXT:    v_writelane_b32 v40, s43, 11
9289 ; GFX11-NEXT:    v_writelane_b32 v40, s44, 12
9290 ; GFX11-NEXT:    v_writelane_b32 v40, s45, 13
9291 ; GFX11-NEXT:    v_writelane_b32 v40, s46, 14
9292 ; GFX11-NEXT:    v_writelane_b32 v40, s47, 15
9293 ; GFX11-NEXT:    v_writelane_b32 v40, s48, 16
9294 ; GFX11-NEXT:    v_writelane_b32 v40, s49, 17
9295 ; GFX11-NEXT:    v_writelane_b32 v40, s50, 18
9296 ; GFX11-NEXT:    v_writelane_b32 v40, s51, 19
9297 ; GFX11-NEXT:    v_writelane_b32 v40, s52, 20
9298 ; GFX11-NEXT:    v_writelane_b32 v40, s53, 21
9299 ; GFX11-NEXT:    v_writelane_b32 v40, s54, 22
9300 ; GFX11-NEXT:    v_writelane_b32 v40, s55, 23
9301 ; GFX11-NEXT:    v_writelane_b32 v40, s56, 24
9302 ; GFX11-NEXT:    v_writelane_b32 v40, s57, 25
9303 ; GFX11-NEXT:    v_writelane_b32 v40, s58, 26
9304 ; GFX11-NEXT:    v_writelane_b32 v40, s59, 27
9305 ; GFX11-NEXT:    v_writelane_b32 v40, s60, 28
9306 ; GFX11-NEXT:    v_writelane_b32 v40, s61, 29
9307 ; GFX11-NEXT:    v_writelane_b32 v40, s62, 30
9308 ; GFX11-NEXT:    v_writelane_b32 v40, s63, 31
9309 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
9310 ; GFX11-NEXT:    scratch_store_b64 off, v[32:33], s32
9311 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9312 ; GFX11-NEXT:    v_readlane_b32 s63, v40, 31
9313 ; GFX11-NEXT:    v_readlane_b32 s62, v40, 30
9314 ; GFX11-NEXT:    v_readlane_b32 s61, v40, 29
9315 ; GFX11-NEXT:    v_readlane_b32 s60, v40, 28
9316 ; GFX11-NEXT:    v_readlane_b32 s59, v40, 27
9317 ; GFX11-NEXT:    v_readlane_b32 s58, v40, 26
9318 ; GFX11-NEXT:    v_readlane_b32 s57, v40, 25
9319 ; GFX11-NEXT:    v_readlane_b32 s56, v40, 24
9320 ; GFX11-NEXT:    v_readlane_b32 s55, v40, 23
9321 ; GFX11-NEXT:    v_readlane_b32 s54, v40, 22
9322 ; GFX11-NEXT:    v_readlane_b32 s53, v40, 21
9323 ; GFX11-NEXT:    v_readlane_b32 s52, v40, 20
9324 ; GFX11-NEXT:    v_readlane_b32 s51, v40, 19
9325 ; GFX11-NEXT:    v_readlane_b32 s50, v40, 18
9326 ; GFX11-NEXT:    v_readlane_b32 s49, v40, 17
9327 ; GFX11-NEXT:    v_readlane_b32 s48, v40, 16
9328 ; GFX11-NEXT:    v_readlane_b32 s47, v40, 15
9329 ; GFX11-NEXT:    v_readlane_b32 s46, v40, 14
9330 ; GFX11-NEXT:    v_readlane_b32 s45, v40, 13
9331 ; GFX11-NEXT:    v_readlane_b32 s44, v40, 12
9332 ; GFX11-NEXT:    v_readlane_b32 s43, v40, 11
9333 ; GFX11-NEXT:    v_readlane_b32 s42, v40, 10
9334 ; GFX11-NEXT:    v_readlane_b32 s41, v40, 9
9335 ; GFX11-NEXT:    v_readlane_b32 s40, v40, 8
9336 ; GFX11-NEXT:    v_readlane_b32 s39, v40, 7
9337 ; GFX11-NEXT:    v_readlane_b32 s38, v40, 6
9338 ; GFX11-NEXT:    v_readlane_b32 s37, v40, 5
9339 ; GFX11-NEXT:    v_readlane_b32 s36, v40, 4
9340 ; GFX11-NEXT:    v_readlane_b32 s35, v40, 3
9341 ; GFX11-NEXT:    v_readlane_b32 s34, v40, 2
9342 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
9343 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
9344 ; GFX11-NEXT:    s_or_saveexec_b32 s0, -1
9345 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:24 ; 4-byte Folded Reload
9346 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
9347 ; GFX11-NEXT:    s_addk_i32 s32, 0xffe0
9348 ; GFX11-NEXT:    s_mov_b32 s33, s4
9349 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9350 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9352 ; GFX10-SCRATCH-LABEL: tail_call_byval_align16:
9353 ; GFX10-SCRATCH:       ; %bb.0: ; %entry
9354 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9355 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, s33
9356 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
9357 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s0, -1
9358 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:24 ; 4-byte Folded Spill
9359 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9360 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s0
9361 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
9362 ; GFX10-SCRATCH-NEXT:    scratch_load_dwordx2 v[32:33], off, s33 offset:16
9363 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v31, off, s33
9364 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
9365 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 32
9366 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, byval_align16_f64_arg@abs32@hi
9367 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, byval_align16_f64_arg@abs32@lo
9368 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
9369 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s34, 2
9370 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s35, 3
9371 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s36, 4
9372 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s37, 5
9373 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s38, 6
9374 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s39, 7
9375 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s40, 8
9376 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s41, 9
9377 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s42, 10
9378 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s43, 11
9379 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s44, 12
9380 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s45, 13
9381 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s46, 14
9382 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s47, 15
9383 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s48, 16
9384 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s49, 17
9385 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s50, 18
9386 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s51, 19
9387 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s52, 20
9388 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s53, 21
9389 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s54, 22
9390 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s55, 23
9391 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s56, 24
9392 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s57, 25
9393 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s58, 26
9394 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s59, 27
9395 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s60, 28
9396 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s61, 29
9397 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s62, 30
9398 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s63, 31
9399 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(1)
9400 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx2 off, v[32:33], s32
9401 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9402 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s63, v40, 31
9403 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s62, v40, 30
9404 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s61, v40, 29
9405 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s60, v40, 28
9406 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s59, v40, 27
9407 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s58, v40, 26
9408 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s57, v40, 25
9409 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s56, v40, 24
9410 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s55, v40, 23
9411 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s54, v40, 22
9412 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s53, v40, 21
9413 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s52, v40, 20
9414 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s51, v40, 19
9415 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s50, v40, 18
9416 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s49, v40, 17
9417 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s48, v40, 16
9418 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s47, v40, 15
9419 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s46, v40, 14
9420 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s45, v40, 13
9421 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s44, v40, 12
9422 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s43, v40, 11
9423 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s42, v40, 10
9424 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s41, v40, 9
9425 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s40, v40, 8
9426 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s39, v40, 7
9427 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s38, v40, 6
9428 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s37, v40, 5
9429 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s36, v40, 4
9430 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s35, v40, 3
9431 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s34, v40, 2
9432 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
9433 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
9434 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s0, -1
9435 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:24 ; 4-byte Folded Reload
9436 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9437 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s0
9438 ; GFX10-SCRATCH-NEXT:    s_addk_i32 s32, 0xffe0
9439 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s4
9440 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
9441 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
9442 entry:
9443   %alloca = alloca double, align 8, addrspace(5)
9444   tail call amdgpu_gfx void @byval_align16_f64_arg(<32 x i32> %val, ptr addrspace(5) byval(double) align 16 %alloca)
9445   ret void
9448 ; inreg arguments are put in sgprs
9449 define amdgpu_gfx void @test_call_external_void_func_i1_imm_inreg() #0 {
9450 ; GFX9-LABEL: test_call_external_void_func_i1_imm_inreg:
9451 ; GFX9:       ; %bb.0:
9452 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9453 ; GFX9-NEXT:    s_mov_b32 s34, s33
9454 ; GFX9-NEXT:    s_mov_b32 s33, s32
9455 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9456 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9457 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9458 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
9459 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
9460 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
9461 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1
9462 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i1_inreg@abs32@hi
9463 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i1_inreg@abs32@lo
9464 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
9465 ; GFX9-NEXT:    buffer_store_byte v0, off, s[0:3], s32
9466 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9467 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
9468 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
9469 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
9470 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9471 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9472 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9473 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
9474 ; GFX9-NEXT:    s_mov_b32 s33, s34
9475 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
9476 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9478 ; GFX10-LABEL: test_call_external_void_func_i1_imm_inreg:
9479 ; GFX10:       ; %bb.0:
9480 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9481 ; GFX10-NEXT:    s_mov_b32 s34, s33
9482 ; GFX10-NEXT:    s_mov_b32 s33, s32
9483 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9484 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9485 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9486 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9487 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
9488 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1
9489 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
9490 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i1_inreg@abs32@hi
9491 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i1_inreg@abs32@lo
9492 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
9493 ; GFX10-NEXT:    buffer_store_byte v0, off, s[0:3], s32
9494 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
9495 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9496 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
9497 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
9498 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
9499 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9500 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9501 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9502 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9503 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
9504 ; GFX10-NEXT:    s_mov_b32 s33, s34
9505 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9506 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9508 ; GFX11-LABEL: test_call_external_void_func_i1_imm_inreg:
9509 ; GFX11:       ; %bb.0:
9510 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9511 ; GFX11-NEXT:    s_mov_b32 s0, s33
9512 ; GFX11-NEXT:    s_mov_b32 s33, s32
9513 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9514 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
9515 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9516 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
9517 ; GFX11-NEXT:    v_mov_b32_e32 v0, 1
9518 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
9519 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i1_inreg@abs32@hi
9520 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i1_inreg@abs32@lo
9521 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
9522 ; GFX11-NEXT:    scratch_store_b8 off, v0, s32
9523 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
9524 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9525 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9526 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
9527 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
9528 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
9529 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9530 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
9531 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9532 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
9533 ; GFX11-NEXT:    s_mov_b32 s33, s0
9534 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9535 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9537 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i1_imm_inreg:
9538 ; GFX10-SCRATCH:       ; %bb.0:
9539 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9540 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
9541 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
9542 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9543 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
9544 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9545 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9546 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
9547 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 1
9548 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
9549 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i1_inreg@abs32@hi
9550 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i1_inreg@abs32@lo
9551 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
9552 ; GFX10-SCRATCH-NEXT:    scratch_store_byte off, v0, s32
9553 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
9554 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9555 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
9556 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
9557 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
9558 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9559 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
9560 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9561 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9562 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
9563 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
9564 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
9565 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
9566   call amdgpu_gfx void @external_void_func_i1_inreg(i1 inreg true)
9567   ret void
9570 define amdgpu_gfx void @test_call_external_void_func_i8_imm_inreg(i32) #0 {
9571 ; GFX9-LABEL: test_call_external_void_func_i8_imm_inreg:
9572 ; GFX9:       ; %bb.0:
9573 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9574 ; GFX9-NEXT:    s_mov_b32 s34, s33
9575 ; GFX9-NEXT:    s_mov_b32 s33, s32
9576 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9577 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9578 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9579 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 3
9580 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
9581 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 1
9582 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i8_inreg@abs32@hi
9583 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i8_inreg@abs32@lo
9584 ; GFX9-NEXT:    s_movk_i32 s4, 0x7b
9585 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
9586 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 2
9587 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9588 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 2
9589 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 1
9590 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
9591 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 3
9592 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9593 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9594 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9595 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
9596 ; GFX9-NEXT:    s_mov_b32 s33, s34
9597 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
9598 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9600 ; GFX10-LABEL: test_call_external_void_func_i8_imm_inreg:
9601 ; GFX10:       ; %bb.0:
9602 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9603 ; GFX10-NEXT:    s_mov_b32 s34, s33
9604 ; GFX10-NEXT:    s_mov_b32 s33, s32
9605 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9606 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9607 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9608 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9609 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 3
9610 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i8_inreg@abs32@hi
9611 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i8_inreg@abs32@lo
9612 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
9613 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
9614 ; GFX10-NEXT:    s_movk_i32 s4, 0x7b
9615 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 1
9616 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 2
9617 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9618 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 2
9619 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 1
9620 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
9621 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 3
9622 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9623 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9624 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9625 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9626 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
9627 ; GFX10-NEXT:    s_mov_b32 s33, s34
9628 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9629 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9631 ; GFX11-LABEL: test_call_external_void_func_i8_imm_inreg:
9632 ; GFX11:       ; %bb.0:
9633 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9634 ; GFX11-NEXT:    s_mov_b32 s0, s33
9635 ; GFX11-NEXT:    s_mov_b32 s33, s32
9636 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9637 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
9638 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9639 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 3
9640 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i8_inreg@abs32@hi
9641 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i8_inreg@abs32@lo
9642 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
9643 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
9644 ; GFX11-NEXT:    s_movk_i32 s4, 0x7b
9645 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 1
9646 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 2
9647 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9648 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9649 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 2
9650 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 1
9651 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
9652 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 3
9653 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9654 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
9655 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9656 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
9657 ; GFX11-NEXT:    s_mov_b32 s33, s0
9658 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9659 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9661 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i8_imm_inreg:
9662 ; GFX10-SCRATCH:       ; %bb.0:
9663 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9664 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
9665 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
9666 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9667 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
9668 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9669 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9670 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 3
9671 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i8_inreg@abs32@hi
9672 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i8_inreg@abs32@lo
9673 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
9674 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
9675 ; GFX10-SCRATCH-NEXT:    s_movk_i32 s4, 0x7b
9676 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 1
9677 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 2
9678 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9679 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 2
9680 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 1
9681 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
9682 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 3
9683 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9684 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
9685 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9686 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9687 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
9688 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
9689 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
9690 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
9691   call amdgpu_gfx void @external_void_func_i8_inreg(i8 inreg 123)
9692   ret void
9695 define amdgpu_gfx void @test_call_external_void_func_i16_imm_inreg() #0 {
9696 ; GFX9-LABEL: test_call_external_void_func_i16_imm_inreg:
9697 ; GFX9:       ; %bb.0:
9698 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9699 ; GFX9-NEXT:    s_mov_b32 s34, s33
9700 ; GFX9-NEXT:    s_mov_b32 s33, s32
9701 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9702 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9703 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9704 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 3
9705 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
9706 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 1
9707 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i16_inreg@abs32@hi
9708 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i16_inreg@abs32@lo
9709 ; GFX9-NEXT:    s_movk_i32 s4, 0x7b
9710 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
9711 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 2
9712 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9713 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 2
9714 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 1
9715 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
9716 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 3
9717 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9718 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9719 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9720 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
9721 ; GFX9-NEXT:    s_mov_b32 s33, s34
9722 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
9723 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9725 ; GFX10-LABEL: test_call_external_void_func_i16_imm_inreg:
9726 ; GFX10:       ; %bb.0:
9727 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9728 ; GFX10-NEXT:    s_mov_b32 s34, s33
9729 ; GFX10-NEXT:    s_mov_b32 s33, s32
9730 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9731 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9732 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9733 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9734 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 3
9735 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i16_inreg@abs32@hi
9736 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i16_inreg@abs32@lo
9737 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
9738 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
9739 ; GFX10-NEXT:    s_movk_i32 s4, 0x7b
9740 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 1
9741 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 2
9742 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9743 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 2
9744 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 1
9745 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
9746 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 3
9747 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9748 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9749 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9750 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9751 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
9752 ; GFX10-NEXT:    s_mov_b32 s33, s34
9753 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9754 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9756 ; GFX11-LABEL: test_call_external_void_func_i16_imm_inreg:
9757 ; GFX11:       ; %bb.0:
9758 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9759 ; GFX11-NEXT:    s_mov_b32 s0, s33
9760 ; GFX11-NEXT:    s_mov_b32 s33, s32
9761 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9762 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
9763 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9764 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 3
9765 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i16_inreg@abs32@hi
9766 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i16_inreg@abs32@lo
9767 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
9768 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
9769 ; GFX11-NEXT:    s_movk_i32 s4, 0x7b
9770 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 1
9771 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 2
9772 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9773 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9774 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 2
9775 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 1
9776 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
9777 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 3
9778 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9779 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
9780 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9781 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
9782 ; GFX11-NEXT:    s_mov_b32 s33, s0
9783 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9784 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9786 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i16_imm_inreg:
9787 ; GFX10-SCRATCH:       ; %bb.0:
9788 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9789 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
9790 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
9791 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9792 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
9793 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9794 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9795 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 3
9796 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i16_inreg@abs32@hi
9797 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i16_inreg@abs32@lo
9798 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
9799 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
9800 ; GFX10-SCRATCH-NEXT:    s_movk_i32 s4, 0x7b
9801 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 1
9802 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 2
9803 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9804 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 2
9805 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 1
9806 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
9807 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 3
9808 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9809 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
9810 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9811 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9812 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
9813 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
9814 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
9815 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
9816   call amdgpu_gfx void @external_void_func_i16_inreg(i16 inreg 123)
9817   ret void
9820 define amdgpu_gfx void @test_call_external_void_func_i32_imm_inreg(i32) #0 {
9821 ; GFX9-LABEL: test_call_external_void_func_i32_imm_inreg:
9822 ; GFX9:       ; %bb.0:
9823 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9824 ; GFX9-NEXT:    s_mov_b32 s34, s33
9825 ; GFX9-NEXT:    s_mov_b32 s33, s32
9826 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9827 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9828 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9829 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 3
9830 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
9831 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 1
9832 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i32_inreg@abs32@hi
9833 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i32_inreg@abs32@lo
9834 ; GFX9-NEXT:    s_mov_b32 s4, 42
9835 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
9836 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 2
9837 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9838 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 2
9839 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 1
9840 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
9841 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 3
9842 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9843 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9844 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9845 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
9846 ; GFX9-NEXT:    s_mov_b32 s33, s34
9847 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
9848 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9850 ; GFX10-LABEL: test_call_external_void_func_i32_imm_inreg:
9851 ; GFX10:       ; %bb.0:
9852 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9853 ; GFX10-NEXT:    s_mov_b32 s34, s33
9854 ; GFX10-NEXT:    s_mov_b32 s33, s32
9855 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9856 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9857 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9858 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9859 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 3
9860 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i32_inreg@abs32@hi
9861 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i32_inreg@abs32@lo
9862 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
9863 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
9864 ; GFX10-NEXT:    s_mov_b32 s4, 42
9865 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 1
9866 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 2
9867 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9868 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 2
9869 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 1
9870 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
9871 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 3
9872 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9873 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9874 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9875 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9876 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
9877 ; GFX10-NEXT:    s_mov_b32 s33, s34
9878 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9879 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9881 ; GFX11-LABEL: test_call_external_void_func_i32_imm_inreg:
9882 ; GFX11:       ; %bb.0:
9883 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9884 ; GFX11-NEXT:    s_mov_b32 s0, s33
9885 ; GFX11-NEXT:    s_mov_b32 s33, s32
9886 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9887 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
9888 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9889 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 3
9890 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i32_inreg@abs32@hi
9891 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i32_inreg@abs32@lo
9892 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
9893 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
9894 ; GFX11-NEXT:    s_mov_b32 s4, 42
9895 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 1
9896 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 2
9897 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9898 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9899 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 2
9900 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 1
9901 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
9902 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 3
9903 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
9904 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
9905 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
9906 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
9907 ; GFX11-NEXT:    s_mov_b32 s33, s0
9908 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9909 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9911 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i32_imm_inreg:
9912 ; GFX10-SCRATCH:       ; %bb.0:
9913 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9914 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
9915 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
9916 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9917 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
9918 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9919 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9920 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 3
9921 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i32_inreg@abs32@hi
9922 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i32_inreg@abs32@lo
9923 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
9924 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
9925 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 42
9926 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 1
9927 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 2
9928 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
9929 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 2
9930 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 1
9931 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
9932 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 3
9933 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
9934 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
9935 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
9936 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
9937 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
9938 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
9939 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
9940 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
9941   call amdgpu_gfx void @external_void_func_i32_inreg(i32 inreg 42)
9942   ret void
9945 define amdgpu_gfx void @test_call_external_void_func_i64_imm_inreg() #0 {
9946 ; GFX9-LABEL: test_call_external_void_func_i64_imm_inreg:
9947 ; GFX9:       ; %bb.0:
9948 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9949 ; GFX9-NEXT:    s_mov_b32 s34, s33
9950 ; GFX9-NEXT:    s_mov_b32 s33, s32
9951 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9952 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9953 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9954 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
9955 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
9956 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
9957 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
9958 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_i64_inreg@abs32@hi
9959 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_i64_inreg@abs32@lo
9960 ; GFX9-NEXT:    s_movk_i32 s4, 0x7b
9961 ; GFX9-NEXT:    s_mov_b32 s5, 0
9962 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
9963 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
9964 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9965 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
9966 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
9967 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
9968 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
9969 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
9970 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
9971 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
9972 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
9973 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
9974 ; GFX9-NEXT:    s_mov_b32 s33, s34
9975 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
9976 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9978 ; GFX10-LABEL: test_call_external_void_func_i64_imm_inreg:
9979 ; GFX10:       ; %bb.0:
9980 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9981 ; GFX10-NEXT:    s_mov_b32 s34, s33
9982 ; GFX10-NEXT:    s_mov_b32 s33, s32
9983 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
9984 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
9985 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9986 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
9987 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
9988 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_i64_inreg@abs32@hi
9989 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_i64_inreg@abs32@lo
9990 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
9991 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
9992 ; GFX10-NEXT:    s_movk_i32 s4, 0x7b
9993 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
9994 ; GFX10-NEXT:    s_mov_b32 s5, 0
9995 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
9996 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
9997 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
9998 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
9999 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
10000 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
10001 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
10002 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
10003 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10004 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10005 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10006 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10007 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
10008 ; GFX10-NEXT:    s_mov_b32 s33, s34
10009 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10010 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10012 ; GFX11-LABEL: test_call_external_void_func_i64_imm_inreg:
10013 ; GFX11:       ; %bb.0:
10014 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10015 ; GFX11-NEXT:    s_mov_b32 s0, s33
10016 ; GFX11-NEXT:    s_mov_b32 s33, s32
10017 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10018 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
10019 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10020 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
10021 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_i64_inreg@abs32@hi
10022 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_i64_inreg@abs32@lo
10023 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
10024 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
10025 ; GFX11-NEXT:    s_movk_i32 s4, 0x7b
10026 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
10027 ; GFX11-NEXT:    s_mov_b32 s5, 0
10028 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
10029 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
10030 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10031 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10032 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
10033 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
10034 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
10035 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
10036 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
10037 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10038 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
10039 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10040 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
10041 ; GFX11-NEXT:    s_mov_b32 s33, s0
10042 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10043 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10045 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_i64_imm_inreg:
10046 ; GFX10-SCRATCH:       ; %bb.0:
10047 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10048 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
10049 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
10050 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10051 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
10052 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10053 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10054 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
10055 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_i64_inreg@abs32@hi
10056 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_i64_inreg@abs32@lo
10057 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
10058 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
10059 ; GFX10-SCRATCH-NEXT:    s_movk_i32 s4, 0x7b
10060 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
10061 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 0
10062 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
10063 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
10064 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10065 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
10066 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
10067 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
10068 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
10069 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
10070 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10071 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
10072 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10073 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10074 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
10075 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
10076 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
10077 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
10078   call amdgpu_gfx void @external_void_func_i64_inreg(i64 inreg 123)
10079   ret void
10082 define amdgpu_gfx void @test_call_external_void_func_v2i64_inreg() #0 {
10083 ; GFX9-LABEL: test_call_external_void_func_v2i64_inreg:
10084 ; GFX9:       ; %bb.0:
10085 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10086 ; GFX9-NEXT:    s_mov_b32 s34, s33
10087 ; GFX9-NEXT:    s_mov_b32 s33, s32
10088 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10089 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10090 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10091 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 6
10092 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
10093 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
10094 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
10095 ; GFX9-NEXT:    s_mov_b64 s[34:35], 0
10096 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
10097 ; GFX9-NEXT:    s_load_dwordx4 s[4:7], s[34:35], 0x0
10098 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 4
10099 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i64_inreg@abs32@hi
10100 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i64_inreg@abs32@lo
10101 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
10102 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 5
10103 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10104 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 5
10105 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 4
10106 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
10107 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
10108 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
10109 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
10110 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 6
10111 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10112 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10113 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10114 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
10115 ; GFX9-NEXT:    s_mov_b32 s33, s34
10116 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
10117 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
10119 ; GFX10-LABEL: test_call_external_void_func_v2i64_inreg:
10120 ; GFX10:       ; %bb.0:
10121 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10122 ; GFX10-NEXT:    s_mov_b32 s34, s33
10123 ; GFX10-NEXT:    s_mov_b32 s33, s32
10124 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10125 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10126 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10127 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10128 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 6
10129 ; GFX10-NEXT:    s_mov_b64 s[34:35], 0
10130 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
10131 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
10132 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
10133 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
10134 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
10135 ; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[34:35], 0x0
10136 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i64_inreg@abs32@hi
10137 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i64_inreg@abs32@lo
10138 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 4
10139 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 5
10140 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10141 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 5
10142 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 4
10143 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
10144 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
10145 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
10146 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
10147 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 6
10148 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10149 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10150 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10151 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10152 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
10153 ; GFX10-NEXT:    s_mov_b32 s33, s34
10154 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10155 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10157 ; GFX11-LABEL: test_call_external_void_func_v2i64_inreg:
10158 ; GFX11:       ; %bb.0:
10159 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10160 ; GFX11-NEXT:    s_mov_b32 s0, s33
10161 ; GFX11-NEXT:    s_mov_b32 s33, s32
10162 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10163 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
10164 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10165 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 6
10166 ; GFX11-NEXT:    s_mov_b64 s[0:1], 0
10167 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
10168 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
10169 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
10170 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
10171 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
10172 ; GFX11-NEXT:    s_load_b128 s[4:7], s[0:1], 0x0
10173 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i64_inreg@abs32@hi
10174 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i64_inreg@abs32@lo
10175 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 4
10176 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 5
10177 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10178 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10179 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 5
10180 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 4
10181 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
10182 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
10183 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
10184 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
10185 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 6
10186 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10187 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
10188 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10189 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
10190 ; GFX11-NEXT:    s_mov_b32 s33, s0
10191 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10192 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10194 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i64_inreg:
10195 ; GFX10-SCRATCH:       ; %bb.0:
10196 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10197 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
10198 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
10199 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10200 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
10201 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10202 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10203 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 6
10204 ; GFX10-SCRATCH-NEXT:    s_mov_b64 s[0:1], 0
10205 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
10206 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
10207 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
10208 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
10209 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
10210 ; GFX10-SCRATCH-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x0
10211 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i64_inreg@abs32@hi
10212 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i64_inreg@abs32@lo
10213 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 4
10214 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 5
10215 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10216 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 5
10217 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 4
10218 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
10219 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
10220 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
10221 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
10222 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 6
10223 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10224 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
10225 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10226 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10227 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
10228 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
10229 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
10230 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
10231   %val = load <2 x i64>, ptr addrspace(4) null
10232   call amdgpu_gfx void @external_void_func_v2i64_inreg(<2 x i64> inreg %val)
10233   ret void
10236 define amdgpu_gfx void @test_call_external_void_func_v2i64_imm_inreg() #0 {
10237 ; GFX9-LABEL: test_call_external_void_func_v2i64_imm_inreg:
10238 ; GFX9:       ; %bb.0:
10239 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10240 ; GFX9-NEXT:    s_mov_b32 s34, s33
10241 ; GFX9-NEXT:    s_mov_b32 s33, s32
10242 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10243 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10244 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10245 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 6
10246 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
10247 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
10248 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
10249 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
10250 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 4
10251 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i64_inreg@abs32@hi
10252 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i64_inreg@abs32@lo
10253 ; GFX9-NEXT:    s_mov_b32 s4, 1
10254 ; GFX9-NEXT:    s_mov_b32 s5, 2
10255 ; GFX9-NEXT:    s_mov_b32 s6, 3
10256 ; GFX9-NEXT:    s_mov_b32 s7, 4
10257 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
10258 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 5
10259 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10260 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 5
10261 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 4
10262 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
10263 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
10264 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
10265 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
10266 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 6
10267 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10268 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10269 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10270 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
10271 ; GFX9-NEXT:    s_mov_b32 s33, s34
10272 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
10273 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
10275 ; GFX10-LABEL: test_call_external_void_func_v2i64_imm_inreg:
10276 ; GFX10:       ; %bb.0:
10277 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10278 ; GFX10-NEXT:    s_mov_b32 s34, s33
10279 ; GFX10-NEXT:    s_mov_b32 s33, s32
10280 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10281 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10282 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10283 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10284 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 6
10285 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i64_inreg@abs32@hi
10286 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i64_inreg@abs32@lo
10287 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
10288 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
10289 ; GFX10-NEXT:    s_mov_b32 s4, 1
10290 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
10291 ; GFX10-NEXT:    s_mov_b32 s5, 2
10292 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
10293 ; GFX10-NEXT:    s_mov_b32 s6, 3
10294 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
10295 ; GFX10-NEXT:    s_mov_b32 s7, 4
10296 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 4
10297 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 5
10298 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10299 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 5
10300 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 4
10301 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
10302 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
10303 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
10304 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
10305 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 6
10306 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10307 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10308 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10309 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10310 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
10311 ; GFX10-NEXT:    s_mov_b32 s33, s34
10312 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10313 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10315 ; GFX11-LABEL: test_call_external_void_func_v2i64_imm_inreg:
10316 ; GFX11:       ; %bb.0:
10317 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10318 ; GFX11-NEXT:    s_mov_b32 s0, s33
10319 ; GFX11-NEXT:    s_mov_b32 s33, s32
10320 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10321 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
10322 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10323 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 6
10324 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i64_inreg@abs32@hi
10325 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i64_inreg@abs32@lo
10326 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
10327 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
10328 ; GFX11-NEXT:    s_mov_b32 s4, 1
10329 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
10330 ; GFX11-NEXT:    s_mov_b32 s5, 2
10331 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
10332 ; GFX11-NEXT:    s_mov_b32 s6, 3
10333 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
10334 ; GFX11-NEXT:    s_mov_b32 s7, 4
10335 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 4
10336 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 5
10337 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10338 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10339 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 5
10340 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 4
10341 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
10342 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
10343 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
10344 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
10345 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 6
10346 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10347 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
10348 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10349 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
10350 ; GFX11-NEXT:    s_mov_b32 s33, s0
10351 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10352 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10354 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i64_imm_inreg:
10355 ; GFX10-SCRATCH:       ; %bb.0:
10356 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10357 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
10358 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
10359 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10360 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
10361 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10362 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10363 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 6
10364 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i64_inreg@abs32@hi
10365 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i64_inreg@abs32@lo
10366 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
10367 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
10368 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 1
10369 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
10370 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2
10371 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
10372 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 3
10373 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
10374 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s7, 4
10375 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 4
10376 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 5
10377 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10378 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 5
10379 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 4
10380 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
10381 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
10382 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
10383 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
10384 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 6
10385 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10386 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
10387 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10388 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10389 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
10390 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
10391 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
10392 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
10393   call amdgpu_gfx void @external_void_func_v2i64_inreg(<2 x i64> inreg <i64 8589934593, i64 17179869187>)
10394   ret void
10397 define amdgpu_gfx void @test_call_external_void_func_v3i64_inreg() #0 {
10398 ; GFX9-LABEL: test_call_external_void_func_v3i64_inreg:
10399 ; GFX9:       ; %bb.0:
10400 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10401 ; GFX9-NEXT:    s_mov_b32 s34, s33
10402 ; GFX9-NEXT:    s_mov_b32 s33, s32
10403 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10404 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10405 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10406 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 8
10407 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
10408 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
10409 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
10410 ; GFX9-NEXT:    s_mov_b64 s[34:35], 0
10411 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
10412 ; GFX9-NEXT:    s_load_dwordx4 s[4:7], s[34:35], 0x0
10413 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
10414 ; GFX9-NEXT:    v_writelane_b32 v40, s9, 5
10415 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 6
10416 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i64_inreg@abs32@hi
10417 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i64_inreg@abs32@lo
10418 ; GFX9-NEXT:    s_mov_b32 s8, 1
10419 ; GFX9-NEXT:    s_mov_b32 s9, 2
10420 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
10421 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 7
10422 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10423 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 7
10424 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 6
10425 ; GFX9-NEXT:    v_readlane_b32 s9, v40, 5
10426 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
10427 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
10428 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
10429 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
10430 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
10431 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 8
10432 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10433 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10434 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10435 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
10436 ; GFX9-NEXT:    s_mov_b32 s33, s34
10437 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
10438 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
10440 ; GFX10-LABEL: test_call_external_void_func_v3i64_inreg:
10441 ; GFX10:       ; %bb.0:
10442 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10443 ; GFX10-NEXT:    s_mov_b32 s34, s33
10444 ; GFX10-NEXT:    s_mov_b32 s33, s32
10445 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10446 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10447 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10448 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10449 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 8
10450 ; GFX10-NEXT:    s_mov_b64 s[34:35], 0
10451 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
10452 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
10453 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
10454 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
10455 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
10456 ; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[34:35], 0x0
10457 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i64_inreg@abs32@hi
10458 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i64_inreg@abs32@lo
10459 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
10460 ; GFX10-NEXT:    s_mov_b32 s8, 1
10461 ; GFX10-NEXT:    v_writelane_b32 v40, s9, 5
10462 ; GFX10-NEXT:    s_mov_b32 s9, 2
10463 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 6
10464 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 7
10465 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10466 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 7
10467 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 6
10468 ; GFX10-NEXT:    v_readlane_b32 s9, v40, 5
10469 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
10470 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
10471 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
10472 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
10473 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
10474 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 8
10475 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10476 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10477 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10478 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10479 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
10480 ; GFX10-NEXT:    s_mov_b32 s33, s34
10481 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10482 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10484 ; GFX11-LABEL: test_call_external_void_func_v3i64_inreg:
10485 ; GFX11:       ; %bb.0:
10486 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10487 ; GFX11-NEXT:    s_mov_b32 s0, s33
10488 ; GFX11-NEXT:    s_mov_b32 s33, s32
10489 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10490 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
10491 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10492 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 8
10493 ; GFX11-NEXT:    s_mov_b64 s[0:1], 0
10494 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
10495 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
10496 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
10497 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
10498 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
10499 ; GFX11-NEXT:    s_load_b128 s[4:7], s[0:1], 0x0
10500 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i64_inreg@abs32@hi
10501 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i64_inreg@abs32@lo
10502 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
10503 ; GFX11-NEXT:    s_mov_b32 s8, 1
10504 ; GFX11-NEXT:    v_writelane_b32 v40, s9, 5
10505 ; GFX11-NEXT:    s_mov_b32 s9, 2
10506 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 6
10507 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 7
10508 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10509 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10510 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 7
10511 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 6
10512 ; GFX11-NEXT:    v_readlane_b32 s9, v40, 5
10513 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
10514 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
10515 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
10516 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
10517 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
10518 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 8
10519 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10520 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
10521 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10522 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
10523 ; GFX11-NEXT:    s_mov_b32 s33, s0
10524 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10525 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10527 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i64_inreg:
10528 ; GFX10-SCRATCH:       ; %bb.0:
10529 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10530 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
10531 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
10532 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10533 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
10534 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10535 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10536 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 8
10537 ; GFX10-SCRATCH-NEXT:    s_mov_b64 s[0:1], 0
10538 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
10539 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
10540 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
10541 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
10542 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
10543 ; GFX10-SCRATCH-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x0
10544 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i64_inreg@abs32@hi
10545 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i64_inreg@abs32@lo
10546 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
10547 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s8, 1
10548 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s9, 5
10549 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s9, 2
10550 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 6
10551 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 7
10552 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10553 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 7
10554 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 6
10555 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s9, v40, 5
10556 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
10557 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
10558 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
10559 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
10560 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
10561 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 8
10562 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10563 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
10564 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10565 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10566 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
10567 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
10568 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
10569 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
10570   %load = load <2 x i64>, ptr addrspace(4) null
10571   %val = shufflevector <2 x i64> %load, <2 x i64> <i64 8589934593, i64 undef>, <3 x i32> <i32 0, i32 1, i32 2>
10573   call amdgpu_gfx void @external_void_func_v3i64_inreg(<3 x i64> inreg %val)
10574   ret void
10577 define amdgpu_gfx void @test_call_external_void_func_v4i64_inreg() #0 {
10578 ; GFX9-LABEL: test_call_external_void_func_v4i64_inreg:
10579 ; GFX9:       ; %bb.0:
10580 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10581 ; GFX9-NEXT:    s_mov_b32 s34, s33
10582 ; GFX9-NEXT:    s_mov_b32 s33, s32
10583 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10584 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10585 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10586 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 10
10587 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
10588 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
10589 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
10590 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
10591 ; GFX9-NEXT:    s_mov_b64 s[34:35], 0
10592 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
10593 ; GFX9-NEXT:    s_load_dwordx4 s[4:7], s[34:35], 0x0
10594 ; GFX9-NEXT:    v_writelane_b32 v40, s9, 5
10595 ; GFX9-NEXT:    v_writelane_b32 v40, s10, 6
10596 ; GFX9-NEXT:    v_writelane_b32 v40, s11, 7
10597 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 8
10598 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i64_inreg@abs32@hi
10599 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i64_inreg@abs32@lo
10600 ; GFX9-NEXT:    s_mov_b32 s8, 1
10601 ; GFX9-NEXT:    s_mov_b32 s9, 2
10602 ; GFX9-NEXT:    s_mov_b32 s10, 3
10603 ; GFX9-NEXT:    s_mov_b32 s11, 4
10604 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
10605 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 9
10606 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10607 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 9
10608 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 8
10609 ; GFX9-NEXT:    v_readlane_b32 s11, v40, 7
10610 ; GFX9-NEXT:    v_readlane_b32 s10, v40, 6
10611 ; GFX9-NEXT:    v_readlane_b32 s9, v40, 5
10612 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
10613 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
10614 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
10615 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
10616 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
10617 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 10
10618 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10619 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10620 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10621 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
10622 ; GFX9-NEXT:    s_mov_b32 s33, s34
10623 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
10624 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
10626 ; GFX10-LABEL: test_call_external_void_func_v4i64_inreg:
10627 ; GFX10:       ; %bb.0:
10628 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10629 ; GFX10-NEXT:    s_mov_b32 s34, s33
10630 ; GFX10-NEXT:    s_mov_b32 s33, s32
10631 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10632 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10633 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10634 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10635 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 10
10636 ; GFX10-NEXT:    s_mov_b64 s[34:35], 0
10637 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
10638 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
10639 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
10640 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
10641 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
10642 ; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[34:35], 0x0
10643 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i64_inreg@abs32@hi
10644 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i64_inreg@abs32@lo
10645 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
10646 ; GFX10-NEXT:    s_mov_b32 s8, 1
10647 ; GFX10-NEXT:    v_writelane_b32 v40, s9, 5
10648 ; GFX10-NEXT:    s_mov_b32 s9, 2
10649 ; GFX10-NEXT:    v_writelane_b32 v40, s10, 6
10650 ; GFX10-NEXT:    s_mov_b32 s10, 3
10651 ; GFX10-NEXT:    v_writelane_b32 v40, s11, 7
10652 ; GFX10-NEXT:    s_mov_b32 s11, 4
10653 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 8
10654 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 9
10655 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10656 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 9
10657 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 8
10658 ; GFX10-NEXT:    v_readlane_b32 s11, v40, 7
10659 ; GFX10-NEXT:    v_readlane_b32 s10, v40, 6
10660 ; GFX10-NEXT:    v_readlane_b32 s9, v40, 5
10661 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
10662 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
10663 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
10664 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
10665 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
10666 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 10
10667 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10668 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10669 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10670 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10671 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
10672 ; GFX10-NEXT:    s_mov_b32 s33, s34
10673 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10674 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10676 ; GFX11-LABEL: test_call_external_void_func_v4i64_inreg:
10677 ; GFX11:       ; %bb.0:
10678 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10679 ; GFX11-NEXT:    s_mov_b32 s0, s33
10680 ; GFX11-NEXT:    s_mov_b32 s33, s32
10681 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10682 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
10683 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10684 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 10
10685 ; GFX11-NEXT:    s_mov_b64 s[0:1], 0
10686 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
10687 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
10688 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
10689 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
10690 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
10691 ; GFX11-NEXT:    s_load_b128 s[4:7], s[0:1], 0x0
10692 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i64_inreg@abs32@hi
10693 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i64_inreg@abs32@lo
10694 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
10695 ; GFX11-NEXT:    s_mov_b32 s8, 1
10696 ; GFX11-NEXT:    v_writelane_b32 v40, s9, 5
10697 ; GFX11-NEXT:    s_mov_b32 s9, 2
10698 ; GFX11-NEXT:    v_writelane_b32 v40, s10, 6
10699 ; GFX11-NEXT:    s_mov_b32 s10, 3
10700 ; GFX11-NEXT:    v_writelane_b32 v40, s11, 7
10701 ; GFX11-NEXT:    s_mov_b32 s11, 4
10702 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 8
10703 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 9
10704 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10705 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10706 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 9
10707 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 8
10708 ; GFX11-NEXT:    v_readlane_b32 s11, v40, 7
10709 ; GFX11-NEXT:    v_readlane_b32 s10, v40, 6
10710 ; GFX11-NEXT:    v_readlane_b32 s9, v40, 5
10711 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
10712 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
10713 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
10714 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
10715 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
10716 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 10
10717 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10718 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
10719 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10720 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
10721 ; GFX11-NEXT:    s_mov_b32 s33, s0
10722 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10723 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10725 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i64_inreg:
10726 ; GFX10-SCRATCH:       ; %bb.0:
10727 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10728 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
10729 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
10730 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10731 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
10732 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10733 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10734 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 10
10735 ; GFX10-SCRATCH-NEXT:    s_mov_b64 s[0:1], 0
10736 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
10737 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
10738 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
10739 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
10740 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
10741 ; GFX10-SCRATCH-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x0
10742 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i64_inreg@abs32@hi
10743 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i64_inreg@abs32@lo
10744 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
10745 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s8, 1
10746 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s9, 5
10747 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s9, 2
10748 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s10, 6
10749 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s10, 3
10750 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s11, 7
10751 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s11, 4
10752 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 8
10753 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 9
10754 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10755 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 9
10756 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 8
10757 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s11, v40, 7
10758 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s10, v40, 6
10759 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s9, v40, 5
10760 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
10761 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
10762 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
10763 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
10764 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
10765 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 10
10766 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10767 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
10768 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10769 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10770 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
10771 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
10772 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
10773 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
10774   %load = load <2 x i64>, ptr addrspace(4) null
10775   %val = shufflevector <2 x i64> %load, <2 x i64> <i64 8589934593, i64 17179869187>, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
10776   call amdgpu_gfx void @external_void_func_v4i64_inreg(<4 x i64> inreg %val)
10777   ret void
10780 define amdgpu_gfx void @test_call_external_void_func_f16_imm_inreg() #0 {
10781 ; GFX9-LABEL: test_call_external_void_func_f16_imm_inreg:
10782 ; GFX9:       ; %bb.0:
10783 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10784 ; GFX9-NEXT:    s_mov_b32 s34, s33
10785 ; GFX9-NEXT:    s_mov_b32 s33, s32
10786 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10787 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10788 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10789 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 3
10790 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
10791 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 1
10792 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_f16_inreg@abs32@hi
10793 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_f16_inreg@abs32@lo
10794 ; GFX9-NEXT:    s_movk_i32 s4, 0x4400
10795 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
10796 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 2
10797 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10798 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 2
10799 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 1
10800 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
10801 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 3
10802 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10803 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10804 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10805 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
10806 ; GFX9-NEXT:    s_mov_b32 s33, s34
10807 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
10808 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
10810 ; GFX10-LABEL: test_call_external_void_func_f16_imm_inreg:
10811 ; GFX10:       ; %bb.0:
10812 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10813 ; GFX10-NEXT:    s_mov_b32 s34, s33
10814 ; GFX10-NEXT:    s_mov_b32 s33, s32
10815 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10816 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10817 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10818 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10819 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 3
10820 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_f16_inreg@abs32@hi
10821 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_f16_inreg@abs32@lo
10822 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
10823 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
10824 ; GFX10-NEXT:    s_movk_i32 s4, 0x4400
10825 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 1
10826 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 2
10827 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10828 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 2
10829 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 1
10830 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
10831 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 3
10832 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10833 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10834 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10835 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10836 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
10837 ; GFX10-NEXT:    s_mov_b32 s33, s34
10838 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10839 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10841 ; GFX11-LABEL: test_call_external_void_func_f16_imm_inreg:
10842 ; GFX11:       ; %bb.0:
10843 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10844 ; GFX11-NEXT:    s_mov_b32 s0, s33
10845 ; GFX11-NEXT:    s_mov_b32 s33, s32
10846 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10847 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
10848 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10849 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 3
10850 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_f16_inreg@abs32@hi
10851 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_f16_inreg@abs32@lo
10852 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
10853 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
10854 ; GFX11-NEXT:    s_movk_i32 s4, 0x4400
10855 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 1
10856 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 2
10857 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10858 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10859 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 2
10860 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 1
10861 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
10862 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 3
10863 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10864 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
10865 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10866 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
10867 ; GFX11-NEXT:    s_mov_b32 s33, s0
10868 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10869 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10871 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_f16_imm_inreg:
10872 ; GFX10-SCRATCH:       ; %bb.0:
10873 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10874 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
10875 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
10876 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10877 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
10878 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10879 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10880 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 3
10881 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_f16_inreg@abs32@hi
10882 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_f16_inreg@abs32@lo
10883 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
10884 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
10885 ; GFX10-SCRATCH-NEXT:    s_movk_i32 s4, 0x4400
10886 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 1
10887 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 2
10888 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10889 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 2
10890 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 1
10891 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
10892 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 3
10893 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
10894 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
10895 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
10896 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
10897 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
10898 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
10899 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
10900 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
10901   call amdgpu_gfx void @external_void_func_f16_inreg(half inreg 4.0)
10902   ret void
10905 define amdgpu_gfx void @test_call_external_void_func_f32_imm_inreg() #0 {
10906 ; GFX9-LABEL: test_call_external_void_func_f32_imm_inreg:
10907 ; GFX9:       ; %bb.0:
10908 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10909 ; GFX9-NEXT:    s_mov_b32 s34, s33
10910 ; GFX9-NEXT:    s_mov_b32 s33, s32
10911 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10912 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10913 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10914 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 3
10915 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
10916 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 1
10917 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_f32_inreg@abs32@hi
10918 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_f32_inreg@abs32@lo
10919 ; GFX9-NEXT:    s_mov_b32 s4, 4.0
10920 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
10921 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 2
10922 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10923 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 2
10924 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 1
10925 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
10926 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 3
10927 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
10928 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10929 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
10930 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
10931 ; GFX9-NEXT:    s_mov_b32 s33, s34
10932 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
10933 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
10935 ; GFX10-LABEL: test_call_external_void_func_f32_imm_inreg:
10936 ; GFX10:       ; %bb.0:
10937 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10938 ; GFX10-NEXT:    s_mov_b32 s34, s33
10939 ; GFX10-NEXT:    s_mov_b32 s33, s32
10940 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10941 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
10942 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10943 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10944 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 3
10945 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_f32_inreg@abs32@hi
10946 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_f32_inreg@abs32@lo
10947 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
10948 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
10949 ; GFX10-NEXT:    s_mov_b32 s4, 4.0
10950 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 1
10951 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 2
10952 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
10953 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 2
10954 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 1
10955 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
10956 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 3
10957 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
10958 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
10959 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
10960 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
10961 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
10962 ; GFX10-NEXT:    s_mov_b32 s33, s34
10963 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10964 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10966 ; GFX11-LABEL: test_call_external_void_func_f32_imm_inreg:
10967 ; GFX11:       ; %bb.0:
10968 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10969 ; GFX11-NEXT:    s_mov_b32 s0, s33
10970 ; GFX11-NEXT:    s_mov_b32 s33, s32
10971 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10972 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
10973 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10974 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 3
10975 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_f32_inreg@abs32@hi
10976 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_f32_inreg@abs32@lo
10977 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
10978 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
10979 ; GFX11-NEXT:    s_mov_b32 s4, 4.0
10980 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 1
10981 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 2
10982 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
10983 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10984 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 2
10985 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 1
10986 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
10987 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 3
10988 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
10989 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
10990 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
10991 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
10992 ; GFX11-NEXT:    s_mov_b32 s33, s0
10993 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10994 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10996 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_f32_imm_inreg:
10997 ; GFX10-SCRATCH:       ; %bb.0:
10998 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10999 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
11000 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
11001 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11002 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
11003 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11004 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11005 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 3
11006 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_f32_inreg@abs32@hi
11007 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_f32_inreg@abs32@lo
11008 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
11009 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
11010 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 4.0
11011 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 1
11012 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 2
11013 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11014 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 2
11015 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 1
11016 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
11017 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 3
11018 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11019 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
11020 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11021 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11022 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
11023 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
11024 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
11025 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
11026   call amdgpu_gfx void @external_void_func_f32_inreg(float inreg 4.0)
11027   ret void
11030 define amdgpu_gfx void @test_call_external_void_func_v2f32_imm_inreg() #0 {
11031 ; GFX9-LABEL: test_call_external_void_func_v2f32_imm_inreg:
11032 ; GFX9:       ; %bb.0:
11033 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11034 ; GFX9-NEXT:    s_mov_b32 s34, s33
11035 ; GFX9-NEXT:    s_mov_b32 s33, s32
11036 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11037 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11038 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11039 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
11040 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
11041 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
11042 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
11043 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2f32_inreg@abs32@hi
11044 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2f32_inreg@abs32@lo
11045 ; GFX9-NEXT:    s_mov_b32 s4, 1.0
11046 ; GFX9-NEXT:    s_mov_b32 s5, 2.0
11047 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
11048 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
11049 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11050 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
11051 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
11052 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
11053 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
11054 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
11055 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11056 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11057 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11058 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
11059 ; GFX9-NEXT:    s_mov_b32 s33, s34
11060 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
11061 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
11063 ; GFX10-LABEL: test_call_external_void_func_v2f32_imm_inreg:
11064 ; GFX10:       ; %bb.0:
11065 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11066 ; GFX10-NEXT:    s_mov_b32 s34, s33
11067 ; GFX10-NEXT:    s_mov_b32 s33, s32
11068 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11069 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11070 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11071 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11072 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
11073 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2f32_inreg@abs32@hi
11074 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2f32_inreg@abs32@lo
11075 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
11076 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
11077 ; GFX10-NEXT:    s_mov_b32 s4, 1.0
11078 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
11079 ; GFX10-NEXT:    s_mov_b32 s5, 2.0
11080 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
11081 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
11082 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11083 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
11084 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
11085 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
11086 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
11087 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
11088 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11089 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11090 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11091 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11092 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
11093 ; GFX10-NEXT:    s_mov_b32 s33, s34
11094 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11095 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
11097 ; GFX11-LABEL: test_call_external_void_func_v2f32_imm_inreg:
11098 ; GFX11:       ; %bb.0:
11099 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11100 ; GFX11-NEXT:    s_mov_b32 s0, s33
11101 ; GFX11-NEXT:    s_mov_b32 s33, s32
11102 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11103 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
11104 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11105 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
11106 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2f32_inreg@abs32@hi
11107 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2f32_inreg@abs32@lo
11108 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
11109 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
11110 ; GFX11-NEXT:    s_mov_b32 s4, 1.0
11111 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
11112 ; GFX11-NEXT:    s_mov_b32 s5, 2.0
11113 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
11114 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
11115 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11116 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
11117 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
11118 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
11119 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
11120 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
11121 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
11122 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11123 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
11124 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11125 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
11126 ; GFX11-NEXT:    s_mov_b32 s33, s0
11127 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11128 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
11130 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2f32_imm_inreg:
11131 ; GFX10-SCRATCH:       ; %bb.0:
11132 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11133 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
11134 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
11135 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11136 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
11137 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11138 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11139 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
11140 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2f32_inreg@abs32@hi
11141 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2f32_inreg@abs32@lo
11142 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
11143 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
11144 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 1.0
11145 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
11146 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2.0
11147 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
11148 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
11149 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11150 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
11151 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
11152 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
11153 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
11154 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
11155 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11156 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
11157 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11158 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11159 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
11160 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
11161 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
11162 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
11163   call amdgpu_gfx void @external_void_func_v2f32_inreg(<2 x float> inreg <float 1.0, float 2.0>)
11164   ret void
11167 define amdgpu_gfx void @test_call_external_void_func_v3f32_imm_inreg() #0 {
11168 ; GFX9-LABEL: test_call_external_void_func_v3f32_imm_inreg:
11169 ; GFX9:       ; %bb.0:
11170 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11171 ; GFX9-NEXT:    s_mov_b32 s34, s33
11172 ; GFX9-NEXT:    s_mov_b32 s33, s32
11173 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11174 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11175 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11176 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 5
11177 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
11178 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
11179 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
11180 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 3
11181 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3f32_inreg@abs32@hi
11182 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3f32_inreg@abs32@lo
11183 ; GFX9-NEXT:    s_mov_b32 s4, 1.0
11184 ; GFX9-NEXT:    s_mov_b32 s5, 2.0
11185 ; GFX9-NEXT:    s_mov_b32 s6, 4.0
11186 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
11187 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 4
11188 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11189 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 4
11190 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 3
11191 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
11192 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
11193 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
11194 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 5
11195 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11196 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11197 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11198 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
11199 ; GFX9-NEXT:    s_mov_b32 s33, s34
11200 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
11201 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
11203 ; GFX10-LABEL: test_call_external_void_func_v3f32_imm_inreg:
11204 ; GFX10:       ; %bb.0:
11205 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11206 ; GFX10-NEXT:    s_mov_b32 s34, s33
11207 ; GFX10-NEXT:    s_mov_b32 s33, s32
11208 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11209 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11210 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11211 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11212 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 5
11213 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3f32_inreg@abs32@hi
11214 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3f32_inreg@abs32@lo
11215 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
11216 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
11217 ; GFX10-NEXT:    s_mov_b32 s4, 1.0
11218 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
11219 ; GFX10-NEXT:    s_mov_b32 s5, 2.0
11220 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
11221 ; GFX10-NEXT:    s_mov_b32 s6, 4.0
11222 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 3
11223 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 4
11224 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11225 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 4
11226 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 3
11227 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
11228 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
11229 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
11230 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 5
11231 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11232 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11233 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11234 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11235 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
11236 ; GFX10-NEXT:    s_mov_b32 s33, s34
11237 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11238 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
11240 ; GFX11-LABEL: test_call_external_void_func_v3f32_imm_inreg:
11241 ; GFX11:       ; %bb.0:
11242 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11243 ; GFX11-NEXT:    s_mov_b32 s0, s33
11244 ; GFX11-NEXT:    s_mov_b32 s33, s32
11245 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11246 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
11247 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11248 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 5
11249 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3f32_inreg@abs32@hi
11250 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3f32_inreg@abs32@lo
11251 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
11252 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
11253 ; GFX11-NEXT:    s_mov_b32 s4, 1.0
11254 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
11255 ; GFX11-NEXT:    s_mov_b32 s5, 2.0
11256 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
11257 ; GFX11-NEXT:    s_mov_b32 s6, 4.0
11258 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 3
11259 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 4
11260 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11261 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
11262 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 4
11263 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 3
11264 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
11265 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
11266 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
11267 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 5
11268 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11269 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
11270 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11271 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
11272 ; GFX11-NEXT:    s_mov_b32 s33, s0
11273 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11274 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
11276 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3f32_imm_inreg:
11277 ; GFX10-SCRATCH:       ; %bb.0:
11278 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11279 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
11280 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
11281 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11282 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
11283 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11284 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11285 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 5
11286 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3f32_inreg@abs32@hi
11287 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3f32_inreg@abs32@lo
11288 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
11289 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
11290 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 1.0
11291 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
11292 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2.0
11293 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
11294 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 4.0
11295 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 3
11296 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 4
11297 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11298 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 4
11299 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 3
11300 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
11301 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
11302 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
11303 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 5
11304 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11305 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
11306 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11307 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11308 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
11309 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
11310 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
11311 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
11312   call amdgpu_gfx void @external_void_func_v3f32_inreg(<3 x float> inreg <float 1.0, float 2.0, float 4.0>)
11313   ret void
11316 define amdgpu_gfx void @test_call_external_void_func_v5f32_imm_inreg() #0 {
11317 ; GFX9-LABEL: test_call_external_void_func_v5f32_imm_inreg:
11318 ; GFX9:       ; %bb.0:
11319 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11320 ; GFX9-NEXT:    s_mov_b32 s34, s33
11321 ; GFX9-NEXT:    s_mov_b32 s33, s32
11322 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11323 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11324 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11325 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 7
11326 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
11327 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
11328 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
11329 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
11330 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
11331 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 5
11332 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v5f32_inreg@abs32@hi
11333 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v5f32_inreg@abs32@lo
11334 ; GFX9-NEXT:    s_mov_b32 s4, 1.0
11335 ; GFX9-NEXT:    s_mov_b32 s5, 2.0
11336 ; GFX9-NEXT:    s_mov_b32 s6, 4.0
11337 ; GFX9-NEXT:    s_mov_b32 s7, -1.0
11338 ; GFX9-NEXT:    s_mov_b32 s8, 0.5
11339 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
11340 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 6
11341 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11342 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 6
11343 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 5
11344 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
11345 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
11346 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
11347 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
11348 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
11349 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 7
11350 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11351 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11352 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11353 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
11354 ; GFX9-NEXT:    s_mov_b32 s33, s34
11355 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
11356 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
11358 ; GFX10-LABEL: test_call_external_void_func_v5f32_imm_inreg:
11359 ; GFX10:       ; %bb.0:
11360 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11361 ; GFX10-NEXT:    s_mov_b32 s34, s33
11362 ; GFX10-NEXT:    s_mov_b32 s33, s32
11363 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11364 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11365 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11366 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11367 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 7
11368 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v5f32_inreg@abs32@hi
11369 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v5f32_inreg@abs32@lo
11370 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
11371 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
11372 ; GFX10-NEXT:    s_mov_b32 s4, 1.0
11373 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
11374 ; GFX10-NEXT:    s_mov_b32 s5, 2.0
11375 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
11376 ; GFX10-NEXT:    s_mov_b32 s6, 4.0
11377 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
11378 ; GFX10-NEXT:    s_mov_b32 s7, -1.0
11379 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
11380 ; GFX10-NEXT:    s_mov_b32 s8, 0.5
11381 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 5
11382 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 6
11383 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11384 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 6
11385 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 5
11386 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
11387 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
11388 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
11389 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
11390 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
11391 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 7
11392 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11393 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11394 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11395 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11396 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
11397 ; GFX10-NEXT:    s_mov_b32 s33, s34
11398 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11399 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
11401 ; GFX11-LABEL: test_call_external_void_func_v5f32_imm_inreg:
11402 ; GFX11:       ; %bb.0:
11403 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11404 ; GFX11-NEXT:    s_mov_b32 s0, s33
11405 ; GFX11-NEXT:    s_mov_b32 s33, s32
11406 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11407 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
11408 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11409 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 7
11410 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v5f32_inreg@abs32@hi
11411 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v5f32_inreg@abs32@lo
11412 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
11413 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
11414 ; GFX11-NEXT:    s_mov_b32 s4, 1.0
11415 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
11416 ; GFX11-NEXT:    s_mov_b32 s5, 2.0
11417 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
11418 ; GFX11-NEXT:    s_mov_b32 s6, 4.0
11419 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
11420 ; GFX11-NEXT:    s_mov_b32 s7, -1.0
11421 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
11422 ; GFX11-NEXT:    s_mov_b32 s8, 0.5
11423 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 5
11424 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 6
11425 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11426 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
11427 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 6
11428 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 5
11429 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
11430 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
11431 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
11432 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
11433 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
11434 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 7
11435 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11436 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
11437 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11438 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
11439 ; GFX11-NEXT:    s_mov_b32 s33, s0
11440 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11441 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
11443 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v5f32_imm_inreg:
11444 ; GFX10-SCRATCH:       ; %bb.0:
11445 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11446 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
11447 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
11448 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11449 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
11450 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11451 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11452 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 7
11453 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v5f32_inreg@abs32@hi
11454 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v5f32_inreg@abs32@lo
11455 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
11456 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
11457 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 1.0
11458 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
11459 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2.0
11460 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
11461 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 4.0
11462 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
11463 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s7, -1.0
11464 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
11465 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s8, 0.5
11466 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 5
11467 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 6
11468 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11469 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 6
11470 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 5
11471 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
11472 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
11473 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
11474 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
11475 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
11476 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 7
11477 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11478 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
11479 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11480 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11481 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
11482 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
11483 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
11484 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
11485   call amdgpu_gfx void @external_void_func_v5f32_inreg(<5 x float> inreg <float 1.0, float 2.0, float 4.0, float -1.0, float 0.5>)
11486   ret void
11489 define amdgpu_gfx void @test_call_external_void_func_f64_imm_inreg() #0 {
11490 ; GFX9-LABEL: test_call_external_void_func_f64_imm_inreg:
11491 ; GFX9:       ; %bb.0:
11492 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11493 ; GFX9-NEXT:    s_mov_b32 s34, s33
11494 ; GFX9-NEXT:    s_mov_b32 s33, s32
11495 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11496 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11497 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11498 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
11499 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
11500 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
11501 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
11502 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_f64_inreg@abs32@hi
11503 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_f64_inreg@abs32@lo
11504 ; GFX9-NEXT:    s_mov_b32 s4, 0
11505 ; GFX9-NEXT:    s_mov_b32 s5, 0x40100000
11506 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
11507 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
11508 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11509 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
11510 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
11511 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
11512 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
11513 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
11514 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11515 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11516 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11517 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
11518 ; GFX9-NEXT:    s_mov_b32 s33, s34
11519 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
11520 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
11522 ; GFX10-LABEL: test_call_external_void_func_f64_imm_inreg:
11523 ; GFX10:       ; %bb.0:
11524 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11525 ; GFX10-NEXT:    s_mov_b32 s34, s33
11526 ; GFX10-NEXT:    s_mov_b32 s33, s32
11527 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11528 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11529 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11530 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11531 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
11532 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_f64_inreg@abs32@hi
11533 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_f64_inreg@abs32@lo
11534 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
11535 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
11536 ; GFX10-NEXT:    s_mov_b32 s4, 0
11537 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
11538 ; GFX10-NEXT:    s_mov_b32 s5, 0x40100000
11539 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
11540 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
11541 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11542 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
11543 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
11544 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
11545 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
11546 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
11547 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11548 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11549 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11550 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11551 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
11552 ; GFX10-NEXT:    s_mov_b32 s33, s34
11553 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11554 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
11556 ; GFX11-LABEL: test_call_external_void_func_f64_imm_inreg:
11557 ; GFX11:       ; %bb.0:
11558 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11559 ; GFX11-NEXT:    s_mov_b32 s0, s33
11560 ; GFX11-NEXT:    s_mov_b32 s33, s32
11561 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11562 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
11563 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11564 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
11565 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_f64_inreg@abs32@hi
11566 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_f64_inreg@abs32@lo
11567 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
11568 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
11569 ; GFX11-NEXT:    s_mov_b32 s4, 0
11570 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
11571 ; GFX11-NEXT:    s_mov_b32 s5, 0x40100000
11572 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
11573 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
11574 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11575 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
11576 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
11577 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
11578 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
11579 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
11580 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
11581 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11582 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
11583 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11584 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
11585 ; GFX11-NEXT:    s_mov_b32 s33, s0
11586 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11587 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
11589 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_f64_imm_inreg:
11590 ; GFX10-SCRATCH:       ; %bb.0:
11591 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11592 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
11593 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
11594 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11595 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
11596 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11597 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11598 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
11599 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_f64_inreg@abs32@hi
11600 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_f64_inreg@abs32@lo
11601 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
11602 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
11603 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 0
11604 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
11605 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 0x40100000
11606 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
11607 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
11608 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11609 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
11610 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
11611 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
11612 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
11613 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
11614 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11615 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
11616 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11617 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11618 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
11619 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
11620 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
11621 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
11622   call amdgpu_gfx void @external_void_func_f64_inreg(double inreg 4.0)
11623   ret void
11626 define amdgpu_gfx void @test_call_external_void_func_v2f64_imm_inreg() #0 {
11627 ; GFX9-LABEL: test_call_external_void_func_v2f64_imm_inreg:
11628 ; GFX9:       ; %bb.0:
11629 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11630 ; GFX9-NEXT:    s_mov_b32 s34, s33
11631 ; GFX9-NEXT:    s_mov_b32 s33, s32
11632 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11633 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11634 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11635 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 6
11636 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
11637 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
11638 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
11639 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
11640 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 4
11641 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2f64_inreg@abs32@hi
11642 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2f64_inreg@abs32@lo
11643 ; GFX9-NEXT:    s_mov_b32 s4, 0
11644 ; GFX9-NEXT:    s_mov_b32 s5, 2.0
11645 ; GFX9-NEXT:    s_mov_b32 s6, 0
11646 ; GFX9-NEXT:    s_mov_b32 s7, 0x40100000
11647 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
11648 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 5
11649 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11650 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 5
11651 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 4
11652 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
11653 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
11654 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
11655 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
11656 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 6
11657 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11658 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11659 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11660 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
11661 ; GFX9-NEXT:    s_mov_b32 s33, s34
11662 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
11663 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
11665 ; GFX10-LABEL: test_call_external_void_func_v2f64_imm_inreg:
11666 ; GFX10:       ; %bb.0:
11667 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11668 ; GFX10-NEXT:    s_mov_b32 s34, s33
11669 ; GFX10-NEXT:    s_mov_b32 s33, s32
11670 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11671 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11672 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11673 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11674 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 6
11675 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2f64_inreg@abs32@hi
11676 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2f64_inreg@abs32@lo
11677 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
11678 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
11679 ; GFX10-NEXT:    s_mov_b32 s4, 0
11680 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
11681 ; GFX10-NEXT:    s_mov_b32 s5, 2.0
11682 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
11683 ; GFX10-NEXT:    s_mov_b32 s6, 0
11684 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
11685 ; GFX10-NEXT:    s_mov_b32 s7, 0x40100000
11686 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 4
11687 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 5
11688 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11689 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 5
11690 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 4
11691 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
11692 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
11693 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
11694 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
11695 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 6
11696 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11697 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11698 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11699 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11700 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
11701 ; GFX10-NEXT:    s_mov_b32 s33, s34
11702 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11703 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
11705 ; GFX11-LABEL: test_call_external_void_func_v2f64_imm_inreg:
11706 ; GFX11:       ; %bb.0:
11707 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11708 ; GFX11-NEXT:    s_mov_b32 s0, s33
11709 ; GFX11-NEXT:    s_mov_b32 s33, s32
11710 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11711 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
11712 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11713 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 6
11714 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2f64_inreg@abs32@hi
11715 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2f64_inreg@abs32@lo
11716 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
11717 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
11718 ; GFX11-NEXT:    s_mov_b32 s4, 0
11719 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
11720 ; GFX11-NEXT:    s_mov_b32 s5, 2.0
11721 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
11722 ; GFX11-NEXT:    s_mov_b32 s6, 0
11723 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
11724 ; GFX11-NEXT:    s_mov_b32 s7, 0x40100000
11725 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 4
11726 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 5
11727 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11728 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
11729 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 5
11730 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 4
11731 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
11732 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
11733 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
11734 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
11735 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 6
11736 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11737 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
11738 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11739 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
11740 ; GFX11-NEXT:    s_mov_b32 s33, s0
11741 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11742 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
11744 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2f64_imm_inreg:
11745 ; GFX10-SCRATCH:       ; %bb.0:
11746 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11747 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
11748 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
11749 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11750 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
11751 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11752 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11753 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 6
11754 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2f64_inreg@abs32@hi
11755 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2f64_inreg@abs32@lo
11756 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
11757 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
11758 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 0
11759 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
11760 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2.0
11761 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
11762 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 0
11763 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
11764 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s7, 0x40100000
11765 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 4
11766 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 5
11767 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11768 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 5
11769 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 4
11770 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
11771 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
11772 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
11773 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
11774 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 6
11775 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11776 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
11777 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11778 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11779 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
11780 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
11781 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
11782 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
11783   call amdgpu_gfx void @external_void_func_v2f64_inreg(<2 x double> inreg <double 2.0, double 4.0>)
11784   ret void
11787 define amdgpu_gfx void @test_call_external_void_func_v3f64_imm_inreg() #0 {
11788 ; GFX9-LABEL: test_call_external_void_func_v3f64_imm_inreg:
11789 ; GFX9:       ; %bb.0:
11790 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11791 ; GFX9-NEXT:    s_mov_b32 s34, s33
11792 ; GFX9-NEXT:    s_mov_b32 s33, s32
11793 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11794 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11795 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11796 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 8
11797 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
11798 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
11799 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
11800 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
11801 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
11802 ; GFX9-NEXT:    v_writelane_b32 v40, s9, 5
11803 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 6
11804 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3f64_inreg@abs32@hi
11805 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3f64_inreg@abs32@lo
11806 ; GFX9-NEXT:    s_mov_b32 s4, 0
11807 ; GFX9-NEXT:    s_mov_b32 s5, 2.0
11808 ; GFX9-NEXT:    s_mov_b32 s6, 0
11809 ; GFX9-NEXT:    s_mov_b32 s7, 0x40100000
11810 ; GFX9-NEXT:    s_mov_b32 s8, 0
11811 ; GFX9-NEXT:    s_mov_b32 s9, 0x40200000
11812 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
11813 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 7
11814 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11815 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 7
11816 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 6
11817 ; GFX9-NEXT:    v_readlane_b32 s9, v40, 5
11818 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
11819 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
11820 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
11821 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
11822 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
11823 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 8
11824 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11825 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11826 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11827 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
11828 ; GFX9-NEXT:    s_mov_b32 s33, s34
11829 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
11830 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
11832 ; GFX10-LABEL: test_call_external_void_func_v3f64_imm_inreg:
11833 ; GFX10:       ; %bb.0:
11834 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11835 ; GFX10-NEXT:    s_mov_b32 s34, s33
11836 ; GFX10-NEXT:    s_mov_b32 s33, s32
11837 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11838 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11839 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11840 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11841 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 8
11842 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3f64_inreg@abs32@hi
11843 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3f64_inreg@abs32@lo
11844 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
11845 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
11846 ; GFX10-NEXT:    s_mov_b32 s4, 0
11847 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
11848 ; GFX10-NEXT:    s_mov_b32 s5, 2.0
11849 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
11850 ; GFX10-NEXT:    s_mov_b32 s6, 0
11851 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
11852 ; GFX10-NEXT:    s_mov_b32 s7, 0x40100000
11853 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
11854 ; GFX10-NEXT:    s_mov_b32 s8, 0
11855 ; GFX10-NEXT:    v_writelane_b32 v40, s9, 5
11856 ; GFX10-NEXT:    s_mov_b32 s9, 0x40200000
11857 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 6
11858 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 7
11859 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11860 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 7
11861 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 6
11862 ; GFX10-NEXT:    v_readlane_b32 s9, v40, 5
11863 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
11864 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
11865 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
11866 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
11867 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
11868 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 8
11869 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
11870 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11871 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
11872 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
11873 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
11874 ; GFX10-NEXT:    s_mov_b32 s33, s34
11875 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11876 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
11878 ; GFX11-LABEL: test_call_external_void_func_v3f64_imm_inreg:
11879 ; GFX11:       ; %bb.0:
11880 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11881 ; GFX11-NEXT:    s_mov_b32 s0, s33
11882 ; GFX11-NEXT:    s_mov_b32 s33, s32
11883 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11884 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
11885 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11886 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 8
11887 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3f64_inreg@abs32@hi
11888 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3f64_inreg@abs32@lo
11889 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
11890 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
11891 ; GFX11-NEXT:    s_mov_b32 s4, 0
11892 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
11893 ; GFX11-NEXT:    s_mov_b32 s5, 2.0
11894 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
11895 ; GFX11-NEXT:    s_mov_b32 s6, 0
11896 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
11897 ; GFX11-NEXT:    s_mov_b32 s7, 0x40100000
11898 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
11899 ; GFX11-NEXT:    s_mov_b32 s8, 0
11900 ; GFX11-NEXT:    v_writelane_b32 v40, s9, 5
11901 ; GFX11-NEXT:    s_mov_b32 s9, 0x40200000
11902 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 6
11903 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 7
11904 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11905 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
11906 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 7
11907 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 6
11908 ; GFX11-NEXT:    v_readlane_b32 s9, v40, 5
11909 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
11910 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
11911 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
11912 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
11913 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
11914 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 8
11915 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
11916 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
11917 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
11918 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
11919 ; GFX11-NEXT:    s_mov_b32 s33, s0
11920 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11921 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
11923 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3f64_imm_inreg:
11924 ; GFX10-SCRATCH:       ; %bb.0:
11925 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11926 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
11927 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
11928 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11929 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
11930 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11931 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11932 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 8
11933 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3f64_inreg@abs32@hi
11934 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3f64_inreg@abs32@lo
11935 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
11936 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
11937 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 0
11938 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
11939 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2.0
11940 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
11941 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 0
11942 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
11943 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s7, 0x40100000
11944 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
11945 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s8, 0
11946 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s9, 5
11947 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s9, 0x40200000
11948 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 6
11949 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 7
11950 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
11951 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 7
11952 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 6
11953 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s9, v40, 5
11954 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
11955 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
11956 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
11957 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
11958 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
11959 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 8
11960 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
11961 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
11962 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
11963 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
11964 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
11965 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
11966 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
11967 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
11968   call amdgpu_gfx void @external_void_func_v3f64_inreg(<3 x double> inreg <double 2.0, double 4.0, double 8.0>)
11969   ret void
11972 define amdgpu_gfx void @test_call_external_void_func_v2i16_inreg() #0 {
11973 ; GFX9-LABEL: test_call_external_void_func_v2i16_inreg:
11974 ; GFX9:       ; %bb.0:
11975 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11976 ; GFX9-NEXT:    s_mov_b32 s34, s33
11977 ; GFX9-NEXT:    s_mov_b32 s33, s32
11978 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11979 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
11980 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11981 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 3
11982 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
11983 ; GFX9-NEXT:    s_load_dword s4, s[34:35], 0x0
11984 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 1
11985 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i16_inreg@abs32@hi
11986 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i16_inreg@abs32@lo
11987 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
11988 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 2
11989 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
11990 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 2
11991 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 1
11992 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
11993 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 3
11994 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
11995 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
11996 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
11997 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
11998 ; GFX9-NEXT:    s_mov_b32 s33, s34
11999 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
12000 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12002 ; GFX10-LABEL: test_call_external_void_func_v2i16_inreg:
12003 ; GFX10:       ; %bb.0:
12004 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12005 ; GFX10-NEXT:    s_mov_b32 s34, s33
12006 ; GFX10-NEXT:    s_mov_b32 s33, s32
12007 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12008 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12009 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12010 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12011 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 3
12012 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
12013 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
12014 ; GFX10-NEXT:    s_load_dword s4, s[34:35], 0x0
12015 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i16_inreg@abs32@hi
12016 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i16_inreg@abs32@lo
12017 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 1
12018 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 2
12019 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12020 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 2
12021 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 1
12022 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
12023 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 3
12024 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12025 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12026 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12027 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12028 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
12029 ; GFX10-NEXT:    s_mov_b32 s33, s34
12030 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12031 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12033 ; GFX11-LABEL: test_call_external_void_func_v2i16_inreg:
12034 ; GFX11:       ; %bb.0:
12035 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12036 ; GFX11-NEXT:    s_mov_b32 s0, s33
12037 ; GFX11-NEXT:    s_mov_b32 s33, s32
12038 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12039 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
12040 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12041 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 3
12042 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
12043 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
12044 ; GFX11-NEXT:    s_load_b32 s4, s[0:1], 0x0
12045 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i16_inreg@abs32@hi
12046 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i16_inreg@abs32@lo
12047 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 1
12048 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 2
12049 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12050 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12051 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 2
12052 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 1
12053 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
12054 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 3
12055 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12056 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
12057 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12058 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
12059 ; GFX11-NEXT:    s_mov_b32 s33, s0
12060 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
12061 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12063 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i16_inreg:
12064 ; GFX10-SCRATCH:       ; %bb.0:
12065 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12066 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
12067 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
12068 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12069 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
12070 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12071 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12072 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 3
12073 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
12074 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
12075 ; GFX10-SCRATCH-NEXT:    s_load_dword s4, s[0:1], 0x0
12076 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i16_inreg@abs32@hi
12077 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i16_inreg@abs32@lo
12078 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 1
12079 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 2
12080 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12081 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 2
12082 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 1
12083 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
12084 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 3
12085 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12086 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
12087 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12088 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12089 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
12090 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
12091 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
12092 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
12093   %val = load <2 x i16>, ptr addrspace(4) undef
12094   call amdgpu_gfx void @external_void_func_v2i16_inreg(<2 x i16> inreg %val)
12095   ret void
12098 define amdgpu_gfx void @test_call_external_void_func_v3i16_inreg() #0 {
12099 ; GFX9-LABEL: test_call_external_void_func_v3i16_inreg:
12100 ; GFX9:       ; %bb.0:
12101 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12102 ; GFX9-NEXT:    s_mov_b32 s34, s33
12103 ; GFX9-NEXT:    s_mov_b32 s33, s32
12104 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12105 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12106 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12107 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
12108 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
12109 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
12110 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[34:35], 0x0
12111 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
12112 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i16_inreg@abs32@hi
12113 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i16_inreg@abs32@lo
12114 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
12115 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
12116 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12117 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
12118 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
12119 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
12120 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
12121 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
12122 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12123 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12124 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12125 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
12126 ; GFX9-NEXT:    s_mov_b32 s33, s34
12127 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
12128 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12130 ; GFX10-LABEL: test_call_external_void_func_v3i16_inreg:
12131 ; GFX10:       ; %bb.0:
12132 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12133 ; GFX10-NEXT:    s_mov_b32 s34, s33
12134 ; GFX10-NEXT:    s_mov_b32 s33, s32
12135 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12136 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12137 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12138 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12139 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
12140 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
12141 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
12142 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
12143 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[34:35], 0x0
12144 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i16_inreg@abs32@hi
12145 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i16_inreg@abs32@lo
12146 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
12147 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
12148 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12149 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
12150 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
12151 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
12152 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
12153 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
12154 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12155 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12156 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12157 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12158 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
12159 ; GFX10-NEXT:    s_mov_b32 s33, s34
12160 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12161 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12163 ; GFX11-LABEL: test_call_external_void_func_v3i16_inreg:
12164 ; GFX11:       ; %bb.0:
12165 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12166 ; GFX11-NEXT:    s_mov_b32 s0, s33
12167 ; GFX11-NEXT:    s_mov_b32 s33, s32
12168 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12169 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
12170 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12171 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
12172 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
12173 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
12174 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
12175 ; GFX11-NEXT:    s_load_b64 s[4:5], s[0:1], 0x0
12176 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i16_inreg@abs32@hi
12177 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i16_inreg@abs32@lo
12178 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
12179 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
12180 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12181 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12182 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
12183 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
12184 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
12185 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
12186 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
12187 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12188 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
12189 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12190 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
12191 ; GFX11-NEXT:    s_mov_b32 s33, s0
12192 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
12193 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12195 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i16_inreg:
12196 ; GFX10-SCRATCH:       ; %bb.0:
12197 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12198 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
12199 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
12200 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12201 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
12202 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12203 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12204 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
12205 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
12206 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
12207 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
12208 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
12209 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i16_inreg@abs32@hi
12210 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i16_inreg@abs32@lo
12211 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
12212 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
12213 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12214 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
12215 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
12216 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
12217 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
12218 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
12219 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12220 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
12221 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12222 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12223 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
12224 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
12225 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
12226 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
12227   %val = load <3 x i16>, ptr addrspace(4) undef
12228   call amdgpu_gfx void @external_void_func_v3i16_inreg(<3 x i16> inreg %val)
12229   ret void
12232 define amdgpu_gfx void @test_call_external_void_func_v3f16_inreg() #0 {
12233 ; GFX9-LABEL: test_call_external_void_func_v3f16_inreg:
12234 ; GFX9:       ; %bb.0:
12235 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12236 ; GFX9-NEXT:    s_mov_b32 s34, s33
12237 ; GFX9-NEXT:    s_mov_b32 s33, s32
12238 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12239 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12240 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12241 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
12242 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
12243 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
12244 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[34:35], 0x0
12245 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
12246 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3f16_inreg@abs32@hi
12247 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3f16_inreg@abs32@lo
12248 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
12249 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
12250 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12251 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
12252 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
12253 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
12254 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
12255 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
12256 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12257 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12258 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12259 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
12260 ; GFX9-NEXT:    s_mov_b32 s33, s34
12261 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
12262 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12264 ; GFX10-LABEL: test_call_external_void_func_v3f16_inreg:
12265 ; GFX10:       ; %bb.0:
12266 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12267 ; GFX10-NEXT:    s_mov_b32 s34, s33
12268 ; GFX10-NEXT:    s_mov_b32 s33, s32
12269 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12270 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12271 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12272 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12273 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
12274 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
12275 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
12276 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
12277 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[34:35], 0x0
12278 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3f16_inreg@abs32@hi
12279 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3f16_inreg@abs32@lo
12280 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
12281 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
12282 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12283 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
12284 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
12285 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
12286 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
12287 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
12288 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12289 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12290 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12291 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12292 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
12293 ; GFX10-NEXT:    s_mov_b32 s33, s34
12294 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12295 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12297 ; GFX11-LABEL: test_call_external_void_func_v3f16_inreg:
12298 ; GFX11:       ; %bb.0:
12299 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12300 ; GFX11-NEXT:    s_mov_b32 s0, s33
12301 ; GFX11-NEXT:    s_mov_b32 s33, s32
12302 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12303 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
12304 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12305 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
12306 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
12307 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
12308 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
12309 ; GFX11-NEXT:    s_load_b64 s[4:5], s[0:1], 0x0
12310 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3f16_inreg@abs32@hi
12311 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3f16_inreg@abs32@lo
12312 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
12313 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
12314 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12315 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12316 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
12317 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
12318 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
12319 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
12320 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
12321 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12322 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
12323 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12324 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
12325 ; GFX11-NEXT:    s_mov_b32 s33, s0
12326 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
12327 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12329 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3f16_inreg:
12330 ; GFX10-SCRATCH:       ; %bb.0:
12331 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12332 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
12333 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
12334 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12335 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
12336 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12337 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12338 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
12339 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
12340 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
12341 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
12342 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
12343 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3f16_inreg@abs32@hi
12344 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3f16_inreg@abs32@lo
12345 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
12346 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
12347 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12348 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
12349 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
12350 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
12351 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
12352 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
12353 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12354 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
12355 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12356 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12357 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
12358 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
12359 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
12360 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
12361   %val = load <3 x half>, ptr addrspace(4) undef
12362   call amdgpu_gfx void @external_void_func_v3f16_inreg(<3 x half> inreg %val)
12363   ret void
12366 define amdgpu_gfx void @test_call_external_void_func_v3i16_imm_inreg() #0 {
12367 ; GFX9-LABEL: test_call_external_void_func_v3i16_imm_inreg:
12368 ; GFX9:       ; %bb.0:
12369 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12370 ; GFX9-NEXT:    s_mov_b32 s34, s33
12371 ; GFX9-NEXT:    s_mov_b32 s33, s32
12372 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12373 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12374 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12375 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
12376 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
12377 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
12378 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
12379 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i16_inreg@abs32@hi
12380 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i16_inreg@abs32@lo
12381 ; GFX9-NEXT:    s_mov_b32 s4, 0x20001
12382 ; GFX9-NEXT:    s_mov_b32 s5, 3
12383 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
12384 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
12385 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12386 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
12387 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
12388 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
12389 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
12390 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
12391 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12392 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12393 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12394 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
12395 ; GFX9-NEXT:    s_mov_b32 s33, s34
12396 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
12397 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12399 ; GFX10-LABEL: test_call_external_void_func_v3i16_imm_inreg:
12400 ; GFX10:       ; %bb.0:
12401 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12402 ; GFX10-NEXT:    s_mov_b32 s34, s33
12403 ; GFX10-NEXT:    s_mov_b32 s33, s32
12404 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12405 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12406 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12407 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12408 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
12409 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i16_inreg@abs32@hi
12410 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i16_inreg@abs32@lo
12411 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
12412 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
12413 ; GFX10-NEXT:    s_mov_b32 s4, 0x20001
12414 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
12415 ; GFX10-NEXT:    s_mov_b32 s5, 3
12416 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
12417 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
12418 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12419 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
12420 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
12421 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
12422 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
12423 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
12424 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12425 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12426 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12427 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12428 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
12429 ; GFX10-NEXT:    s_mov_b32 s33, s34
12430 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12431 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12433 ; GFX11-LABEL: test_call_external_void_func_v3i16_imm_inreg:
12434 ; GFX11:       ; %bb.0:
12435 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12436 ; GFX11-NEXT:    s_mov_b32 s0, s33
12437 ; GFX11-NEXT:    s_mov_b32 s33, s32
12438 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12439 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
12440 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12441 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
12442 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i16_inreg@abs32@hi
12443 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i16_inreg@abs32@lo
12444 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
12445 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
12446 ; GFX11-NEXT:    s_mov_b32 s4, 0x20001
12447 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
12448 ; GFX11-NEXT:    s_mov_b32 s5, 3
12449 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
12450 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
12451 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12452 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12453 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
12454 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
12455 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
12456 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
12457 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
12458 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12459 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
12460 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12461 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
12462 ; GFX11-NEXT:    s_mov_b32 s33, s0
12463 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
12464 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12466 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i16_imm_inreg:
12467 ; GFX10-SCRATCH:       ; %bb.0:
12468 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12469 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
12470 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
12471 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12472 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
12473 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12474 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12475 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
12476 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i16_inreg@abs32@hi
12477 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i16_inreg@abs32@lo
12478 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
12479 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
12480 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 0x20001
12481 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
12482 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 3
12483 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
12484 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
12485 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12486 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
12487 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
12488 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
12489 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
12490 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
12491 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12492 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
12493 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12494 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12495 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
12496 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
12497 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
12498 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
12499   call amdgpu_gfx void @external_void_func_v3i16_inreg(<3 x i16> inreg <i16 1, i16 2, i16 3>)
12500   ret void
12503 define amdgpu_gfx void @test_call_external_void_func_v3f16_imm_inreg() #0 {
12504 ; GFX9-LABEL: test_call_external_void_func_v3f16_imm_inreg:
12505 ; GFX9:       ; %bb.0:
12506 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12507 ; GFX9-NEXT:    s_mov_b32 s34, s33
12508 ; GFX9-NEXT:    s_mov_b32 s33, s32
12509 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12510 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12511 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12512 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
12513 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
12514 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
12515 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
12516 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3f16_inreg@abs32@hi
12517 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3f16_inreg@abs32@lo
12518 ; GFX9-NEXT:    s_mov_b32 s4, 0x40003c00
12519 ; GFX9-NEXT:    s_movk_i32 s5, 0x4400
12520 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
12521 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
12522 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12523 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
12524 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
12525 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
12526 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
12527 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
12528 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12529 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12530 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12531 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
12532 ; GFX9-NEXT:    s_mov_b32 s33, s34
12533 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
12534 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12536 ; GFX10-LABEL: test_call_external_void_func_v3f16_imm_inreg:
12537 ; GFX10:       ; %bb.0:
12538 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12539 ; GFX10-NEXT:    s_mov_b32 s34, s33
12540 ; GFX10-NEXT:    s_mov_b32 s33, s32
12541 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12542 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12543 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12544 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12545 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
12546 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3f16_inreg@abs32@hi
12547 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3f16_inreg@abs32@lo
12548 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
12549 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
12550 ; GFX10-NEXT:    s_mov_b32 s4, 0x40003c00
12551 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
12552 ; GFX10-NEXT:    s_movk_i32 s5, 0x4400
12553 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
12554 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
12555 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12556 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
12557 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
12558 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
12559 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
12560 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
12561 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12562 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12563 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12564 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12565 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
12566 ; GFX10-NEXT:    s_mov_b32 s33, s34
12567 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12568 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12570 ; GFX11-LABEL: test_call_external_void_func_v3f16_imm_inreg:
12571 ; GFX11:       ; %bb.0:
12572 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12573 ; GFX11-NEXT:    s_mov_b32 s0, s33
12574 ; GFX11-NEXT:    s_mov_b32 s33, s32
12575 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12576 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
12577 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12578 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
12579 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3f16_inreg@abs32@hi
12580 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3f16_inreg@abs32@lo
12581 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
12582 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
12583 ; GFX11-NEXT:    s_mov_b32 s4, 0x40003c00
12584 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
12585 ; GFX11-NEXT:    s_movk_i32 s5, 0x4400
12586 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
12587 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
12588 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12589 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12590 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
12591 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
12592 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
12593 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
12594 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
12595 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12596 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
12597 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12598 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
12599 ; GFX11-NEXT:    s_mov_b32 s33, s0
12600 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
12601 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12603 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3f16_imm_inreg:
12604 ; GFX10-SCRATCH:       ; %bb.0:
12605 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12606 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
12607 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
12608 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12609 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
12610 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12611 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12612 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
12613 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3f16_inreg@abs32@hi
12614 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3f16_inreg@abs32@lo
12615 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
12616 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
12617 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 0x40003c00
12618 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
12619 ; GFX10-SCRATCH-NEXT:    s_movk_i32 s5, 0x4400
12620 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
12621 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
12622 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12623 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
12624 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
12625 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
12626 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
12627 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
12628 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12629 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
12630 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12631 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12632 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
12633 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
12634 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
12635 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
12636   call amdgpu_gfx void @external_void_func_v3f16_inreg(<3 x half> inreg <half 1.0, half 2.0, half 4.0>)
12637   ret void
12640 define amdgpu_gfx void @test_call_external_void_func_v4i16_inreg() #0 {
12641 ; GFX9-LABEL: test_call_external_void_func_v4i16_inreg:
12642 ; GFX9:       ; %bb.0:
12643 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12644 ; GFX9-NEXT:    s_mov_b32 s34, s33
12645 ; GFX9-NEXT:    s_mov_b32 s33, s32
12646 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12647 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12648 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12649 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
12650 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
12651 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
12652 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[34:35], 0x0
12653 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
12654 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i16_inreg@abs32@hi
12655 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i16_inreg@abs32@lo
12656 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
12657 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
12658 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12659 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
12660 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
12661 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
12662 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
12663 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
12664 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12665 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12666 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12667 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
12668 ; GFX9-NEXT:    s_mov_b32 s33, s34
12669 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
12670 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12672 ; GFX10-LABEL: test_call_external_void_func_v4i16_inreg:
12673 ; GFX10:       ; %bb.0:
12674 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12675 ; GFX10-NEXT:    s_mov_b32 s34, s33
12676 ; GFX10-NEXT:    s_mov_b32 s33, s32
12677 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12678 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12679 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12680 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12681 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
12682 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
12683 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
12684 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
12685 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[34:35], 0x0
12686 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i16_inreg@abs32@hi
12687 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i16_inreg@abs32@lo
12688 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
12689 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
12690 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12691 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
12692 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
12693 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
12694 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
12695 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
12696 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12697 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12698 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12699 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12700 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
12701 ; GFX10-NEXT:    s_mov_b32 s33, s34
12702 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12703 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12705 ; GFX11-LABEL: test_call_external_void_func_v4i16_inreg:
12706 ; GFX11:       ; %bb.0:
12707 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12708 ; GFX11-NEXT:    s_mov_b32 s0, s33
12709 ; GFX11-NEXT:    s_mov_b32 s33, s32
12710 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12711 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
12712 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12713 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
12714 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
12715 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
12716 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
12717 ; GFX11-NEXT:    s_load_b64 s[4:5], s[0:1], 0x0
12718 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i16_inreg@abs32@hi
12719 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i16_inreg@abs32@lo
12720 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
12721 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
12722 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12723 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12724 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
12725 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
12726 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
12727 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
12728 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
12729 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12730 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
12731 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12732 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
12733 ; GFX11-NEXT:    s_mov_b32 s33, s0
12734 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
12735 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12737 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i16_inreg:
12738 ; GFX10-SCRATCH:       ; %bb.0:
12739 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12740 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
12741 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
12742 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12743 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
12744 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12745 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12746 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
12747 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
12748 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
12749 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
12750 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
12751 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i16_inreg@abs32@hi
12752 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i16_inreg@abs32@lo
12753 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
12754 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
12755 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12756 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
12757 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
12758 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
12759 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
12760 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
12761 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12762 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
12763 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12764 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12765 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
12766 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
12767 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
12768 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
12769   %val = load <4 x i16>, ptr addrspace(4) undef
12770   call amdgpu_gfx void @external_void_func_v4i16_inreg(<4 x i16> inreg %val)
12771   ret void
12774 define amdgpu_gfx void @test_call_external_void_func_v4i16_imm_inreg() #0 {
12775 ; GFX9-LABEL: test_call_external_void_func_v4i16_imm_inreg:
12776 ; GFX9:       ; %bb.0:
12777 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12778 ; GFX9-NEXT:    s_mov_b32 s34, s33
12779 ; GFX9-NEXT:    s_mov_b32 s33, s32
12780 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12781 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12782 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12783 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
12784 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
12785 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
12786 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
12787 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i16_inreg@abs32@hi
12788 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i16_inreg@abs32@lo
12789 ; GFX9-NEXT:    s_mov_b32 s4, 0x20001
12790 ; GFX9-NEXT:    s_mov_b32 s5, 0x40003
12791 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
12792 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
12793 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12794 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
12795 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
12796 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
12797 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
12798 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
12799 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12800 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12801 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12802 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
12803 ; GFX9-NEXT:    s_mov_b32 s33, s34
12804 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
12805 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12807 ; GFX10-LABEL: test_call_external_void_func_v4i16_imm_inreg:
12808 ; GFX10:       ; %bb.0:
12809 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12810 ; GFX10-NEXT:    s_mov_b32 s34, s33
12811 ; GFX10-NEXT:    s_mov_b32 s33, s32
12812 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12813 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12814 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12815 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12816 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
12817 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i16_inreg@abs32@hi
12818 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i16_inreg@abs32@lo
12819 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
12820 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
12821 ; GFX10-NEXT:    s_mov_b32 s4, 0x20001
12822 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
12823 ; GFX10-NEXT:    s_mov_b32 s5, 0x40003
12824 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
12825 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
12826 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12827 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
12828 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
12829 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
12830 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
12831 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
12832 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12833 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12834 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12835 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12836 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
12837 ; GFX10-NEXT:    s_mov_b32 s33, s34
12838 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12839 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12841 ; GFX11-LABEL: test_call_external_void_func_v4i16_imm_inreg:
12842 ; GFX11:       ; %bb.0:
12843 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12844 ; GFX11-NEXT:    s_mov_b32 s0, s33
12845 ; GFX11-NEXT:    s_mov_b32 s33, s32
12846 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12847 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
12848 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12849 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
12850 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i16_inreg@abs32@hi
12851 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i16_inreg@abs32@lo
12852 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
12853 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
12854 ; GFX11-NEXT:    s_mov_b32 s4, 0x20001
12855 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
12856 ; GFX11-NEXT:    s_mov_b32 s5, 0x40003
12857 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
12858 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
12859 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12860 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12861 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
12862 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
12863 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
12864 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
12865 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
12866 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12867 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
12868 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12869 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
12870 ; GFX11-NEXT:    s_mov_b32 s33, s0
12871 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
12872 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12874 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i16_imm_inreg:
12875 ; GFX10-SCRATCH:       ; %bb.0:
12876 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12877 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
12878 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
12879 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12880 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
12881 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12882 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12883 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
12884 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i16_inreg@abs32@hi
12885 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i16_inreg@abs32@lo
12886 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
12887 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
12888 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 0x20001
12889 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
12890 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 0x40003
12891 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
12892 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
12893 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12894 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
12895 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
12896 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
12897 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
12898 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
12899 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
12900 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
12901 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
12902 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
12903 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
12904 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
12905 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
12906 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
12907   call amdgpu_gfx void @external_void_func_v4i16_inreg(<4 x i16> inreg <i16 1, i16 2, i16 3, i16 4>)
12908   ret void
12911 define amdgpu_gfx void @test_call_external_void_func_v2f16_inreg() #0 {
12912 ; GFX9-LABEL: test_call_external_void_func_v2f16_inreg:
12913 ; GFX9:       ; %bb.0:
12914 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12915 ; GFX9-NEXT:    s_mov_b32 s34, s33
12916 ; GFX9-NEXT:    s_mov_b32 s33, s32
12917 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12918 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12919 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12920 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 3
12921 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
12922 ; GFX9-NEXT:    s_load_dword s4, s[34:35], 0x0
12923 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 1
12924 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2f16_inreg@abs32@hi
12925 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2f16_inreg@abs32@lo
12926 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
12927 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 2
12928 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12929 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 2
12930 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 1
12931 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
12932 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 3
12933 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
12934 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12935 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
12936 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
12937 ; GFX9-NEXT:    s_mov_b32 s33, s34
12938 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
12939 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12941 ; GFX10-LABEL: test_call_external_void_func_v2f16_inreg:
12942 ; GFX10:       ; %bb.0:
12943 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12944 ; GFX10-NEXT:    s_mov_b32 s34, s33
12945 ; GFX10-NEXT:    s_mov_b32 s33, s32
12946 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12947 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
12948 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12949 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12950 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 3
12951 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
12952 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
12953 ; GFX10-NEXT:    s_load_dword s4, s[34:35], 0x0
12954 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2f16_inreg@abs32@hi
12955 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2f16_inreg@abs32@lo
12956 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 1
12957 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 2
12958 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
12959 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 2
12960 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 1
12961 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
12962 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 3
12963 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
12964 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
12965 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
12966 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
12967 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
12968 ; GFX10-NEXT:    s_mov_b32 s33, s34
12969 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12970 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12972 ; GFX11-LABEL: test_call_external_void_func_v2f16_inreg:
12973 ; GFX11:       ; %bb.0:
12974 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12975 ; GFX11-NEXT:    s_mov_b32 s0, s33
12976 ; GFX11-NEXT:    s_mov_b32 s33, s32
12977 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12978 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
12979 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12980 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 3
12981 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
12982 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
12983 ; GFX11-NEXT:    s_load_b32 s4, s[0:1], 0x0
12984 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2f16_inreg@abs32@hi
12985 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2f16_inreg@abs32@lo
12986 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 1
12987 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 2
12988 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
12989 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12990 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 2
12991 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 1
12992 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
12993 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 3
12994 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
12995 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
12996 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
12997 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
12998 ; GFX11-NEXT:    s_mov_b32 s33, s0
12999 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
13000 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13002 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2f16_inreg:
13003 ; GFX10-SCRATCH:       ; %bb.0:
13004 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13005 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
13006 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
13007 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13008 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
13009 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13010 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13011 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 3
13012 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
13013 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
13014 ; GFX10-SCRATCH-NEXT:    s_load_dword s4, s[0:1], 0x0
13015 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2f16_inreg@abs32@hi
13016 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2f16_inreg@abs32@lo
13017 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 1
13018 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 2
13019 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13020 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 2
13021 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 1
13022 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
13023 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 3
13024 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13025 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
13026 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13027 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13028 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
13029 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
13030 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
13031 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
13032   %val = load <2 x half>, ptr addrspace(4) undef
13033   call amdgpu_gfx void @external_void_func_v2f16_inreg(<2 x half> inreg %val)
13034   ret void
13037 define amdgpu_gfx void @test_call_external_void_func_v2i32_inreg() #0 {
13038 ; GFX9-LABEL: test_call_external_void_func_v2i32_inreg:
13039 ; GFX9:       ; %bb.0:
13040 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13041 ; GFX9-NEXT:    s_mov_b32 s34, s33
13042 ; GFX9-NEXT:    s_mov_b32 s33, s32
13043 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13044 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13045 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13046 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
13047 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
13048 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
13049 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[34:35], 0x0
13050 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
13051 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i32_inreg@abs32@hi
13052 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i32_inreg@abs32@lo
13053 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
13054 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
13055 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13056 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
13057 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
13058 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
13059 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
13060 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
13061 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13062 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13063 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13064 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
13065 ; GFX9-NEXT:    s_mov_b32 s33, s34
13066 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
13067 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13069 ; GFX10-LABEL: test_call_external_void_func_v2i32_inreg:
13070 ; GFX10:       ; %bb.0:
13071 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13072 ; GFX10-NEXT:    s_mov_b32 s34, s33
13073 ; GFX10-NEXT:    s_mov_b32 s33, s32
13074 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13075 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13076 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13077 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13078 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
13079 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
13080 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
13081 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
13082 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[34:35], 0x0
13083 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i32_inreg@abs32@hi
13084 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i32_inreg@abs32@lo
13085 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
13086 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
13087 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13088 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
13089 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
13090 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
13091 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
13092 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
13093 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13094 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13095 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13096 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13097 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
13098 ; GFX10-NEXT:    s_mov_b32 s33, s34
13099 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
13100 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13102 ; GFX11-LABEL: test_call_external_void_func_v2i32_inreg:
13103 ; GFX11:       ; %bb.0:
13104 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13105 ; GFX11-NEXT:    s_mov_b32 s0, s33
13106 ; GFX11-NEXT:    s_mov_b32 s33, s32
13107 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13108 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
13109 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13110 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
13111 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
13112 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
13113 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
13114 ; GFX11-NEXT:    s_load_b64 s[4:5], s[0:1], 0x0
13115 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i32_inreg@abs32@hi
13116 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i32_inreg@abs32@lo
13117 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
13118 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
13119 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13120 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13121 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
13122 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
13123 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
13124 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
13125 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
13126 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13127 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
13128 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13129 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
13130 ; GFX11-NEXT:    s_mov_b32 s33, s0
13131 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
13132 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13134 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i32_inreg:
13135 ; GFX10-SCRATCH:       ; %bb.0:
13136 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13137 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
13138 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
13139 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13140 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
13141 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13142 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13143 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
13144 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
13145 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
13146 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
13147 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
13148 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i32_inreg@abs32@hi
13149 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i32_inreg@abs32@lo
13150 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
13151 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
13152 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13153 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
13154 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
13155 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
13156 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
13157 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
13158 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13159 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
13160 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13161 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13162 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
13163 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
13164 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
13165 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
13166   %val = load <2 x i32>, ptr addrspace(4) undef
13167   call amdgpu_gfx void @external_void_func_v2i32_inreg(<2 x i32> inreg %val)
13168   ret void
13171 define amdgpu_gfx void @test_call_external_void_func_v2i32_imm_inreg() #0 {
13172 ; GFX9-LABEL: test_call_external_void_func_v2i32_imm_inreg:
13173 ; GFX9:       ; %bb.0:
13174 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13175 ; GFX9-NEXT:    s_mov_b32 s34, s33
13176 ; GFX9-NEXT:    s_mov_b32 s33, s32
13177 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13178 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13179 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13180 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 4
13181 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
13182 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
13183 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 2
13184 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2i32_inreg@abs32@hi
13185 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2i32_inreg@abs32@lo
13186 ; GFX9-NEXT:    s_mov_b32 s4, 1
13187 ; GFX9-NEXT:    s_mov_b32 s5, 2
13188 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
13189 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 3
13190 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13191 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 3
13192 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 2
13193 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
13194 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
13195 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 4
13196 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13197 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13198 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13199 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
13200 ; GFX9-NEXT:    s_mov_b32 s33, s34
13201 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
13202 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13204 ; GFX10-LABEL: test_call_external_void_func_v2i32_imm_inreg:
13205 ; GFX10:       ; %bb.0:
13206 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13207 ; GFX10-NEXT:    s_mov_b32 s34, s33
13208 ; GFX10-NEXT:    s_mov_b32 s33, s32
13209 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13210 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13211 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13212 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13213 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 4
13214 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2i32_inreg@abs32@hi
13215 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2i32_inreg@abs32@lo
13216 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
13217 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
13218 ; GFX10-NEXT:    s_mov_b32 s4, 1
13219 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
13220 ; GFX10-NEXT:    s_mov_b32 s5, 2
13221 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 2
13222 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 3
13223 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13224 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 3
13225 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 2
13226 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
13227 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
13228 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 4
13229 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13230 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13231 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13232 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13233 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
13234 ; GFX10-NEXT:    s_mov_b32 s33, s34
13235 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
13236 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13238 ; GFX11-LABEL: test_call_external_void_func_v2i32_imm_inreg:
13239 ; GFX11:       ; %bb.0:
13240 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13241 ; GFX11-NEXT:    s_mov_b32 s0, s33
13242 ; GFX11-NEXT:    s_mov_b32 s33, s32
13243 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13244 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
13245 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13246 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 4
13247 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2i32_inreg@abs32@hi
13248 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2i32_inreg@abs32@lo
13249 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
13250 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
13251 ; GFX11-NEXT:    s_mov_b32 s4, 1
13252 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
13253 ; GFX11-NEXT:    s_mov_b32 s5, 2
13254 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 2
13255 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 3
13256 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13257 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13258 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 3
13259 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 2
13260 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
13261 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
13262 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 4
13263 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13264 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
13265 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13266 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
13267 ; GFX11-NEXT:    s_mov_b32 s33, s0
13268 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
13269 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13271 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2i32_imm_inreg:
13272 ; GFX10-SCRATCH:       ; %bb.0:
13273 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13274 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
13275 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
13276 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13277 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
13278 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13279 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13280 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 4
13281 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2i32_inreg@abs32@hi
13282 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2i32_inreg@abs32@lo
13283 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
13284 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
13285 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 1
13286 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
13287 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2
13288 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 2
13289 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 3
13290 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13291 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 3
13292 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 2
13293 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
13294 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
13295 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 4
13296 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13297 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
13298 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13299 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13300 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
13301 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
13302 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
13303 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
13304   call amdgpu_gfx void @external_void_func_v2i32_inreg(<2 x i32> inreg <i32 1, i32 2>)
13305   ret void
13308 define amdgpu_gfx void @test_call_external_void_func_v3i32_imm_inreg(i32) #0 {
13309 ; GFX9-LABEL: test_call_external_void_func_v3i32_imm_inreg:
13310 ; GFX9:       ; %bb.0:
13311 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13312 ; GFX9-NEXT:    s_mov_b32 s34, s33
13313 ; GFX9-NEXT:    s_mov_b32 s33, s32
13314 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13315 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13316 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13317 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 5
13318 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
13319 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
13320 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
13321 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 3
13322 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i32_inreg@abs32@hi
13323 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i32_inreg@abs32@lo
13324 ; GFX9-NEXT:    s_mov_b32 s4, 3
13325 ; GFX9-NEXT:    s_mov_b32 s5, 4
13326 ; GFX9-NEXT:    s_mov_b32 s6, 5
13327 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
13328 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 4
13329 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13330 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 4
13331 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 3
13332 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
13333 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
13334 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
13335 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 5
13336 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13337 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13338 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13339 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
13340 ; GFX9-NEXT:    s_mov_b32 s33, s34
13341 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
13342 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13344 ; GFX10-LABEL: test_call_external_void_func_v3i32_imm_inreg:
13345 ; GFX10:       ; %bb.0:
13346 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13347 ; GFX10-NEXT:    s_mov_b32 s34, s33
13348 ; GFX10-NEXT:    s_mov_b32 s33, s32
13349 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13350 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13351 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13352 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13353 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 5
13354 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i32_inreg@abs32@hi
13355 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i32_inreg@abs32@lo
13356 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
13357 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
13358 ; GFX10-NEXT:    s_mov_b32 s4, 3
13359 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
13360 ; GFX10-NEXT:    s_mov_b32 s5, 4
13361 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
13362 ; GFX10-NEXT:    s_mov_b32 s6, 5
13363 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 3
13364 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 4
13365 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13366 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 4
13367 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 3
13368 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
13369 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
13370 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
13371 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 5
13372 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13373 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13374 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13375 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13376 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
13377 ; GFX10-NEXT:    s_mov_b32 s33, s34
13378 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
13379 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13381 ; GFX11-LABEL: test_call_external_void_func_v3i32_imm_inreg:
13382 ; GFX11:       ; %bb.0:
13383 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13384 ; GFX11-NEXT:    s_mov_b32 s0, s33
13385 ; GFX11-NEXT:    s_mov_b32 s33, s32
13386 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13387 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
13388 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13389 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 5
13390 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i32_inreg@abs32@hi
13391 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i32_inreg@abs32@lo
13392 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
13393 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
13394 ; GFX11-NEXT:    s_mov_b32 s4, 3
13395 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
13396 ; GFX11-NEXT:    s_mov_b32 s5, 4
13397 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
13398 ; GFX11-NEXT:    s_mov_b32 s6, 5
13399 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 3
13400 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 4
13401 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13402 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13403 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 4
13404 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 3
13405 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
13406 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
13407 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
13408 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 5
13409 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13410 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
13411 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13412 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
13413 ; GFX11-NEXT:    s_mov_b32 s33, s0
13414 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
13415 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13417 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i32_imm_inreg:
13418 ; GFX10-SCRATCH:       ; %bb.0:
13419 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13420 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
13421 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
13422 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13423 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
13424 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13425 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13426 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 5
13427 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i32_inreg@abs32@hi
13428 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i32_inreg@abs32@lo
13429 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
13430 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
13431 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 3
13432 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
13433 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 4
13434 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
13435 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 5
13436 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 3
13437 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 4
13438 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13439 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 4
13440 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 3
13441 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
13442 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
13443 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
13444 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 5
13445 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13446 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
13447 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13448 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13449 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
13450 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
13451 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
13452 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
13453   call amdgpu_gfx void @external_void_func_v3i32_inreg(<3 x i32> inreg <i32 3, i32 4, i32 5>)
13454   ret void
13457 define amdgpu_gfx void @test_call_external_void_func_v3i32_i32_inreg(i32) #0 {
13458 ; GFX9-LABEL: test_call_external_void_func_v3i32_i32_inreg:
13459 ; GFX9:       ; %bb.0:
13460 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13461 ; GFX9-NEXT:    s_mov_b32 s34, s33
13462 ; GFX9-NEXT:    s_mov_b32 s33, s32
13463 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13464 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13465 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13466 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 6
13467 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
13468 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
13469 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
13470 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
13471 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 4
13472 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3i32_i32_inreg@abs32@hi
13473 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3i32_i32_inreg@abs32@lo
13474 ; GFX9-NEXT:    s_mov_b32 s4, 3
13475 ; GFX9-NEXT:    s_mov_b32 s5, 4
13476 ; GFX9-NEXT:    s_mov_b32 s6, 5
13477 ; GFX9-NEXT:    s_mov_b32 s7, 6
13478 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
13479 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 5
13480 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13481 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 5
13482 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 4
13483 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
13484 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
13485 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
13486 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
13487 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 6
13488 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13489 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13490 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13491 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
13492 ; GFX9-NEXT:    s_mov_b32 s33, s34
13493 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
13494 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13496 ; GFX10-LABEL: test_call_external_void_func_v3i32_i32_inreg:
13497 ; GFX10:       ; %bb.0:
13498 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13499 ; GFX10-NEXT:    s_mov_b32 s34, s33
13500 ; GFX10-NEXT:    s_mov_b32 s33, s32
13501 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13502 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13503 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13504 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13505 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 6
13506 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3i32_i32_inreg@abs32@hi
13507 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3i32_i32_inreg@abs32@lo
13508 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
13509 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
13510 ; GFX10-NEXT:    s_mov_b32 s4, 3
13511 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
13512 ; GFX10-NEXT:    s_mov_b32 s5, 4
13513 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
13514 ; GFX10-NEXT:    s_mov_b32 s6, 5
13515 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
13516 ; GFX10-NEXT:    s_mov_b32 s7, 6
13517 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 4
13518 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 5
13519 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13520 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 5
13521 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 4
13522 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
13523 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
13524 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
13525 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
13526 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 6
13527 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13528 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13529 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13530 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13531 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
13532 ; GFX10-NEXT:    s_mov_b32 s33, s34
13533 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
13534 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13536 ; GFX11-LABEL: test_call_external_void_func_v3i32_i32_inreg:
13537 ; GFX11:       ; %bb.0:
13538 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13539 ; GFX11-NEXT:    s_mov_b32 s0, s33
13540 ; GFX11-NEXT:    s_mov_b32 s33, s32
13541 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13542 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
13543 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13544 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 6
13545 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3i32_i32_inreg@abs32@hi
13546 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3i32_i32_inreg@abs32@lo
13547 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
13548 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
13549 ; GFX11-NEXT:    s_mov_b32 s4, 3
13550 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
13551 ; GFX11-NEXT:    s_mov_b32 s5, 4
13552 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
13553 ; GFX11-NEXT:    s_mov_b32 s6, 5
13554 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
13555 ; GFX11-NEXT:    s_mov_b32 s7, 6
13556 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 4
13557 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 5
13558 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13559 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13560 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 5
13561 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 4
13562 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
13563 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
13564 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
13565 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
13566 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 6
13567 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13568 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
13569 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13570 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
13571 ; GFX11-NEXT:    s_mov_b32 s33, s0
13572 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
13573 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13575 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3i32_i32_inreg:
13576 ; GFX10-SCRATCH:       ; %bb.0:
13577 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13578 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
13579 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
13580 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13581 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
13582 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13583 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13584 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 6
13585 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3i32_i32_inreg@abs32@hi
13586 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3i32_i32_inreg@abs32@lo
13587 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
13588 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
13589 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 3
13590 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
13591 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 4
13592 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
13593 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 5
13594 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
13595 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s7, 6
13596 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 4
13597 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 5
13598 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13599 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 5
13600 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 4
13601 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
13602 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
13603 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
13604 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
13605 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 6
13606 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13607 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
13608 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13609 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13610 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
13611 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
13612 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
13613 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
13614   call amdgpu_gfx void @external_void_func_v3i32_i32_inreg(<3 x i32> inreg <i32 3, i32 4, i32 5>, i32 inreg 6)
13615   ret void
13618 define amdgpu_gfx void @test_call_external_void_func_v4i32_inreg() #0 {
13619 ; GFX9-LABEL: test_call_external_void_func_v4i32_inreg:
13620 ; GFX9:       ; %bb.0:
13621 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13622 ; GFX9-NEXT:    s_mov_b32 s34, s33
13623 ; GFX9-NEXT:    s_mov_b32 s33, s32
13624 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13625 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13626 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13627 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 6
13628 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
13629 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
13630 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
13631 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
13632 ; GFX9-NEXT:    s_load_dwordx4 s[4:7], s[34:35], 0x0
13633 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 4
13634 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i32_inreg@abs32@hi
13635 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i32_inreg@abs32@lo
13636 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
13637 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 5
13638 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13639 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 5
13640 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 4
13641 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
13642 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
13643 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
13644 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
13645 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 6
13646 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13647 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13648 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13649 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
13650 ; GFX9-NEXT:    s_mov_b32 s33, s34
13651 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
13652 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13654 ; GFX10-LABEL: test_call_external_void_func_v4i32_inreg:
13655 ; GFX10:       ; %bb.0:
13656 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13657 ; GFX10-NEXT:    s_mov_b32 s34, s33
13658 ; GFX10-NEXT:    s_mov_b32 s33, s32
13659 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13660 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13661 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13662 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13663 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 6
13664 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
13665 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
13666 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
13667 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
13668 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
13669 ; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[34:35], 0x0
13670 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i32_inreg@abs32@hi
13671 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i32_inreg@abs32@lo
13672 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 4
13673 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 5
13674 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13675 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 5
13676 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 4
13677 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
13678 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
13679 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
13680 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
13681 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 6
13682 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13683 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13684 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13685 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13686 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
13687 ; GFX10-NEXT:    s_mov_b32 s33, s34
13688 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
13689 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13691 ; GFX11-LABEL: test_call_external_void_func_v4i32_inreg:
13692 ; GFX11:       ; %bb.0:
13693 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13694 ; GFX11-NEXT:    s_mov_b32 s0, s33
13695 ; GFX11-NEXT:    s_mov_b32 s33, s32
13696 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13697 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
13698 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13699 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 6
13700 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
13701 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
13702 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
13703 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
13704 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
13705 ; GFX11-NEXT:    s_load_b128 s[4:7], s[0:1], 0x0
13706 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i32_inreg@abs32@hi
13707 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i32_inreg@abs32@lo
13708 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 4
13709 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 5
13710 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13711 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13712 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 5
13713 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 4
13714 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
13715 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
13716 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
13717 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
13718 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 6
13719 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13720 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
13721 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13722 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
13723 ; GFX11-NEXT:    s_mov_b32 s33, s0
13724 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
13725 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13727 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i32_inreg:
13728 ; GFX10-SCRATCH:       ; %bb.0:
13729 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13730 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
13731 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
13732 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13733 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
13734 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13735 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13736 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 6
13737 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
13738 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
13739 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
13740 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
13741 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
13742 ; GFX10-SCRATCH-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x0
13743 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i32_inreg@abs32@hi
13744 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i32_inreg@abs32@lo
13745 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 4
13746 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 5
13747 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13748 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 5
13749 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 4
13750 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
13751 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
13752 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
13753 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
13754 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 6
13755 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13756 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
13757 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13758 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13759 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
13760 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
13761 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
13762 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
13763   %val = load <4 x i32>, ptr addrspace(4) undef
13764   call amdgpu_gfx void @external_void_func_v4i32_inreg(<4 x i32> inreg %val)
13765   ret void
13768 define amdgpu_gfx void @test_call_external_void_func_v4i32_imm_inreg() #0 {
13769 ; GFX9-LABEL: test_call_external_void_func_v4i32_imm_inreg:
13770 ; GFX9:       ; %bb.0:
13771 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13772 ; GFX9-NEXT:    s_mov_b32 s34, s33
13773 ; GFX9-NEXT:    s_mov_b32 s33, s32
13774 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13775 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13776 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13777 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 6
13778 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
13779 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
13780 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
13781 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
13782 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 4
13783 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4i32_inreg@abs32@hi
13784 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4i32_inreg@abs32@lo
13785 ; GFX9-NEXT:    s_mov_b32 s4, 1
13786 ; GFX9-NEXT:    s_mov_b32 s5, 2
13787 ; GFX9-NEXT:    s_mov_b32 s6, 3
13788 ; GFX9-NEXT:    s_mov_b32 s7, 4
13789 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
13790 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 5
13791 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13792 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 5
13793 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 4
13794 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
13795 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
13796 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
13797 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
13798 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 6
13799 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13800 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13801 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13802 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
13803 ; GFX9-NEXT:    s_mov_b32 s33, s34
13804 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
13805 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13807 ; GFX10-LABEL: test_call_external_void_func_v4i32_imm_inreg:
13808 ; GFX10:       ; %bb.0:
13809 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13810 ; GFX10-NEXT:    s_mov_b32 s34, s33
13811 ; GFX10-NEXT:    s_mov_b32 s33, s32
13812 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13813 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13814 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13815 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13816 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 6
13817 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4i32_inreg@abs32@hi
13818 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4i32_inreg@abs32@lo
13819 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
13820 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
13821 ; GFX10-NEXT:    s_mov_b32 s4, 1
13822 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
13823 ; GFX10-NEXT:    s_mov_b32 s5, 2
13824 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
13825 ; GFX10-NEXT:    s_mov_b32 s6, 3
13826 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
13827 ; GFX10-NEXT:    s_mov_b32 s7, 4
13828 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 4
13829 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 5
13830 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13831 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 5
13832 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 4
13833 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
13834 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
13835 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
13836 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
13837 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 6
13838 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13839 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13840 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13841 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13842 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
13843 ; GFX10-NEXT:    s_mov_b32 s33, s34
13844 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
13845 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13847 ; GFX11-LABEL: test_call_external_void_func_v4i32_imm_inreg:
13848 ; GFX11:       ; %bb.0:
13849 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13850 ; GFX11-NEXT:    s_mov_b32 s0, s33
13851 ; GFX11-NEXT:    s_mov_b32 s33, s32
13852 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13853 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
13854 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13855 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 6
13856 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4i32_inreg@abs32@hi
13857 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4i32_inreg@abs32@lo
13858 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
13859 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
13860 ; GFX11-NEXT:    s_mov_b32 s4, 1
13861 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
13862 ; GFX11-NEXT:    s_mov_b32 s5, 2
13863 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
13864 ; GFX11-NEXT:    s_mov_b32 s6, 3
13865 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
13866 ; GFX11-NEXT:    s_mov_b32 s7, 4
13867 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 4
13868 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 5
13869 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13870 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13871 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 5
13872 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 4
13873 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
13874 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
13875 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
13876 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
13877 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 6
13878 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
13879 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
13880 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
13881 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
13882 ; GFX11-NEXT:    s_mov_b32 s33, s0
13883 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
13884 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13886 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4i32_imm_inreg:
13887 ; GFX10-SCRATCH:       ; %bb.0:
13888 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13889 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
13890 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
13891 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13892 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
13893 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13894 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13895 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 6
13896 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4i32_inreg@abs32@hi
13897 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4i32_inreg@abs32@lo
13898 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
13899 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
13900 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 1
13901 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
13902 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2
13903 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
13904 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 3
13905 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
13906 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s7, 4
13907 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 4
13908 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 5
13909 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
13910 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 5
13911 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 4
13912 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
13913 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
13914 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
13915 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
13916 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 6
13917 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
13918 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
13919 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
13920 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
13921 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
13922 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
13923 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
13924 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
13925   call amdgpu_gfx void @external_void_func_v4i32_inreg(<4 x i32> inreg <i32 1, i32 2, i32 3, i32 4>)
13926   ret void
13929 define amdgpu_gfx void @test_call_external_void_func_v5i32_imm_inreg() #0 {
13930 ; GFX9-LABEL: test_call_external_void_func_v5i32_imm_inreg:
13931 ; GFX9:       ; %bb.0:
13932 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13933 ; GFX9-NEXT:    s_mov_b32 s34, s33
13934 ; GFX9-NEXT:    s_mov_b32 s33, s32
13935 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13936 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13937 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13938 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 7
13939 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
13940 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
13941 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
13942 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
13943 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
13944 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 5
13945 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v5i32_inreg@abs32@hi
13946 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v5i32_inreg@abs32@lo
13947 ; GFX9-NEXT:    s_mov_b32 s4, 1
13948 ; GFX9-NEXT:    s_mov_b32 s5, 2
13949 ; GFX9-NEXT:    s_mov_b32 s6, 3
13950 ; GFX9-NEXT:    s_mov_b32 s7, 4
13951 ; GFX9-NEXT:    s_mov_b32 s8, 5
13952 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
13953 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 6
13954 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13955 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 6
13956 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 5
13957 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
13958 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
13959 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
13960 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
13961 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
13962 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 7
13963 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
13964 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
13965 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
13966 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
13967 ; GFX9-NEXT:    s_mov_b32 s33, s34
13968 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
13969 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13971 ; GFX10-LABEL: test_call_external_void_func_v5i32_imm_inreg:
13972 ; GFX10:       ; %bb.0:
13973 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13974 ; GFX10-NEXT:    s_mov_b32 s34, s33
13975 ; GFX10-NEXT:    s_mov_b32 s33, s32
13976 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
13977 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
13978 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
13979 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
13980 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 7
13981 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v5i32_inreg@abs32@hi
13982 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v5i32_inreg@abs32@lo
13983 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
13984 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
13985 ; GFX10-NEXT:    s_mov_b32 s4, 1
13986 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
13987 ; GFX10-NEXT:    s_mov_b32 s5, 2
13988 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
13989 ; GFX10-NEXT:    s_mov_b32 s6, 3
13990 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
13991 ; GFX10-NEXT:    s_mov_b32 s7, 4
13992 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
13993 ; GFX10-NEXT:    s_mov_b32 s8, 5
13994 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 5
13995 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 6
13996 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
13997 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 6
13998 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 5
13999 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
14000 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
14001 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
14002 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
14003 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
14004 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 7
14005 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14006 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14007 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14008 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14009 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
14010 ; GFX10-NEXT:    s_mov_b32 s33, s34
14011 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
14012 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
14014 ; GFX11-LABEL: test_call_external_void_func_v5i32_imm_inreg:
14015 ; GFX11:       ; %bb.0:
14016 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14017 ; GFX11-NEXT:    s_mov_b32 s0, s33
14018 ; GFX11-NEXT:    s_mov_b32 s33, s32
14019 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14020 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
14021 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14022 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 7
14023 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v5i32_inreg@abs32@hi
14024 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v5i32_inreg@abs32@lo
14025 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
14026 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
14027 ; GFX11-NEXT:    s_mov_b32 s4, 1
14028 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
14029 ; GFX11-NEXT:    s_mov_b32 s5, 2
14030 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
14031 ; GFX11-NEXT:    s_mov_b32 s6, 3
14032 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
14033 ; GFX11-NEXT:    s_mov_b32 s7, 4
14034 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
14035 ; GFX11-NEXT:    s_mov_b32 s8, 5
14036 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 5
14037 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 6
14038 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
14039 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
14040 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 6
14041 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 5
14042 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
14043 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
14044 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
14045 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
14046 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
14047 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 7
14048 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14049 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
14050 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14051 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
14052 ; GFX11-NEXT:    s_mov_b32 s33, s0
14053 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
14054 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
14056 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v5i32_imm_inreg:
14057 ; GFX10-SCRATCH:       ; %bb.0:
14058 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14059 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
14060 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
14061 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
14062 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
14063 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
14064 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
14065 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 7
14066 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v5i32_inreg@abs32@hi
14067 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v5i32_inreg@abs32@lo
14068 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
14069 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
14070 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 1
14071 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
14072 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2
14073 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
14074 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 3
14075 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
14076 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s7, 4
14077 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
14078 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s8, 5
14079 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 5
14080 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 6
14081 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
14082 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 6
14083 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 5
14084 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
14085 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
14086 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
14087 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
14088 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
14089 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 7
14090 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
14091 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
14092 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
14093 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
14094 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
14095 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
14096 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
14097 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
14098   call amdgpu_gfx void @external_void_func_v5i32_inreg(<5 x i32> inreg <i32 1, i32 2, i32 3, i32 4, i32 5>)
14099   ret void
14102 define amdgpu_gfx void @test_call_external_void_func_v8i32_inreg() #0 {
14103 ; GFX9-LABEL: test_call_external_void_func_v8i32_inreg:
14104 ; GFX9:       ; %bb.0:
14105 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14106 ; GFX9-NEXT:    s_mov_b32 s34, s33
14107 ; GFX9-NEXT:    s_mov_b32 s33, s32
14108 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
14109 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
14110 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
14111 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 10
14112 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
14113 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
14114 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
14115 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
14116 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
14117 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
14118 ; GFX9-NEXT:    v_writelane_b32 v40, s9, 5
14119 ; GFX9-NEXT:    v_writelane_b32 v40, s10, 6
14120 ; GFX9-NEXT:    v_writelane_b32 v40, s11, 7
14121 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
14122 ; GFX9-NEXT:    s_load_dwordx8 s[4:11], s[34:35], 0x0
14123 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 8
14124 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v8i32_inreg@abs32@hi
14125 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v8i32_inreg@abs32@lo
14126 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
14127 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 9
14128 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
14129 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 9
14130 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 8
14131 ; GFX9-NEXT:    v_readlane_b32 s11, v40, 7
14132 ; GFX9-NEXT:    v_readlane_b32 s10, v40, 6
14133 ; GFX9-NEXT:    v_readlane_b32 s9, v40, 5
14134 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
14135 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
14136 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
14137 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
14138 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
14139 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 10
14140 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
14141 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14142 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
14143 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
14144 ; GFX9-NEXT:    s_mov_b32 s33, s34
14145 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
14146 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
14148 ; GFX10-LABEL: test_call_external_void_func_v8i32_inreg:
14149 ; GFX10:       ; %bb.0:
14150 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14151 ; GFX10-NEXT:    s_mov_b32 s34, s33
14152 ; GFX10-NEXT:    s_mov_b32 s33, s32
14153 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14154 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
14155 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14156 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14157 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 10
14158 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
14159 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
14160 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
14161 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
14162 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
14163 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
14164 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
14165 ; GFX10-NEXT:    v_writelane_b32 v40, s9, 5
14166 ; GFX10-NEXT:    v_writelane_b32 v40, s10, 6
14167 ; GFX10-NEXT:    v_writelane_b32 v40, s11, 7
14168 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
14169 ; GFX10-NEXT:    s_load_dwordx8 s[4:11], s[34:35], 0x0
14170 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v8i32_inreg@abs32@hi
14171 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v8i32_inreg@abs32@lo
14172 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 8
14173 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 9
14174 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
14175 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 9
14176 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 8
14177 ; GFX10-NEXT:    v_readlane_b32 s11, v40, 7
14178 ; GFX10-NEXT:    v_readlane_b32 s10, v40, 6
14179 ; GFX10-NEXT:    v_readlane_b32 s9, v40, 5
14180 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
14181 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
14182 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
14183 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
14184 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
14185 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 10
14186 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14187 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14188 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14189 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14190 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
14191 ; GFX10-NEXT:    s_mov_b32 s33, s34
14192 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
14193 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
14195 ; GFX11-LABEL: test_call_external_void_func_v8i32_inreg:
14196 ; GFX11:       ; %bb.0:
14197 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14198 ; GFX11-NEXT:    s_mov_b32 s0, s33
14199 ; GFX11-NEXT:    s_mov_b32 s33, s32
14200 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14201 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
14202 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14203 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 10
14204 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
14205 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
14206 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
14207 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
14208 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
14209 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
14210 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
14211 ; GFX11-NEXT:    v_writelane_b32 v40, s9, 5
14212 ; GFX11-NEXT:    v_writelane_b32 v40, s10, 6
14213 ; GFX11-NEXT:    v_writelane_b32 v40, s11, 7
14214 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
14215 ; GFX11-NEXT:    s_load_b256 s[4:11], s[0:1], 0x0
14216 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v8i32_inreg@abs32@hi
14217 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v8i32_inreg@abs32@lo
14218 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 8
14219 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 9
14220 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
14221 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
14222 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 9
14223 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 8
14224 ; GFX11-NEXT:    v_readlane_b32 s11, v40, 7
14225 ; GFX11-NEXT:    v_readlane_b32 s10, v40, 6
14226 ; GFX11-NEXT:    v_readlane_b32 s9, v40, 5
14227 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
14228 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
14229 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
14230 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
14231 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
14232 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 10
14233 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14234 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
14235 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14236 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
14237 ; GFX11-NEXT:    s_mov_b32 s33, s0
14238 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
14239 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
14241 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v8i32_inreg:
14242 ; GFX10-SCRATCH:       ; %bb.0:
14243 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14244 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
14245 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
14246 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
14247 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
14248 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
14249 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
14250 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 10
14251 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
14252 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
14253 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
14254 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
14255 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
14256 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
14257 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
14258 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s9, 5
14259 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s10, 6
14260 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s11, 7
14261 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
14262 ; GFX10-SCRATCH-NEXT:    s_load_dwordx8 s[4:11], s[0:1], 0x0
14263 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v8i32_inreg@abs32@hi
14264 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v8i32_inreg@abs32@lo
14265 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 8
14266 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 9
14267 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
14268 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 9
14269 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 8
14270 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s11, v40, 7
14271 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s10, v40, 6
14272 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s9, v40, 5
14273 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
14274 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
14275 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
14276 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
14277 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
14278 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 10
14279 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
14280 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
14281 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
14282 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
14283 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
14284 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
14285 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
14286 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
14287   %ptr = load ptr addrspace(4), ptr addrspace(4) undef
14288   %val = load <8 x i32>, ptr addrspace(4) %ptr
14289   call amdgpu_gfx void @external_void_func_v8i32_inreg(<8 x i32> inreg %val)
14290   ret void
14293 define amdgpu_gfx void @test_call_external_void_func_v8i32_imm_inreg() #0 {
14294 ; GFX9-LABEL: test_call_external_void_func_v8i32_imm_inreg:
14295 ; GFX9:       ; %bb.0:
14296 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14297 ; GFX9-NEXT:    s_mov_b32 s34, s33
14298 ; GFX9-NEXT:    s_mov_b32 s33, s32
14299 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
14300 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
14301 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
14302 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 10
14303 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
14304 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
14305 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
14306 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
14307 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
14308 ; GFX9-NEXT:    v_writelane_b32 v40, s9, 5
14309 ; GFX9-NEXT:    v_writelane_b32 v40, s10, 6
14310 ; GFX9-NEXT:    v_writelane_b32 v40, s11, 7
14311 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 8
14312 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v8i32_inreg@abs32@hi
14313 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v8i32_inreg@abs32@lo
14314 ; GFX9-NEXT:    s_mov_b32 s4, 1
14315 ; GFX9-NEXT:    s_mov_b32 s5, 2
14316 ; GFX9-NEXT:    s_mov_b32 s6, 3
14317 ; GFX9-NEXT:    s_mov_b32 s7, 4
14318 ; GFX9-NEXT:    s_mov_b32 s8, 5
14319 ; GFX9-NEXT:    s_mov_b32 s9, 6
14320 ; GFX9-NEXT:    s_mov_b32 s10, 7
14321 ; GFX9-NEXT:    s_mov_b32 s11, 8
14322 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
14323 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 9
14324 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
14325 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 9
14326 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 8
14327 ; GFX9-NEXT:    v_readlane_b32 s11, v40, 7
14328 ; GFX9-NEXT:    v_readlane_b32 s10, v40, 6
14329 ; GFX9-NEXT:    v_readlane_b32 s9, v40, 5
14330 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
14331 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
14332 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
14333 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
14334 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
14335 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 10
14336 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
14337 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14338 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
14339 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
14340 ; GFX9-NEXT:    s_mov_b32 s33, s34
14341 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
14342 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
14344 ; GFX10-LABEL: test_call_external_void_func_v8i32_imm_inreg:
14345 ; GFX10:       ; %bb.0:
14346 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14347 ; GFX10-NEXT:    s_mov_b32 s34, s33
14348 ; GFX10-NEXT:    s_mov_b32 s33, s32
14349 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14350 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
14351 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14352 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14353 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 10
14354 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v8i32_inreg@abs32@hi
14355 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v8i32_inreg@abs32@lo
14356 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
14357 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
14358 ; GFX10-NEXT:    s_mov_b32 s4, 1
14359 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
14360 ; GFX10-NEXT:    s_mov_b32 s5, 2
14361 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
14362 ; GFX10-NEXT:    s_mov_b32 s6, 3
14363 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
14364 ; GFX10-NEXT:    s_mov_b32 s7, 4
14365 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
14366 ; GFX10-NEXT:    s_mov_b32 s8, 5
14367 ; GFX10-NEXT:    v_writelane_b32 v40, s9, 5
14368 ; GFX10-NEXT:    s_mov_b32 s9, 6
14369 ; GFX10-NEXT:    v_writelane_b32 v40, s10, 6
14370 ; GFX10-NEXT:    s_mov_b32 s10, 7
14371 ; GFX10-NEXT:    v_writelane_b32 v40, s11, 7
14372 ; GFX10-NEXT:    s_mov_b32 s11, 8
14373 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 8
14374 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 9
14375 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
14376 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 9
14377 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 8
14378 ; GFX10-NEXT:    v_readlane_b32 s11, v40, 7
14379 ; GFX10-NEXT:    v_readlane_b32 s10, v40, 6
14380 ; GFX10-NEXT:    v_readlane_b32 s9, v40, 5
14381 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
14382 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
14383 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
14384 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
14385 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
14386 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 10
14387 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14388 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14389 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14390 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14391 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
14392 ; GFX10-NEXT:    s_mov_b32 s33, s34
14393 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
14394 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
14396 ; GFX11-LABEL: test_call_external_void_func_v8i32_imm_inreg:
14397 ; GFX11:       ; %bb.0:
14398 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14399 ; GFX11-NEXT:    s_mov_b32 s0, s33
14400 ; GFX11-NEXT:    s_mov_b32 s33, s32
14401 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14402 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
14403 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14404 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 10
14405 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v8i32_inreg@abs32@hi
14406 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v8i32_inreg@abs32@lo
14407 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
14408 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
14409 ; GFX11-NEXT:    s_mov_b32 s4, 1
14410 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
14411 ; GFX11-NEXT:    s_mov_b32 s5, 2
14412 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
14413 ; GFX11-NEXT:    s_mov_b32 s6, 3
14414 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
14415 ; GFX11-NEXT:    s_mov_b32 s7, 4
14416 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
14417 ; GFX11-NEXT:    s_mov_b32 s8, 5
14418 ; GFX11-NEXT:    v_writelane_b32 v40, s9, 5
14419 ; GFX11-NEXT:    s_mov_b32 s9, 6
14420 ; GFX11-NEXT:    v_writelane_b32 v40, s10, 6
14421 ; GFX11-NEXT:    s_mov_b32 s10, 7
14422 ; GFX11-NEXT:    v_writelane_b32 v40, s11, 7
14423 ; GFX11-NEXT:    s_mov_b32 s11, 8
14424 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 8
14425 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 9
14426 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
14427 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
14428 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 9
14429 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 8
14430 ; GFX11-NEXT:    v_readlane_b32 s11, v40, 7
14431 ; GFX11-NEXT:    v_readlane_b32 s10, v40, 6
14432 ; GFX11-NEXT:    v_readlane_b32 s9, v40, 5
14433 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
14434 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
14435 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
14436 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
14437 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
14438 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 10
14439 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14440 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
14441 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14442 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
14443 ; GFX11-NEXT:    s_mov_b32 s33, s0
14444 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
14445 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
14447 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v8i32_imm_inreg:
14448 ; GFX10-SCRATCH:       ; %bb.0:
14449 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14450 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
14451 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
14452 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
14453 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
14454 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
14455 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
14456 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 10
14457 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v8i32_inreg@abs32@hi
14458 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v8i32_inreg@abs32@lo
14459 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
14460 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
14461 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s4, 1
14462 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
14463 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s5, 2
14464 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
14465 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s6, 3
14466 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
14467 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s7, 4
14468 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
14469 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s8, 5
14470 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s9, 5
14471 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s9, 6
14472 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s10, 6
14473 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s10, 7
14474 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s11, 7
14475 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s11, 8
14476 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 8
14477 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 9
14478 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
14479 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 9
14480 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 8
14481 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s11, v40, 7
14482 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s10, v40, 6
14483 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s9, v40, 5
14484 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
14485 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
14486 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
14487 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
14488 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
14489 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 10
14490 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
14491 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
14492 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
14493 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
14494 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
14495 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
14496 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
14497 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
14498   call amdgpu_gfx void @external_void_func_v8i32_inreg(<8 x i32> inreg <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>)
14499   ret void
14502 define amdgpu_gfx void @test_call_external_void_func_v16i32_inreg() #0 {
14503 ; GFX9-LABEL: test_call_external_void_func_v16i32_inreg:
14504 ; GFX9:       ; %bb.0:
14505 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14506 ; GFX9-NEXT:    s_mov_b32 s34, s33
14507 ; GFX9-NEXT:    s_mov_b32 s33, s32
14508 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
14509 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
14510 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
14511 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 18
14512 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
14513 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
14514 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
14515 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
14516 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
14517 ; GFX9-NEXT:    v_writelane_b32 v40, s9, 5
14518 ; GFX9-NEXT:    v_writelane_b32 v40, s10, 6
14519 ; GFX9-NEXT:    v_writelane_b32 v40, s11, 7
14520 ; GFX9-NEXT:    v_writelane_b32 v40, s12, 8
14521 ; GFX9-NEXT:    v_writelane_b32 v40, s13, 9
14522 ; GFX9-NEXT:    v_writelane_b32 v40, s14, 10
14523 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
14524 ; GFX9-NEXT:    v_writelane_b32 v40, s15, 11
14525 ; GFX9-NEXT:    v_writelane_b32 v40, s16, 12
14526 ; GFX9-NEXT:    v_writelane_b32 v40, s17, 13
14527 ; GFX9-NEXT:    v_writelane_b32 v40, s18, 14
14528 ; GFX9-NEXT:    v_writelane_b32 v40, s19, 15
14529 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
14530 ; GFX9-NEXT:    s_load_dwordx16 s[4:19], s[34:35], 0x0
14531 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 16
14532 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v16i32_inreg@abs32@hi
14533 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v16i32_inreg@abs32@lo
14534 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
14535 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 17
14536 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
14537 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 17
14538 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 16
14539 ; GFX9-NEXT:    v_readlane_b32 s19, v40, 15
14540 ; GFX9-NEXT:    v_readlane_b32 s18, v40, 14
14541 ; GFX9-NEXT:    v_readlane_b32 s17, v40, 13
14542 ; GFX9-NEXT:    v_readlane_b32 s16, v40, 12
14543 ; GFX9-NEXT:    v_readlane_b32 s15, v40, 11
14544 ; GFX9-NEXT:    v_readlane_b32 s14, v40, 10
14545 ; GFX9-NEXT:    v_readlane_b32 s13, v40, 9
14546 ; GFX9-NEXT:    v_readlane_b32 s12, v40, 8
14547 ; GFX9-NEXT:    v_readlane_b32 s11, v40, 7
14548 ; GFX9-NEXT:    v_readlane_b32 s10, v40, 6
14549 ; GFX9-NEXT:    v_readlane_b32 s9, v40, 5
14550 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
14551 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
14552 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
14553 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
14554 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
14555 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 18
14556 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
14557 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14558 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
14559 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
14560 ; GFX9-NEXT:    s_mov_b32 s33, s34
14561 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
14562 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
14564 ; GFX10-LABEL: test_call_external_void_func_v16i32_inreg:
14565 ; GFX10:       ; %bb.0:
14566 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14567 ; GFX10-NEXT:    s_mov_b32 s34, s33
14568 ; GFX10-NEXT:    s_mov_b32 s33, s32
14569 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14570 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
14571 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14572 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14573 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 18
14574 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
14575 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
14576 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
14577 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
14578 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
14579 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
14580 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
14581 ; GFX10-NEXT:    v_writelane_b32 v40, s9, 5
14582 ; GFX10-NEXT:    v_writelane_b32 v40, s10, 6
14583 ; GFX10-NEXT:    v_writelane_b32 v40, s11, 7
14584 ; GFX10-NEXT:    v_writelane_b32 v40, s12, 8
14585 ; GFX10-NEXT:    v_writelane_b32 v40, s13, 9
14586 ; GFX10-NEXT:    v_writelane_b32 v40, s14, 10
14587 ; GFX10-NEXT:    v_writelane_b32 v40, s15, 11
14588 ; GFX10-NEXT:    v_writelane_b32 v40, s16, 12
14589 ; GFX10-NEXT:    v_writelane_b32 v40, s17, 13
14590 ; GFX10-NEXT:    v_writelane_b32 v40, s18, 14
14591 ; GFX10-NEXT:    v_writelane_b32 v40, s19, 15
14592 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
14593 ; GFX10-NEXT:    s_load_dwordx16 s[4:19], s[34:35], 0x0
14594 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v16i32_inreg@abs32@hi
14595 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v16i32_inreg@abs32@lo
14596 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 16
14597 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 17
14598 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
14599 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 17
14600 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 16
14601 ; GFX10-NEXT:    v_readlane_b32 s19, v40, 15
14602 ; GFX10-NEXT:    v_readlane_b32 s18, v40, 14
14603 ; GFX10-NEXT:    v_readlane_b32 s17, v40, 13
14604 ; GFX10-NEXT:    v_readlane_b32 s16, v40, 12
14605 ; GFX10-NEXT:    v_readlane_b32 s15, v40, 11
14606 ; GFX10-NEXT:    v_readlane_b32 s14, v40, 10
14607 ; GFX10-NEXT:    v_readlane_b32 s13, v40, 9
14608 ; GFX10-NEXT:    v_readlane_b32 s12, v40, 8
14609 ; GFX10-NEXT:    v_readlane_b32 s11, v40, 7
14610 ; GFX10-NEXT:    v_readlane_b32 s10, v40, 6
14611 ; GFX10-NEXT:    v_readlane_b32 s9, v40, 5
14612 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
14613 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
14614 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
14615 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
14616 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
14617 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 18
14618 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14619 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14620 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14621 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14622 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
14623 ; GFX10-NEXT:    s_mov_b32 s33, s34
14624 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
14625 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
14627 ; GFX11-LABEL: test_call_external_void_func_v16i32_inreg:
14628 ; GFX11:       ; %bb.0:
14629 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14630 ; GFX11-NEXT:    s_mov_b32 s0, s33
14631 ; GFX11-NEXT:    s_mov_b32 s33, s32
14632 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14633 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
14634 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14635 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 18
14636 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
14637 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
14638 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
14639 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
14640 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
14641 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
14642 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
14643 ; GFX11-NEXT:    v_writelane_b32 v40, s9, 5
14644 ; GFX11-NEXT:    v_writelane_b32 v40, s10, 6
14645 ; GFX11-NEXT:    v_writelane_b32 v40, s11, 7
14646 ; GFX11-NEXT:    v_writelane_b32 v40, s12, 8
14647 ; GFX11-NEXT:    v_writelane_b32 v40, s13, 9
14648 ; GFX11-NEXT:    v_writelane_b32 v40, s14, 10
14649 ; GFX11-NEXT:    v_writelane_b32 v40, s15, 11
14650 ; GFX11-NEXT:    v_writelane_b32 v40, s16, 12
14651 ; GFX11-NEXT:    v_writelane_b32 v40, s17, 13
14652 ; GFX11-NEXT:    v_writelane_b32 v40, s18, 14
14653 ; GFX11-NEXT:    v_writelane_b32 v40, s19, 15
14654 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
14655 ; GFX11-NEXT:    s_load_b512 s[4:19], s[0:1], 0x0
14656 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v16i32_inreg@abs32@hi
14657 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v16i32_inreg@abs32@lo
14658 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 16
14659 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 17
14660 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
14661 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
14662 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 17
14663 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 16
14664 ; GFX11-NEXT:    v_readlane_b32 s19, v40, 15
14665 ; GFX11-NEXT:    v_readlane_b32 s18, v40, 14
14666 ; GFX11-NEXT:    v_readlane_b32 s17, v40, 13
14667 ; GFX11-NEXT:    v_readlane_b32 s16, v40, 12
14668 ; GFX11-NEXT:    v_readlane_b32 s15, v40, 11
14669 ; GFX11-NEXT:    v_readlane_b32 s14, v40, 10
14670 ; GFX11-NEXT:    v_readlane_b32 s13, v40, 9
14671 ; GFX11-NEXT:    v_readlane_b32 s12, v40, 8
14672 ; GFX11-NEXT:    v_readlane_b32 s11, v40, 7
14673 ; GFX11-NEXT:    v_readlane_b32 s10, v40, 6
14674 ; GFX11-NEXT:    v_readlane_b32 s9, v40, 5
14675 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
14676 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
14677 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
14678 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
14679 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
14680 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 18
14681 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14682 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
14683 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14684 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
14685 ; GFX11-NEXT:    s_mov_b32 s33, s0
14686 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
14687 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
14689 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v16i32_inreg:
14690 ; GFX10-SCRATCH:       ; %bb.0:
14691 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14692 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
14693 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
14694 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
14695 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
14696 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
14697 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
14698 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 18
14699 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
14700 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
14701 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
14702 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
14703 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
14704 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
14705 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
14706 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s9, 5
14707 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s10, 6
14708 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s11, 7
14709 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s12, 8
14710 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s13, 9
14711 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s14, 10
14712 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s15, 11
14713 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s16, 12
14714 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s17, 13
14715 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s18, 14
14716 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s19, 15
14717 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
14718 ; GFX10-SCRATCH-NEXT:    s_load_dwordx16 s[4:19], s[0:1], 0x0
14719 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v16i32_inreg@abs32@hi
14720 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v16i32_inreg@abs32@lo
14721 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 16
14722 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 17
14723 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
14724 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 17
14725 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 16
14726 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s19, v40, 15
14727 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s18, v40, 14
14728 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s17, v40, 13
14729 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s16, v40, 12
14730 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s15, v40, 11
14731 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s14, v40, 10
14732 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s13, v40, 9
14733 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s12, v40, 8
14734 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s11, v40, 7
14735 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s10, v40, 6
14736 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s9, v40, 5
14737 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
14738 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
14739 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
14740 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
14741 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
14742 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 18
14743 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
14744 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
14745 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
14746 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
14747 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
14748 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
14749 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
14750 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
14751   %ptr = load ptr addrspace(4), ptr addrspace(4) undef
14752   %val = load <16 x i32>, ptr addrspace(4) %ptr
14753   call amdgpu_gfx void @external_void_func_v16i32_inreg(<16 x i32> inreg %val)
14754   ret void
14757 define amdgpu_gfx void @test_call_external_void_func_v32i32_inreg() #0 {
14758 ; GFX9-LABEL: test_call_external_void_func_v32i32_inreg:
14759 ; GFX9:       ; %bb.0:
14760 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14761 ; GFX9-NEXT:    s_mov_b32 s34, s33
14762 ; GFX9-NEXT:    s_mov_b32 s33, s32
14763 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
14764 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
14765 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
14766 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 28
14767 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
14768 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
14769 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
14770 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
14771 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
14772 ; GFX9-NEXT:    v_writelane_b32 v40, s9, 5
14773 ; GFX9-NEXT:    v_writelane_b32 v40, s10, 6
14774 ; GFX9-NEXT:    v_writelane_b32 v40, s11, 7
14775 ; GFX9-NEXT:    v_writelane_b32 v40, s12, 8
14776 ; GFX9-NEXT:    v_writelane_b32 v40, s13, 9
14777 ; GFX9-NEXT:    v_writelane_b32 v40, s14, 10
14778 ; GFX9-NEXT:    v_writelane_b32 v40, s15, 11
14779 ; GFX9-NEXT:    v_writelane_b32 v40, s16, 12
14780 ; GFX9-NEXT:    v_writelane_b32 v40, s17, 13
14781 ; GFX9-NEXT:    v_writelane_b32 v40, s18, 14
14782 ; GFX9-NEXT:    v_writelane_b32 v40, s19, 15
14783 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
14784 ; GFX9-NEXT:    v_writelane_b32 v40, s20, 16
14785 ; GFX9-NEXT:    v_writelane_b32 v40, s21, 17
14786 ; GFX9-NEXT:    v_writelane_b32 v40, s22, 18
14787 ; GFX9-NEXT:    v_writelane_b32 v40, s23, 19
14788 ; GFX9-NEXT:    v_writelane_b32 v40, s24, 20
14789 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
14790 ; GFX9-NEXT:    s_load_dwordx16 s[36:51], s[34:35], 0x40
14791 ; GFX9-NEXT:    s_load_dwordx16 s[4:19], s[34:35], 0x0
14792 ; GFX9-NEXT:    v_writelane_b32 v40, s25, 21
14793 ; GFX9-NEXT:    v_writelane_b32 v40, s26, 22
14794 ; GFX9-NEXT:    v_writelane_b32 v40, s27, 23
14795 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
14796 ; GFX9-NEXT:    v_writelane_b32 v40, s28, 24
14797 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
14798 ; GFX9-NEXT:    v_mov_b32_e32 v0, s46
14799 ; GFX9-NEXT:    v_writelane_b32 v40, s29, 25
14800 ; GFX9-NEXT:    v_mov_b32_e32 v1, s47
14801 ; GFX9-NEXT:    v_mov_b32_e32 v2, s48
14802 ; GFX9-NEXT:    v_mov_b32_e32 v3, s49
14803 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32
14804 ; GFX9-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4
14805 ; GFX9-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8
14806 ; GFX9-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:12
14807 ; GFX9-NEXT:    v_mov_b32_e32 v0, s50
14808 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 26
14809 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:16
14810 ; GFX9-NEXT:    v_mov_b32_e32 v0, s51
14811 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v32i32_inreg@abs32@hi
14812 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v32i32_inreg@abs32@lo
14813 ; GFX9-NEXT:    s_mov_b32 s20, s36
14814 ; GFX9-NEXT:    s_mov_b32 s21, s37
14815 ; GFX9-NEXT:    s_mov_b32 s22, s38
14816 ; GFX9-NEXT:    s_mov_b32 s23, s39
14817 ; GFX9-NEXT:    s_mov_b32 s24, s40
14818 ; GFX9-NEXT:    s_mov_b32 s25, s41
14819 ; GFX9-NEXT:    s_mov_b32 s26, s42
14820 ; GFX9-NEXT:    s_mov_b32 s27, s43
14821 ; GFX9-NEXT:    s_mov_b32 s28, s44
14822 ; GFX9-NEXT:    s_mov_b32 s29, s45
14823 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 27
14824 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:20
14825 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
14826 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 27
14827 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 26
14828 ; GFX9-NEXT:    v_readlane_b32 s29, v40, 25
14829 ; GFX9-NEXT:    v_readlane_b32 s28, v40, 24
14830 ; GFX9-NEXT:    v_readlane_b32 s27, v40, 23
14831 ; GFX9-NEXT:    v_readlane_b32 s26, v40, 22
14832 ; GFX9-NEXT:    v_readlane_b32 s25, v40, 21
14833 ; GFX9-NEXT:    v_readlane_b32 s24, v40, 20
14834 ; GFX9-NEXT:    v_readlane_b32 s23, v40, 19
14835 ; GFX9-NEXT:    v_readlane_b32 s22, v40, 18
14836 ; GFX9-NEXT:    v_readlane_b32 s21, v40, 17
14837 ; GFX9-NEXT:    v_readlane_b32 s20, v40, 16
14838 ; GFX9-NEXT:    v_readlane_b32 s19, v40, 15
14839 ; GFX9-NEXT:    v_readlane_b32 s18, v40, 14
14840 ; GFX9-NEXT:    v_readlane_b32 s17, v40, 13
14841 ; GFX9-NEXT:    v_readlane_b32 s16, v40, 12
14842 ; GFX9-NEXT:    v_readlane_b32 s15, v40, 11
14843 ; GFX9-NEXT:    v_readlane_b32 s14, v40, 10
14844 ; GFX9-NEXT:    v_readlane_b32 s13, v40, 9
14845 ; GFX9-NEXT:    v_readlane_b32 s12, v40, 8
14846 ; GFX9-NEXT:    v_readlane_b32 s11, v40, 7
14847 ; GFX9-NEXT:    v_readlane_b32 s10, v40, 6
14848 ; GFX9-NEXT:    v_readlane_b32 s9, v40, 5
14849 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
14850 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
14851 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
14852 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
14853 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
14854 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 28
14855 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
14856 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14857 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
14858 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
14859 ; GFX9-NEXT:    s_mov_b32 s33, s34
14860 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
14861 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
14863 ; GFX10-LABEL: test_call_external_void_func_v32i32_inreg:
14864 ; GFX10:       ; %bb.0:
14865 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14866 ; GFX10-NEXT:    s_mov_b32 s34, s33
14867 ; GFX10-NEXT:    s_mov_b32 s33, s32
14868 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14869 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
14870 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14871 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14872 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 28
14873 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
14874 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
14875 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
14876 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
14877 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
14878 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
14879 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
14880 ; GFX10-NEXT:    v_writelane_b32 v40, s9, 5
14881 ; GFX10-NEXT:    v_writelane_b32 v40, s10, 6
14882 ; GFX10-NEXT:    v_writelane_b32 v40, s11, 7
14883 ; GFX10-NEXT:    v_writelane_b32 v40, s12, 8
14884 ; GFX10-NEXT:    v_writelane_b32 v40, s13, 9
14885 ; GFX10-NEXT:    v_writelane_b32 v40, s14, 10
14886 ; GFX10-NEXT:    v_writelane_b32 v40, s15, 11
14887 ; GFX10-NEXT:    v_writelane_b32 v40, s16, 12
14888 ; GFX10-NEXT:    v_writelane_b32 v40, s17, 13
14889 ; GFX10-NEXT:    v_writelane_b32 v40, s18, 14
14890 ; GFX10-NEXT:    v_writelane_b32 v40, s19, 15
14891 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
14892 ; GFX10-NEXT:    s_clause 0x1
14893 ; GFX10-NEXT:    s_load_dwordx16 s[36:51], s[34:35], 0x40
14894 ; GFX10-NEXT:    s_load_dwordx16 s[4:19], s[34:35], 0x0
14895 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v32i32_inreg@abs32@hi
14896 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v32i32_inreg@abs32@lo
14897 ; GFX10-NEXT:    v_writelane_b32 v40, s20, 16
14898 ; GFX10-NEXT:    v_writelane_b32 v40, s21, 17
14899 ; GFX10-NEXT:    v_writelane_b32 v40, s22, 18
14900 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
14901 ; GFX10-NEXT:    v_mov_b32_e32 v0, s46
14902 ; GFX10-NEXT:    v_writelane_b32 v40, s23, 19
14903 ; GFX10-NEXT:    v_mov_b32_e32 v1, s47
14904 ; GFX10-NEXT:    v_mov_b32_e32 v2, s48
14905 ; GFX10-NEXT:    v_mov_b32_e32 v3, s49
14906 ; GFX10-NEXT:    s_mov_b32 s20, s36
14907 ; GFX10-NEXT:    v_writelane_b32 v40, s24, 20
14908 ; GFX10-NEXT:    s_mov_b32 s21, s37
14909 ; GFX10-NEXT:    s_mov_b32 s22, s38
14910 ; GFX10-NEXT:    s_mov_b32 s23, s39
14911 ; GFX10-NEXT:    s_mov_b32 s24, s40
14912 ; GFX10-NEXT:    v_writelane_b32 v40, s25, 21
14913 ; GFX10-NEXT:    s_mov_b32 s25, s41
14914 ; GFX10-NEXT:    v_mov_b32_e32 v4, s50
14915 ; GFX10-NEXT:    v_mov_b32_e32 v5, s51
14916 ; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], s32
14917 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4
14918 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8
14919 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:12
14920 ; GFX10-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:16
14921 ; GFX10-NEXT:    buffer_store_dword v5, off, s[0:3], s32 offset:20
14922 ; GFX10-NEXT:    v_writelane_b32 v40, s26, 22
14923 ; GFX10-NEXT:    s_mov_b32 s26, s42
14924 ; GFX10-NEXT:    v_writelane_b32 v40, s27, 23
14925 ; GFX10-NEXT:    s_mov_b32 s27, s43
14926 ; GFX10-NEXT:    v_writelane_b32 v40, s28, 24
14927 ; GFX10-NEXT:    s_mov_b32 s28, s44
14928 ; GFX10-NEXT:    v_writelane_b32 v40, s29, 25
14929 ; GFX10-NEXT:    s_mov_b32 s29, s45
14930 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 26
14931 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 27
14932 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
14933 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 27
14934 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 26
14935 ; GFX10-NEXT:    v_readlane_b32 s29, v40, 25
14936 ; GFX10-NEXT:    v_readlane_b32 s28, v40, 24
14937 ; GFX10-NEXT:    v_readlane_b32 s27, v40, 23
14938 ; GFX10-NEXT:    v_readlane_b32 s26, v40, 22
14939 ; GFX10-NEXT:    v_readlane_b32 s25, v40, 21
14940 ; GFX10-NEXT:    v_readlane_b32 s24, v40, 20
14941 ; GFX10-NEXT:    v_readlane_b32 s23, v40, 19
14942 ; GFX10-NEXT:    v_readlane_b32 s22, v40, 18
14943 ; GFX10-NEXT:    v_readlane_b32 s21, v40, 17
14944 ; GFX10-NEXT:    v_readlane_b32 s20, v40, 16
14945 ; GFX10-NEXT:    v_readlane_b32 s19, v40, 15
14946 ; GFX10-NEXT:    v_readlane_b32 s18, v40, 14
14947 ; GFX10-NEXT:    v_readlane_b32 s17, v40, 13
14948 ; GFX10-NEXT:    v_readlane_b32 s16, v40, 12
14949 ; GFX10-NEXT:    v_readlane_b32 s15, v40, 11
14950 ; GFX10-NEXT:    v_readlane_b32 s14, v40, 10
14951 ; GFX10-NEXT:    v_readlane_b32 s13, v40, 9
14952 ; GFX10-NEXT:    v_readlane_b32 s12, v40, 8
14953 ; GFX10-NEXT:    v_readlane_b32 s11, v40, 7
14954 ; GFX10-NEXT:    v_readlane_b32 s10, v40, 6
14955 ; GFX10-NEXT:    v_readlane_b32 s9, v40, 5
14956 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
14957 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
14958 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
14959 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
14960 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
14961 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 28
14962 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
14963 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
14964 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
14965 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
14966 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
14967 ; GFX10-NEXT:    s_mov_b32 s33, s34
14968 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
14969 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
14971 ; GFX11-LABEL: test_call_external_void_func_v32i32_inreg:
14972 ; GFX11:       ; %bb.0:
14973 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14974 ; GFX11-NEXT:    s_mov_b32 s0, s33
14975 ; GFX11-NEXT:    s_mov_b32 s33, s32
14976 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
14977 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
14978 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
14979 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 28
14980 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
14981 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
14982 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
14983 ; GFX11-NEXT:    s_add_i32 s2, s32, 16
14984 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
14985 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
14986 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
14987 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
14988 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
14989 ; GFX11-NEXT:    v_writelane_b32 v40, s9, 5
14990 ; GFX11-NEXT:    v_writelane_b32 v40, s10, 6
14991 ; GFX11-NEXT:    v_writelane_b32 v40, s11, 7
14992 ; GFX11-NEXT:    v_writelane_b32 v40, s12, 8
14993 ; GFX11-NEXT:    v_writelane_b32 v40, s13, 9
14994 ; GFX11-NEXT:    v_writelane_b32 v40, s14, 10
14995 ; GFX11-NEXT:    v_writelane_b32 v40, s15, 11
14996 ; GFX11-NEXT:    v_writelane_b32 v40, s16, 12
14997 ; GFX11-NEXT:    v_writelane_b32 v40, s17, 13
14998 ; GFX11-NEXT:    v_writelane_b32 v40, s18, 14
14999 ; GFX11-NEXT:    v_writelane_b32 v40, s19, 15
15000 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
15001 ; GFX11-NEXT:    s_clause 0x1
15002 ; GFX11-NEXT:    s_load_b512 s[36:51], s[0:1], 0x40
15003 ; GFX11-NEXT:    s_load_b512 s[4:19], s[0:1], 0x0
15004 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v32i32_inreg@abs32@hi
15005 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v32i32_inreg@abs32@lo
15006 ; GFX11-NEXT:    v_writelane_b32 v40, s20, 16
15007 ; GFX11-NEXT:    v_writelane_b32 v40, s21, 17
15008 ; GFX11-NEXT:    v_writelane_b32 v40, s22, 18
15009 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
15010 ; GFX11-NEXT:    v_dual_mov_b32 v4, s50 :: v_dual_mov_b32 v5, s51
15011 ; GFX11-NEXT:    v_writelane_b32 v40, s23, 19
15012 ; GFX11-NEXT:    v_dual_mov_b32 v0, s46 :: v_dual_mov_b32 v1, s47
15013 ; GFX11-NEXT:    v_dual_mov_b32 v2, s48 :: v_dual_mov_b32 v3, s49
15014 ; GFX11-NEXT:    v_writelane_b32 v40, s24, 20
15015 ; GFX11-NEXT:    s_mov_b32 s20, s36
15016 ; GFX11-NEXT:    s_mov_b32 s21, s37
15017 ; GFX11-NEXT:    s_mov_b32 s22, s38
15018 ; GFX11-NEXT:    s_mov_b32 s23, s39
15019 ; GFX11-NEXT:    v_writelane_b32 v40, s25, 21
15020 ; GFX11-NEXT:    s_mov_b32 s24, s40
15021 ; GFX11-NEXT:    s_mov_b32 s25, s41
15022 ; GFX11-NEXT:    scratch_store_b64 off, v[4:5], s2
15023 ; GFX11-NEXT:    scratch_store_b128 off, v[0:3], s32
15024 ; GFX11-NEXT:    v_writelane_b32 v40, s26, 22
15025 ; GFX11-NEXT:    s_mov_b32 s26, s42
15026 ; GFX11-NEXT:    v_writelane_b32 v40, s27, 23
15027 ; GFX11-NEXT:    s_mov_b32 s27, s43
15028 ; GFX11-NEXT:    v_writelane_b32 v40, s28, 24
15029 ; GFX11-NEXT:    s_mov_b32 s28, s44
15030 ; GFX11-NEXT:    v_writelane_b32 v40, s29, 25
15031 ; GFX11-NEXT:    s_mov_b32 s29, s45
15032 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 26
15033 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 27
15034 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
15035 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
15036 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 27
15037 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 26
15038 ; GFX11-NEXT:    v_readlane_b32 s29, v40, 25
15039 ; GFX11-NEXT:    v_readlane_b32 s28, v40, 24
15040 ; GFX11-NEXT:    v_readlane_b32 s27, v40, 23
15041 ; GFX11-NEXT:    v_readlane_b32 s26, v40, 22
15042 ; GFX11-NEXT:    v_readlane_b32 s25, v40, 21
15043 ; GFX11-NEXT:    v_readlane_b32 s24, v40, 20
15044 ; GFX11-NEXT:    v_readlane_b32 s23, v40, 19
15045 ; GFX11-NEXT:    v_readlane_b32 s22, v40, 18
15046 ; GFX11-NEXT:    v_readlane_b32 s21, v40, 17
15047 ; GFX11-NEXT:    v_readlane_b32 s20, v40, 16
15048 ; GFX11-NEXT:    v_readlane_b32 s19, v40, 15
15049 ; GFX11-NEXT:    v_readlane_b32 s18, v40, 14
15050 ; GFX11-NEXT:    v_readlane_b32 s17, v40, 13
15051 ; GFX11-NEXT:    v_readlane_b32 s16, v40, 12
15052 ; GFX11-NEXT:    v_readlane_b32 s15, v40, 11
15053 ; GFX11-NEXT:    v_readlane_b32 s14, v40, 10
15054 ; GFX11-NEXT:    v_readlane_b32 s13, v40, 9
15055 ; GFX11-NEXT:    v_readlane_b32 s12, v40, 8
15056 ; GFX11-NEXT:    v_readlane_b32 s11, v40, 7
15057 ; GFX11-NEXT:    v_readlane_b32 s10, v40, 6
15058 ; GFX11-NEXT:    v_readlane_b32 s9, v40, 5
15059 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
15060 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
15061 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
15062 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
15063 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
15064 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 28
15065 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
15066 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
15067 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
15068 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
15069 ; GFX11-NEXT:    s_mov_b32 s33, s0
15070 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
15071 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
15073 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v32i32_inreg:
15074 ; GFX10-SCRATCH:       ; %bb.0:
15075 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15076 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
15077 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
15078 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
15079 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
15080 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
15081 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
15082 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 28
15083 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
15084 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
15085 ; GFX10-SCRATCH-NEXT:    s_add_i32 s2, s32, 16
15086 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
15087 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
15088 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
15089 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
15090 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
15091 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s9, 5
15092 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s10, 6
15093 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s11, 7
15094 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s12, 8
15095 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s13, 9
15096 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s14, 10
15097 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s15, 11
15098 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s16, 12
15099 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s17, 13
15100 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s18, 14
15101 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s19, 15
15102 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
15103 ; GFX10-SCRATCH-NEXT:    s_clause 0x1
15104 ; GFX10-SCRATCH-NEXT:    s_load_dwordx16 s[36:51], s[0:1], 0x40
15105 ; GFX10-SCRATCH-NEXT:    s_load_dwordx16 s[4:19], s[0:1], 0x0
15106 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v32i32_inreg@abs32@hi
15107 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v32i32_inreg@abs32@lo
15108 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s20, 16
15109 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s21, 17
15110 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s22, 18
15111 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
15112 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, s50
15113 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s23, 19
15114 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, s51
15115 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, s46
15116 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, s47
15117 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, s48
15118 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s24, 20
15119 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, s49
15120 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s20, s36
15121 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s21, s37
15122 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s22, s38
15123 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s25, 21
15124 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s23, s39
15125 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s24, s40
15126 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s25, s41
15127 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx2 off, v[4:5], s2
15128 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx4 off, v[0:3], s32
15129 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s26, 22
15130 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s26, s42
15131 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s27, 23
15132 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s27, s43
15133 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s28, 24
15134 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s28, s44
15135 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s29, 25
15136 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s29, s45
15137 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 26
15138 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 27
15139 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
15140 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 27
15141 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 26
15142 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s29, v40, 25
15143 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s28, v40, 24
15144 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s27, v40, 23
15145 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s26, v40, 22
15146 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s25, v40, 21
15147 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s24, v40, 20
15148 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s23, v40, 19
15149 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s22, v40, 18
15150 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s21, v40, 17
15151 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s20, v40, 16
15152 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s19, v40, 15
15153 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s18, v40, 14
15154 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s17, v40, 13
15155 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s16, v40, 12
15156 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s15, v40, 11
15157 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s14, v40, 10
15158 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s13, v40, 9
15159 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s12, v40, 8
15160 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s11, v40, 7
15161 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s10, v40, 6
15162 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s9, v40, 5
15163 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
15164 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
15165 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
15166 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
15167 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
15168 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 28
15169 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
15170 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
15171 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
15172 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
15173 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
15174 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
15175 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
15176 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
15177   %ptr = load ptr addrspace(4), ptr addrspace(4) undef
15178   %val = load <32 x i32>, ptr addrspace(4) %ptr
15179   call amdgpu_gfx void @external_void_func_v32i32_inreg(<32 x i32> inreg %val)
15180   ret void
15183 define amdgpu_gfx void @test_call_external_void_func_v32i32_i32_inreg(i32) #0 {
15184 ; GFX9-LABEL: test_call_external_void_func_v32i32_i32_inreg:
15185 ; GFX9:       ; %bb.0:
15186 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15187 ; GFX9-NEXT:    s_mov_b32 s34, s33
15188 ; GFX9-NEXT:    s_mov_b32 s33, s32
15189 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
15190 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
15191 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
15192 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 28
15193 ; GFX9-NEXT:    v_writelane_b32 v40, s4, 0
15194 ; GFX9-NEXT:    v_writelane_b32 v40, s5, 1
15195 ; GFX9-NEXT:    v_writelane_b32 v40, s6, 2
15196 ; GFX9-NEXT:    v_writelane_b32 v40, s7, 3
15197 ; GFX9-NEXT:    v_writelane_b32 v40, s8, 4
15198 ; GFX9-NEXT:    v_writelane_b32 v40, s9, 5
15199 ; GFX9-NEXT:    v_writelane_b32 v40, s10, 6
15200 ; GFX9-NEXT:    v_writelane_b32 v40, s11, 7
15201 ; GFX9-NEXT:    v_writelane_b32 v40, s12, 8
15202 ; GFX9-NEXT:    v_writelane_b32 v40, s13, 9
15203 ; GFX9-NEXT:    v_writelane_b32 v40, s14, 10
15204 ; GFX9-NEXT:    v_writelane_b32 v40, s15, 11
15205 ; GFX9-NEXT:    v_writelane_b32 v40, s16, 12
15206 ; GFX9-NEXT:    v_writelane_b32 v40, s17, 13
15207 ; GFX9-NEXT:    v_writelane_b32 v40, s18, 14
15208 ; GFX9-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
15209 ; GFX9-NEXT:    v_writelane_b32 v40, s19, 15
15210 ; GFX9-NEXT:    v_writelane_b32 v40, s20, 16
15211 ; GFX9-NEXT:    v_writelane_b32 v40, s21, 17
15212 ; GFX9-NEXT:    v_writelane_b32 v40, s22, 18
15213 ; GFX9-NEXT:    v_writelane_b32 v40, s23, 19
15214 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
15215 ; GFX9-NEXT:    s_load_dword s52, s[34:35], 0x0
15216 ; GFX9-NEXT:    ; kill: killed $sgpr34_sgpr35
15217 ; GFX9-NEXT:    ; kill: killed $sgpr34_sgpr35
15218 ; GFX9-NEXT:    s_load_dwordx16 s[36:51], s[34:35], 0x40
15219 ; GFX9-NEXT:    s_load_dwordx16 s[4:19], s[34:35], 0x0
15220 ; GFX9-NEXT:    v_writelane_b32 v40, s24, 20
15221 ; GFX9-NEXT:    v_writelane_b32 v40, s25, 21
15222 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
15223 ; GFX9-NEXT:    v_writelane_b32 v40, s26, 22
15224 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
15225 ; GFX9-NEXT:    v_mov_b32_e32 v0, s52
15226 ; GFX9-NEXT:    v_writelane_b32 v40, s27, 23
15227 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:24
15228 ; GFX9-NEXT:    v_mov_b32_e32 v0, s46
15229 ; GFX9-NEXT:    v_writelane_b32 v40, s28, 24
15230 ; GFX9-NEXT:    v_mov_b32_e32 v1, s47
15231 ; GFX9-NEXT:    v_mov_b32_e32 v2, s48
15232 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32
15233 ; GFX9-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4
15234 ; GFX9-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8
15235 ; GFX9-NEXT:    v_mov_b32_e32 v0, s49
15236 ; GFX9-NEXT:    v_writelane_b32 v40, s29, 25
15237 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:12
15238 ; GFX9-NEXT:    v_mov_b32_e32 v0, s50
15239 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 26
15240 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:16
15241 ; GFX9-NEXT:    v_mov_b32_e32 v0, s51
15242 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v32i32_i32_inreg@abs32@hi
15243 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v32i32_i32_inreg@abs32@lo
15244 ; GFX9-NEXT:    s_mov_b32 s20, s36
15245 ; GFX9-NEXT:    s_mov_b32 s21, s37
15246 ; GFX9-NEXT:    s_mov_b32 s22, s38
15247 ; GFX9-NEXT:    s_mov_b32 s23, s39
15248 ; GFX9-NEXT:    s_mov_b32 s24, s40
15249 ; GFX9-NEXT:    s_mov_b32 s25, s41
15250 ; GFX9-NEXT:    s_mov_b32 s26, s42
15251 ; GFX9-NEXT:    s_mov_b32 s27, s43
15252 ; GFX9-NEXT:    s_mov_b32 s28, s44
15253 ; GFX9-NEXT:    s_mov_b32 s29, s45
15254 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 27
15255 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:20
15256 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
15257 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 27
15258 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 26
15259 ; GFX9-NEXT:    v_readlane_b32 s29, v40, 25
15260 ; GFX9-NEXT:    v_readlane_b32 s28, v40, 24
15261 ; GFX9-NEXT:    v_readlane_b32 s27, v40, 23
15262 ; GFX9-NEXT:    v_readlane_b32 s26, v40, 22
15263 ; GFX9-NEXT:    v_readlane_b32 s25, v40, 21
15264 ; GFX9-NEXT:    v_readlane_b32 s24, v40, 20
15265 ; GFX9-NEXT:    v_readlane_b32 s23, v40, 19
15266 ; GFX9-NEXT:    v_readlane_b32 s22, v40, 18
15267 ; GFX9-NEXT:    v_readlane_b32 s21, v40, 17
15268 ; GFX9-NEXT:    v_readlane_b32 s20, v40, 16
15269 ; GFX9-NEXT:    v_readlane_b32 s19, v40, 15
15270 ; GFX9-NEXT:    v_readlane_b32 s18, v40, 14
15271 ; GFX9-NEXT:    v_readlane_b32 s17, v40, 13
15272 ; GFX9-NEXT:    v_readlane_b32 s16, v40, 12
15273 ; GFX9-NEXT:    v_readlane_b32 s15, v40, 11
15274 ; GFX9-NEXT:    v_readlane_b32 s14, v40, 10
15275 ; GFX9-NEXT:    v_readlane_b32 s13, v40, 9
15276 ; GFX9-NEXT:    v_readlane_b32 s12, v40, 8
15277 ; GFX9-NEXT:    v_readlane_b32 s11, v40, 7
15278 ; GFX9-NEXT:    v_readlane_b32 s10, v40, 6
15279 ; GFX9-NEXT:    v_readlane_b32 s9, v40, 5
15280 ; GFX9-NEXT:    v_readlane_b32 s8, v40, 4
15281 ; GFX9-NEXT:    v_readlane_b32 s7, v40, 3
15282 ; GFX9-NEXT:    v_readlane_b32 s6, v40, 2
15283 ; GFX9-NEXT:    v_readlane_b32 s5, v40, 1
15284 ; GFX9-NEXT:    v_readlane_b32 s4, v40, 0
15285 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 28
15286 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
15287 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
15288 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
15289 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
15290 ; GFX9-NEXT:    s_mov_b32 s33, s34
15291 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
15292 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
15294 ; GFX10-LABEL: test_call_external_void_func_v32i32_i32_inreg:
15295 ; GFX10:       ; %bb.0:
15296 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15297 ; GFX10-NEXT:    s_mov_b32 s34, s33
15298 ; GFX10-NEXT:    s_mov_b32 s33, s32
15299 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
15300 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
15301 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
15302 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
15303 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 28
15304 ; GFX10-NEXT:    s_load_dwordx2 s[34:35], s[34:35], 0x0
15305 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
15306 ; GFX10-NEXT:    v_writelane_b32 v40, s4, 0
15307 ; GFX10-NEXT:    v_writelane_b32 v40, s5, 1
15308 ; GFX10-NEXT:    v_writelane_b32 v40, s6, 2
15309 ; GFX10-NEXT:    v_writelane_b32 v40, s7, 3
15310 ; GFX10-NEXT:    v_writelane_b32 v40, s8, 4
15311 ; GFX10-NEXT:    v_writelane_b32 v40, s9, 5
15312 ; GFX10-NEXT:    v_writelane_b32 v40, s10, 6
15313 ; GFX10-NEXT:    v_writelane_b32 v40, s11, 7
15314 ; GFX10-NEXT:    v_writelane_b32 v40, s12, 8
15315 ; GFX10-NEXT:    v_writelane_b32 v40, s13, 9
15316 ; GFX10-NEXT:    v_writelane_b32 v40, s14, 10
15317 ; GFX10-NEXT:    v_writelane_b32 v40, s15, 11
15318 ; GFX10-NEXT:    v_writelane_b32 v40, s16, 12
15319 ; GFX10-NEXT:    v_writelane_b32 v40, s17, 13
15320 ; GFX10-NEXT:    v_writelane_b32 v40, s18, 14
15321 ; GFX10-NEXT:    v_writelane_b32 v40, s19, 15
15322 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
15323 ; GFX10-NEXT:    s_clause 0x2
15324 ; GFX10-NEXT:    s_load_dword s52, s[34:35], 0x0
15325 ; GFX10-NEXT:    ; meta instruction
15326 ; GFX10-NEXT:    ; meta instruction
15327 ; GFX10-NEXT:    s_load_dwordx16 s[36:51], s[34:35], 0x40
15328 ; GFX10-NEXT:    s_load_dwordx16 s[4:19], s[34:35], 0x0
15329 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v32i32_i32_inreg@abs32@hi
15330 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v32i32_i32_inreg@abs32@lo
15331 ; GFX10-NEXT:    v_writelane_b32 v40, s20, 16
15332 ; GFX10-NEXT:    v_writelane_b32 v40, s21, 17
15333 ; GFX10-NEXT:    v_writelane_b32 v40, s22, 18
15334 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
15335 ; GFX10-NEXT:    v_mov_b32_e32 v0, s52
15336 ; GFX10-NEXT:    v_mov_b32_e32 v1, s47
15337 ; GFX10-NEXT:    v_writelane_b32 v40, s23, 19
15338 ; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:24
15339 ; GFX10-NEXT:    v_mov_b32_e32 v0, s46
15340 ; GFX10-NEXT:    v_mov_b32_e32 v2, s48
15341 ; GFX10-NEXT:    v_mov_b32_e32 v3, s49
15342 ; GFX10-NEXT:    v_writelane_b32 v40, s24, 20
15343 ; GFX10-NEXT:    s_mov_b32 s20, s36
15344 ; GFX10-NEXT:    s_mov_b32 s21, s37
15345 ; GFX10-NEXT:    s_mov_b32 s22, s38
15346 ; GFX10-NEXT:    s_mov_b32 s23, s39
15347 ; GFX10-NEXT:    v_writelane_b32 v40, s25, 21
15348 ; GFX10-NEXT:    s_mov_b32 s24, s40
15349 ; GFX10-NEXT:    s_mov_b32 s25, s41
15350 ; GFX10-NEXT:    v_mov_b32_e32 v4, s50
15351 ; GFX10-NEXT:    v_mov_b32_e32 v5, s51
15352 ; GFX10-NEXT:    v_writelane_b32 v40, s26, 22
15353 ; GFX10-NEXT:    s_mov_b32 s26, s42
15354 ; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], s32
15355 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4
15356 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8
15357 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:12
15358 ; GFX10-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:16
15359 ; GFX10-NEXT:    buffer_store_dword v5, off, s[0:3], s32 offset:20
15360 ; GFX10-NEXT:    v_writelane_b32 v40, s27, 23
15361 ; GFX10-NEXT:    s_mov_b32 s27, s43
15362 ; GFX10-NEXT:    v_writelane_b32 v40, s28, 24
15363 ; GFX10-NEXT:    s_mov_b32 s28, s44
15364 ; GFX10-NEXT:    v_writelane_b32 v40, s29, 25
15365 ; GFX10-NEXT:    s_mov_b32 s29, s45
15366 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 26
15367 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 27
15368 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
15369 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 27
15370 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 26
15371 ; GFX10-NEXT:    v_readlane_b32 s29, v40, 25
15372 ; GFX10-NEXT:    v_readlane_b32 s28, v40, 24
15373 ; GFX10-NEXT:    v_readlane_b32 s27, v40, 23
15374 ; GFX10-NEXT:    v_readlane_b32 s26, v40, 22
15375 ; GFX10-NEXT:    v_readlane_b32 s25, v40, 21
15376 ; GFX10-NEXT:    v_readlane_b32 s24, v40, 20
15377 ; GFX10-NEXT:    v_readlane_b32 s23, v40, 19
15378 ; GFX10-NEXT:    v_readlane_b32 s22, v40, 18
15379 ; GFX10-NEXT:    v_readlane_b32 s21, v40, 17
15380 ; GFX10-NEXT:    v_readlane_b32 s20, v40, 16
15381 ; GFX10-NEXT:    v_readlane_b32 s19, v40, 15
15382 ; GFX10-NEXT:    v_readlane_b32 s18, v40, 14
15383 ; GFX10-NEXT:    v_readlane_b32 s17, v40, 13
15384 ; GFX10-NEXT:    v_readlane_b32 s16, v40, 12
15385 ; GFX10-NEXT:    v_readlane_b32 s15, v40, 11
15386 ; GFX10-NEXT:    v_readlane_b32 s14, v40, 10
15387 ; GFX10-NEXT:    v_readlane_b32 s13, v40, 9
15388 ; GFX10-NEXT:    v_readlane_b32 s12, v40, 8
15389 ; GFX10-NEXT:    v_readlane_b32 s11, v40, 7
15390 ; GFX10-NEXT:    v_readlane_b32 s10, v40, 6
15391 ; GFX10-NEXT:    v_readlane_b32 s9, v40, 5
15392 ; GFX10-NEXT:    v_readlane_b32 s8, v40, 4
15393 ; GFX10-NEXT:    v_readlane_b32 s7, v40, 3
15394 ; GFX10-NEXT:    v_readlane_b32 s6, v40, 2
15395 ; GFX10-NEXT:    v_readlane_b32 s5, v40, 1
15396 ; GFX10-NEXT:    v_readlane_b32 s4, v40, 0
15397 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 28
15398 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
15399 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
15400 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
15401 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
15402 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
15403 ; GFX10-NEXT:    s_mov_b32 s33, s34
15404 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
15405 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
15407 ; GFX11-LABEL: test_call_external_void_func_v32i32_i32_inreg:
15408 ; GFX11:       ; %bb.0:
15409 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15410 ; GFX11-NEXT:    s_mov_b32 s0, s33
15411 ; GFX11-NEXT:    s_mov_b32 s33, s32
15412 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
15413 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
15414 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
15415 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 28
15416 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
15417 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
15418 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
15419 ; GFX11-NEXT:    s_add_i32 s3, s32, 16
15420 ; GFX11-NEXT:    v_writelane_b32 v40, s4, 0
15421 ; GFX11-NEXT:    v_writelane_b32 v40, s5, 1
15422 ; GFX11-NEXT:    v_writelane_b32 v40, s6, 2
15423 ; GFX11-NEXT:    v_writelane_b32 v40, s7, 3
15424 ; GFX11-NEXT:    v_writelane_b32 v40, s8, 4
15425 ; GFX11-NEXT:    v_writelane_b32 v40, s9, 5
15426 ; GFX11-NEXT:    v_writelane_b32 v40, s10, 6
15427 ; GFX11-NEXT:    v_writelane_b32 v40, s11, 7
15428 ; GFX11-NEXT:    v_writelane_b32 v40, s12, 8
15429 ; GFX11-NEXT:    v_writelane_b32 v40, s13, 9
15430 ; GFX11-NEXT:    v_writelane_b32 v40, s14, 10
15431 ; GFX11-NEXT:    v_writelane_b32 v40, s15, 11
15432 ; GFX11-NEXT:    v_writelane_b32 v40, s16, 12
15433 ; GFX11-NEXT:    v_writelane_b32 v40, s17, 13
15434 ; GFX11-NEXT:    v_writelane_b32 v40, s18, 14
15435 ; GFX11-NEXT:    v_writelane_b32 v40, s19, 15
15436 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
15437 ; GFX11-NEXT:    s_clause 0x2
15438 ; GFX11-NEXT:    s_load_b32 s2, s[0:1], 0x0
15439 ; GFX11-NEXT:    s_load_b512 s[36:51], s[0:1], 0x40
15440 ; GFX11-NEXT:    s_load_b512 s[4:19], s[0:1], 0x0
15441 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v32i32_i32_inreg@abs32@hi
15442 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v32i32_i32_inreg@abs32@lo
15443 ; GFX11-NEXT:    v_writelane_b32 v40, s20, 16
15444 ; GFX11-NEXT:    v_writelane_b32 v40, s21, 17
15445 ; GFX11-NEXT:    v_writelane_b32 v40, s22, 18
15446 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
15447 ; GFX11-NEXT:    v_dual_mov_b32 v6, s2 :: v_dual_mov_b32 v5, s51
15448 ; GFX11-NEXT:    v_writelane_b32 v40, s23, 19
15449 ; GFX11-NEXT:    v_dual_mov_b32 v4, s50 :: v_dual_mov_b32 v1, s47
15450 ; GFX11-NEXT:    v_dual_mov_b32 v0, s46 :: v_dual_mov_b32 v3, s49
15451 ; GFX11-NEXT:    v_writelane_b32 v40, s24, 20
15452 ; GFX11-NEXT:    v_mov_b32_e32 v2, s48
15453 ; GFX11-NEXT:    s_add_i32 s2, s32, 24
15454 ; GFX11-NEXT:    s_mov_b32 s20, s36
15455 ; GFX11-NEXT:    s_mov_b32 s21, s37
15456 ; GFX11-NEXT:    v_writelane_b32 v40, s25, 21
15457 ; GFX11-NEXT:    s_mov_b32 s22, s38
15458 ; GFX11-NEXT:    s_mov_b32 s23, s39
15459 ; GFX11-NEXT:    s_mov_b32 s24, s40
15460 ; GFX11-NEXT:    s_mov_b32 s25, s41
15461 ; GFX11-NEXT:    v_writelane_b32 v40, s26, 22
15462 ; GFX11-NEXT:    s_mov_b32 s26, s42
15463 ; GFX11-NEXT:    scratch_store_b32 off, v6, s2
15464 ; GFX11-NEXT:    scratch_store_b64 off, v[4:5], s3
15465 ; GFX11-NEXT:    scratch_store_b128 off, v[0:3], s32
15466 ; GFX11-NEXT:    v_writelane_b32 v40, s27, 23
15467 ; GFX11-NEXT:    s_mov_b32 s27, s43
15468 ; GFX11-NEXT:    v_writelane_b32 v40, s28, 24
15469 ; GFX11-NEXT:    s_mov_b32 s28, s44
15470 ; GFX11-NEXT:    v_writelane_b32 v40, s29, 25
15471 ; GFX11-NEXT:    s_mov_b32 s29, s45
15472 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 26
15473 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 27
15474 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
15475 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
15476 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 27
15477 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 26
15478 ; GFX11-NEXT:    v_readlane_b32 s29, v40, 25
15479 ; GFX11-NEXT:    v_readlane_b32 s28, v40, 24
15480 ; GFX11-NEXT:    v_readlane_b32 s27, v40, 23
15481 ; GFX11-NEXT:    v_readlane_b32 s26, v40, 22
15482 ; GFX11-NEXT:    v_readlane_b32 s25, v40, 21
15483 ; GFX11-NEXT:    v_readlane_b32 s24, v40, 20
15484 ; GFX11-NEXT:    v_readlane_b32 s23, v40, 19
15485 ; GFX11-NEXT:    v_readlane_b32 s22, v40, 18
15486 ; GFX11-NEXT:    v_readlane_b32 s21, v40, 17
15487 ; GFX11-NEXT:    v_readlane_b32 s20, v40, 16
15488 ; GFX11-NEXT:    v_readlane_b32 s19, v40, 15
15489 ; GFX11-NEXT:    v_readlane_b32 s18, v40, 14
15490 ; GFX11-NEXT:    v_readlane_b32 s17, v40, 13
15491 ; GFX11-NEXT:    v_readlane_b32 s16, v40, 12
15492 ; GFX11-NEXT:    v_readlane_b32 s15, v40, 11
15493 ; GFX11-NEXT:    v_readlane_b32 s14, v40, 10
15494 ; GFX11-NEXT:    v_readlane_b32 s13, v40, 9
15495 ; GFX11-NEXT:    v_readlane_b32 s12, v40, 8
15496 ; GFX11-NEXT:    v_readlane_b32 s11, v40, 7
15497 ; GFX11-NEXT:    v_readlane_b32 s10, v40, 6
15498 ; GFX11-NEXT:    v_readlane_b32 s9, v40, 5
15499 ; GFX11-NEXT:    v_readlane_b32 s8, v40, 4
15500 ; GFX11-NEXT:    v_readlane_b32 s7, v40, 3
15501 ; GFX11-NEXT:    v_readlane_b32 s6, v40, 2
15502 ; GFX11-NEXT:    v_readlane_b32 s5, v40, 1
15503 ; GFX11-NEXT:    v_readlane_b32 s4, v40, 0
15504 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 28
15505 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
15506 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
15507 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
15508 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
15509 ; GFX11-NEXT:    s_mov_b32 s33, s0
15510 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
15511 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
15513 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v32i32_i32_inreg:
15514 ; GFX10-SCRATCH:       ; %bb.0:
15515 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15516 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
15517 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
15518 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
15519 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
15520 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
15521 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
15522 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 28
15523 ; GFX10-SCRATCH-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x0
15524 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
15525 ; GFX10-SCRATCH-NEXT:    s_add_i32 s3, s32, 16
15526 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s4, 0
15527 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s5, 1
15528 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s6, 2
15529 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s7, 3
15530 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s8, 4
15531 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s9, 5
15532 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s10, 6
15533 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s11, 7
15534 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s12, 8
15535 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s13, 9
15536 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s14, 10
15537 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s15, 11
15538 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s16, 12
15539 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s17, 13
15540 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s18, 14
15541 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s19, 15
15542 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
15543 ; GFX10-SCRATCH-NEXT:    s_clause 0x2
15544 ; GFX10-SCRATCH-NEXT:    s_load_dword s2, s[0:1], 0x0
15545 ; GFX10-SCRATCH-NEXT:    ; meta instruction
15546 ; GFX10-SCRATCH-NEXT:    ; meta instruction
15547 ; GFX10-SCRATCH-NEXT:    s_load_dwordx16 s[36:51], s[0:1], 0x40
15548 ; GFX10-SCRATCH-NEXT:    s_load_dwordx16 s[4:19], s[0:1], 0x0
15549 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v32i32_i32_inreg@abs32@hi
15550 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v32i32_i32_inreg@abs32@lo
15551 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s20, 16
15552 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s21, 17
15553 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s22, 18
15554 ; GFX10-SCRATCH-NEXT:    s_waitcnt lgkmcnt(0)
15555 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v6, s2
15556 ; GFX10-SCRATCH-NEXT:    s_add_i32 s2, s32, 24
15557 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, s50
15558 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s23, 19
15559 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, s51
15560 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, s46
15561 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, s47
15562 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, s48
15563 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s24, 20
15564 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, s49
15565 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s20, s36
15566 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s21, s37
15567 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s22, s38
15568 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s25, 21
15569 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s23, s39
15570 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s24, s40
15571 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s25, s41
15572 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v6, s2
15573 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx2 off, v[4:5], s3
15574 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx4 off, v[0:3], s32
15575 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s26, 22
15576 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s26, s42
15577 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s27, 23
15578 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s27, s43
15579 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s28, 24
15580 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s28, s44
15581 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s29, 25
15582 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s29, s45
15583 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 26
15584 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 27
15585 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
15586 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 27
15587 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 26
15588 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s29, v40, 25
15589 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s28, v40, 24
15590 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s27, v40, 23
15591 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s26, v40, 22
15592 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s25, v40, 21
15593 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s24, v40, 20
15594 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s23, v40, 19
15595 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s22, v40, 18
15596 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s21, v40, 17
15597 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s20, v40, 16
15598 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s19, v40, 15
15599 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s18, v40, 14
15600 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s17, v40, 13
15601 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s16, v40, 12
15602 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s15, v40, 11
15603 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s14, v40, 10
15604 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s13, v40, 9
15605 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s12, v40, 8
15606 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s11, v40, 7
15607 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s10, v40, 6
15608 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s9, v40, 5
15609 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s8, v40, 4
15610 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s7, v40, 3
15611 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s6, v40, 2
15612 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s5, v40, 1
15613 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s4, v40, 0
15614 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 28
15615 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
15616 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
15617 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
15618 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
15619 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
15620 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
15621 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
15622 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
15623   %ptr0 = load ptr addrspace(4), ptr addrspace(4) undef
15624   %val0 = load <32 x i32>, ptr addrspace(4) %ptr0
15625   %val1 = load i32, ptr addrspace(4) undef
15626   call amdgpu_gfx void @external_void_func_v32i32_i32_inreg(<32 x i32> inreg %val0, i32 inreg %val1)
15627   ret void
15630 define amdgpu_gfx void @stack_passed_arg_alignment_v32i32_f64(<32 x i32> %val, double %tmp) #0 {
15631 ; GFX9-LABEL: stack_passed_arg_alignment_v32i32_f64:
15632 ; GFX9:       ; %bb.0: ; %entry
15633 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15634 ; GFX9-NEXT:    s_mov_b32 s34, s33
15635 ; GFX9-NEXT:    s_mov_b32 s33, s32
15636 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
15637 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
15638 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
15639 ; GFX9-NEXT:    buffer_load_dword v32, off, s[0:3], s33
15640 ; GFX9-NEXT:    buffer_load_dword v33, off, s[0:3], s33 offset:4
15641 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
15642 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
15643 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
15644 ; GFX9-NEXT:    s_mov_b32 s35, stack_passed_f64_arg@abs32@hi
15645 ; GFX9-NEXT:    s_mov_b32 s34, stack_passed_f64_arg@abs32@lo
15646 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
15647 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
15648 ; GFX9-NEXT:    buffer_store_dword v32, off, s[0:3], s32
15649 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
15650 ; GFX9-NEXT:    buffer_store_dword v33, off, s[0:3], s32 offset:4
15651 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
15652 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
15653 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
15654 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
15655 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
15656 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
15657 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
15658 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
15659 ; GFX9-NEXT:    s_mov_b32 s33, s34
15660 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
15661 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
15663 ; GFX10-LABEL: stack_passed_arg_alignment_v32i32_f64:
15664 ; GFX10:       ; %bb.0: ; %entry
15665 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15666 ; GFX10-NEXT:    s_mov_b32 s34, s33
15667 ; GFX10-NEXT:    s_mov_b32 s33, s32
15668 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
15669 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
15670 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
15671 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
15672 ; GFX10-NEXT:    s_clause 0x1
15673 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s33
15674 ; GFX10-NEXT:    buffer_load_dword v33, off, s[0:3], s33 offset:4
15675 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
15676 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
15677 ; GFX10-NEXT:    s_mov_b32 s35, stack_passed_f64_arg@abs32@hi
15678 ; GFX10-NEXT:    s_mov_b32 s34, stack_passed_f64_arg@abs32@lo
15679 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
15680 ; GFX10-NEXT:    buffer_store_dword v32, off, s[0:3], s32
15681 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
15682 ; GFX10-NEXT:    buffer_store_dword v33, off, s[0:3], s32 offset:4
15683 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
15684 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
15685 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
15686 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
15687 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
15688 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
15689 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
15690 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
15691 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
15692 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
15693 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
15694 ; GFX10-NEXT:    s_mov_b32 s33, s34
15695 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
15696 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
15698 ; GFX11-LABEL: stack_passed_arg_alignment_v32i32_f64:
15699 ; GFX11:       ; %bb.0: ; %entry
15700 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15701 ; GFX11-NEXT:    s_mov_b32 s0, s33
15702 ; GFX11-NEXT:    s_mov_b32 s33, s32
15703 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
15704 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 offset:8 ; 4-byte Folded Spill
15705 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
15706 ; GFX11-NEXT:    scratch_load_b64 v[32:33], off, s33
15707 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
15708 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
15709 ; GFX11-NEXT:    s_mov_b32 s1, stack_passed_f64_arg@abs32@hi
15710 ; GFX11-NEXT:    s_mov_b32 s0, stack_passed_f64_arg@abs32@lo
15711 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
15712 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
15713 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
15714 ; GFX11-NEXT:    scratch_store_b64 off, v[32:33], s32
15715 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
15716 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
15717 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
15718 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
15719 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
15720 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 offset:8 ; 4-byte Folded Reload
15721 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
15722 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
15723 ; GFX11-NEXT:    s_mov_b32 s33, s0
15724 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
15725 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
15727 ; GFX10-SCRATCH-LABEL: stack_passed_arg_alignment_v32i32_f64:
15728 ; GFX10-SCRATCH:       ; %bb.0: ; %entry
15729 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15730 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
15731 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
15732 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
15733 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 offset:8 ; 4-byte Folded Spill
15734 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
15735 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
15736 ; GFX10-SCRATCH-NEXT:    scratch_load_dwordx2 v[32:33], off, s33
15737 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
15738 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
15739 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, stack_passed_f64_arg@abs32@hi
15740 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, stack_passed_f64_arg@abs32@lo
15741 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
15742 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
15743 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
15744 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx2 off, v[32:33], s32
15745 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
15746 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
15747 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
15748 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
15749 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
15750 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 offset:8 ; 4-byte Folded Reload
15751 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
15752 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
15753 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
15754 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
15755 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
15756 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
15757 entry:
15758   call amdgpu_gfx void @stack_passed_f64_arg(<32 x i32> %val, double %tmp)
15759   ret void
15762 define amdgpu_gfx void @stack_12xv3i32() #0 {
15763 ; GFX9-LABEL: stack_12xv3i32:
15764 ; GFX9:       ; %bb.0: ; %entry
15765 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15766 ; GFX9-NEXT:    s_mov_b32 s34, s33
15767 ; GFX9-NEXT:    s_mov_b32 s33, s32
15768 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
15769 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
15770 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
15771 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
15772 ; GFX9-NEXT:    v_mov_b32_e32 v0, 12
15773 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32
15774 ; GFX9-NEXT:    v_mov_b32_e32 v0, 13
15775 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:4
15776 ; GFX9-NEXT:    v_mov_b32_e32 v0, 14
15777 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
15778 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:8
15779 ; GFX9-NEXT:    v_mov_b32_e32 v0, 15
15780 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
15781 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:12
15782 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_12xv3i32@abs32@hi
15783 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_12xv3i32@abs32@lo
15784 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
15785 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
15786 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
15787 ; GFX9-NEXT:    v_mov_b32_e32 v3, 1
15788 ; GFX9-NEXT:    v_mov_b32_e32 v4, 1
15789 ; GFX9-NEXT:    v_mov_b32_e32 v5, 1
15790 ; GFX9-NEXT:    v_mov_b32_e32 v6, 2
15791 ; GFX9-NEXT:    v_mov_b32_e32 v7, 2
15792 ; GFX9-NEXT:    v_mov_b32_e32 v8, 2
15793 ; GFX9-NEXT:    v_mov_b32_e32 v9, 3
15794 ; GFX9-NEXT:    v_mov_b32_e32 v10, 3
15795 ; GFX9-NEXT:    v_mov_b32_e32 v11, 3
15796 ; GFX9-NEXT:    v_mov_b32_e32 v12, 4
15797 ; GFX9-NEXT:    v_mov_b32_e32 v13, 4
15798 ; GFX9-NEXT:    v_mov_b32_e32 v14, 4
15799 ; GFX9-NEXT:    v_mov_b32_e32 v15, 5
15800 ; GFX9-NEXT:    v_mov_b32_e32 v16, 5
15801 ; GFX9-NEXT:    v_mov_b32_e32 v17, 5
15802 ; GFX9-NEXT:    v_mov_b32_e32 v18, 6
15803 ; GFX9-NEXT:    v_mov_b32_e32 v19, 6
15804 ; GFX9-NEXT:    v_mov_b32_e32 v20, 6
15805 ; GFX9-NEXT:    v_mov_b32_e32 v21, 7
15806 ; GFX9-NEXT:    v_mov_b32_e32 v22, 7
15807 ; GFX9-NEXT:    v_mov_b32_e32 v23, 7
15808 ; GFX9-NEXT:    v_mov_b32_e32 v24, 8
15809 ; GFX9-NEXT:    v_mov_b32_e32 v25, 8
15810 ; GFX9-NEXT:    v_mov_b32_e32 v26, 8
15811 ; GFX9-NEXT:    v_mov_b32_e32 v27, 9
15812 ; GFX9-NEXT:    v_mov_b32_e32 v28, 9
15813 ; GFX9-NEXT:    v_mov_b32_e32 v29, 9
15814 ; GFX9-NEXT:    v_mov_b32_e32 v30, 10
15815 ; GFX9-NEXT:    v_mov_b32_e32 v31, 11
15816 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
15817 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
15818 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
15819 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
15820 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
15821 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
15822 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
15823 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
15824 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
15825 ; GFX9-NEXT:    s_mov_b32 s33, s34
15826 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
15827 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
15829 ; GFX10-LABEL: stack_12xv3i32:
15830 ; GFX10:       ; %bb.0: ; %entry
15831 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15832 ; GFX10-NEXT:    s_mov_b32 s34, s33
15833 ; GFX10-NEXT:    s_mov_b32 s33, s32
15834 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
15835 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
15836 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
15837 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
15838 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
15839 ; GFX10-NEXT:    v_mov_b32_e32 v0, 12
15840 ; GFX10-NEXT:    v_mov_b32_e32 v1, 13
15841 ; GFX10-NEXT:    v_mov_b32_e32 v2, 14
15842 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
15843 ; GFX10-NEXT:    v_mov_b32_e32 v3, 15
15844 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
15845 ; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], s32
15846 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4
15847 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8
15848 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:12
15849 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
15850 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
15851 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
15852 ; GFX10-NEXT:    v_mov_b32_e32 v3, 1
15853 ; GFX10-NEXT:    v_mov_b32_e32 v4, 1
15854 ; GFX10-NEXT:    v_mov_b32_e32 v5, 1
15855 ; GFX10-NEXT:    v_mov_b32_e32 v6, 2
15856 ; GFX10-NEXT:    v_mov_b32_e32 v7, 2
15857 ; GFX10-NEXT:    v_mov_b32_e32 v8, 2
15858 ; GFX10-NEXT:    v_mov_b32_e32 v9, 3
15859 ; GFX10-NEXT:    v_mov_b32_e32 v10, 3
15860 ; GFX10-NEXT:    v_mov_b32_e32 v11, 3
15861 ; GFX10-NEXT:    v_mov_b32_e32 v12, 4
15862 ; GFX10-NEXT:    v_mov_b32_e32 v13, 4
15863 ; GFX10-NEXT:    v_mov_b32_e32 v14, 4
15864 ; GFX10-NEXT:    v_mov_b32_e32 v15, 5
15865 ; GFX10-NEXT:    v_mov_b32_e32 v16, 5
15866 ; GFX10-NEXT:    v_mov_b32_e32 v17, 5
15867 ; GFX10-NEXT:    v_mov_b32_e32 v18, 6
15868 ; GFX10-NEXT:    v_mov_b32_e32 v19, 6
15869 ; GFX10-NEXT:    v_mov_b32_e32 v20, 6
15870 ; GFX10-NEXT:    v_mov_b32_e32 v21, 7
15871 ; GFX10-NEXT:    v_mov_b32_e32 v22, 7
15872 ; GFX10-NEXT:    v_mov_b32_e32 v23, 7
15873 ; GFX10-NEXT:    v_mov_b32_e32 v24, 8
15874 ; GFX10-NEXT:    v_mov_b32_e32 v25, 8
15875 ; GFX10-NEXT:    v_mov_b32_e32 v26, 8
15876 ; GFX10-NEXT:    v_mov_b32_e32 v27, 9
15877 ; GFX10-NEXT:    v_mov_b32_e32 v28, 9
15878 ; GFX10-NEXT:    v_mov_b32_e32 v29, 9
15879 ; GFX10-NEXT:    v_mov_b32_e32 v30, 10
15880 ; GFX10-NEXT:    v_mov_b32_e32 v31, 11
15881 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_12xv3i32@abs32@hi
15882 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_12xv3i32@abs32@lo
15883 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
15884 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
15885 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
15886 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
15887 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
15888 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
15889 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
15890 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
15891 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
15892 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
15893 ; GFX10-NEXT:    s_mov_b32 s33, s34
15894 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
15895 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
15897 ; GFX11-LABEL: stack_12xv3i32:
15898 ; GFX11:       ; %bb.0: ; %entry
15899 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15900 ; GFX11-NEXT:    s_mov_b32 s0, s33
15901 ; GFX11-NEXT:    s_mov_b32 s33, s32
15902 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
15903 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
15904 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
15905 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
15906 ; GFX11-NEXT:    v_dual_mov_b32 v0, 12 :: v_dual_mov_b32 v1, 13
15907 ; GFX11-NEXT:    v_dual_mov_b32 v2, 14 :: v_dual_mov_b32 v3, 15
15908 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
15909 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
15910 ; GFX11-NEXT:    v_dual_mov_b32 v4, 1 :: v_dual_mov_b32 v5, 1
15911 ; GFX11-NEXT:    scratch_store_b128 off, v[0:3], s32
15912 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0
15913 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 1
15914 ; GFX11-NEXT:    v_dual_mov_b32 v6, 2 :: v_dual_mov_b32 v7, 2
15915 ; GFX11-NEXT:    v_dual_mov_b32 v8, 2 :: v_dual_mov_b32 v9, 3
15916 ; GFX11-NEXT:    v_dual_mov_b32 v10, 3 :: v_dual_mov_b32 v11, 3
15917 ; GFX11-NEXT:    v_dual_mov_b32 v12, 4 :: v_dual_mov_b32 v13, 4
15918 ; GFX11-NEXT:    v_dual_mov_b32 v14, 4 :: v_dual_mov_b32 v15, 5
15919 ; GFX11-NEXT:    v_dual_mov_b32 v16, 5 :: v_dual_mov_b32 v17, 5
15920 ; GFX11-NEXT:    v_dual_mov_b32 v18, 6 :: v_dual_mov_b32 v19, 6
15921 ; GFX11-NEXT:    v_dual_mov_b32 v20, 6 :: v_dual_mov_b32 v21, 7
15922 ; GFX11-NEXT:    v_dual_mov_b32 v22, 7 :: v_dual_mov_b32 v23, 7
15923 ; GFX11-NEXT:    v_dual_mov_b32 v24, 8 :: v_dual_mov_b32 v25, 8
15924 ; GFX11-NEXT:    v_dual_mov_b32 v26, 8 :: v_dual_mov_b32 v27, 9
15925 ; GFX11-NEXT:    v_dual_mov_b32 v28, 9 :: v_dual_mov_b32 v29, 9
15926 ; GFX11-NEXT:    v_dual_mov_b32 v30, 10 :: v_dual_mov_b32 v31, 11
15927 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_12xv3i32@abs32@hi
15928 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_12xv3i32@abs32@lo
15929 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
15930 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
15931 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
15932 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
15933 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
15934 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
15935 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
15936 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
15937 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
15938 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
15939 ; GFX11-NEXT:    s_mov_b32 s33, s0
15940 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
15941 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
15943 ; GFX10-SCRATCH-LABEL: stack_12xv3i32:
15944 ; GFX10-SCRATCH:       ; %bb.0: ; %entry
15945 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15946 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
15947 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
15948 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
15949 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
15950 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
15951 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
15952 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
15953 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 12
15954 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 13
15955 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 14
15956 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 15
15957 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
15958 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
15959 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 1
15960 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 1
15961 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx4 off, v[0:3], s32
15962 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
15963 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
15964 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 0
15965 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 1
15966 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v6, 2
15967 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v7, 2
15968 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v8, 2
15969 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v9, 3
15970 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v10, 3
15971 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v11, 3
15972 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v12, 4
15973 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v13, 4
15974 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v14, 4
15975 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v15, 5
15976 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v16, 5
15977 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v17, 5
15978 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v18, 6
15979 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v19, 6
15980 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v20, 6
15981 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v21, 7
15982 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v22, 7
15983 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v23, 7
15984 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v24, 8
15985 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v25, 8
15986 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v26, 8
15987 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v27, 9
15988 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v28, 9
15989 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v29, 9
15990 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v30, 10
15991 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v31, 11
15992 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_12xv3i32@abs32@hi
15993 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_12xv3i32@abs32@lo
15994 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
15995 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
15996 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
15997 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
15998 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
15999 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16000 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
16001 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16002 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16003 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
16004 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
16005 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
16006 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
16007 entry:
16008   call amdgpu_gfx void @external_void_func_12xv3i32(
16009       <3 x i32><i32 0, i32 0, i32 0>,
16010       <3 x i32><i32 1, i32 1, i32 1>,
16011       <3 x i32><i32 2, i32 2, i32 2>,
16012       <3 x i32><i32 3, i32 3, i32 3>,
16013       <3 x i32><i32 4, i32 4, i32 4>,
16014       <3 x i32><i32 5, i32 5, i32 5>,
16015       <3 x i32><i32 6, i32 6, i32 6>,
16016       <3 x i32><i32 7, i32 7, i32 7>,
16017       <3 x i32><i32 8, i32 8, i32 8>,
16018       <3 x i32><i32 9, i32 9, i32 9>,
16019       <3 x i32><i32 10, i32 11, i32 12>,
16020       <3 x i32><i32 13, i32 14, i32 15>)
16021   ret void
16024 define amdgpu_gfx void @stack_8xv5i32() #0 {
16025 ; GFX9-LABEL: stack_8xv5i32:
16026 ; GFX9:       ; %bb.0: ; %entry
16027 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16028 ; GFX9-NEXT:    s_mov_b32 s34, s33
16029 ; GFX9-NEXT:    s_mov_b32 s33, s32
16030 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16031 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16032 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16033 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
16034 ; GFX9-NEXT:    v_mov_b32_e32 v0, 8
16035 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32
16036 ; GFX9-NEXT:    v_mov_b32_e32 v0, 9
16037 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:4
16038 ; GFX9-NEXT:    v_mov_b32_e32 v0, 10
16039 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:8
16040 ; GFX9-NEXT:    v_mov_b32_e32 v0, 11
16041 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:12
16042 ; GFX9-NEXT:    v_mov_b32_e32 v0, 12
16043 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:16
16044 ; GFX9-NEXT:    v_mov_b32_e32 v0, 13
16045 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:20
16046 ; GFX9-NEXT:    v_mov_b32_e32 v0, 14
16047 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
16048 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:24
16049 ; GFX9-NEXT:    v_mov_b32_e32 v0, 15
16050 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
16051 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:28
16052 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_8xv5i32@abs32@hi
16053 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_8xv5i32@abs32@lo
16054 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
16055 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
16056 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
16057 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
16058 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
16059 ; GFX9-NEXT:    v_mov_b32_e32 v5, 1
16060 ; GFX9-NEXT:    v_mov_b32_e32 v6, 1
16061 ; GFX9-NEXT:    v_mov_b32_e32 v7, 1
16062 ; GFX9-NEXT:    v_mov_b32_e32 v8, 1
16063 ; GFX9-NEXT:    v_mov_b32_e32 v9, 1
16064 ; GFX9-NEXT:    v_mov_b32_e32 v10, 2
16065 ; GFX9-NEXT:    v_mov_b32_e32 v11, 2
16066 ; GFX9-NEXT:    v_mov_b32_e32 v12, 2
16067 ; GFX9-NEXT:    v_mov_b32_e32 v13, 2
16068 ; GFX9-NEXT:    v_mov_b32_e32 v14, 2
16069 ; GFX9-NEXT:    v_mov_b32_e32 v15, 3
16070 ; GFX9-NEXT:    v_mov_b32_e32 v16, 3
16071 ; GFX9-NEXT:    v_mov_b32_e32 v17, 3
16072 ; GFX9-NEXT:    v_mov_b32_e32 v18, 3
16073 ; GFX9-NEXT:    v_mov_b32_e32 v19, 3
16074 ; GFX9-NEXT:    v_mov_b32_e32 v20, 4
16075 ; GFX9-NEXT:    v_mov_b32_e32 v21, 4
16076 ; GFX9-NEXT:    v_mov_b32_e32 v22, 4
16077 ; GFX9-NEXT:    v_mov_b32_e32 v23, 4
16078 ; GFX9-NEXT:    v_mov_b32_e32 v24, 4
16079 ; GFX9-NEXT:    v_mov_b32_e32 v25, 5
16080 ; GFX9-NEXT:    v_mov_b32_e32 v26, 5
16081 ; GFX9-NEXT:    v_mov_b32_e32 v27, 5
16082 ; GFX9-NEXT:    v_mov_b32_e32 v28, 5
16083 ; GFX9-NEXT:    v_mov_b32_e32 v29, 5
16084 ; GFX9-NEXT:    v_mov_b32_e32 v30, 6
16085 ; GFX9-NEXT:    v_mov_b32_e32 v31, 7
16086 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
16087 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16088 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
16089 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
16090 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
16091 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16092 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16093 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16094 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
16095 ; GFX9-NEXT:    s_mov_b32 s33, s34
16096 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
16097 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16099 ; GFX10-LABEL: stack_8xv5i32:
16100 ; GFX10:       ; %bb.0: ; %entry
16101 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16102 ; GFX10-NEXT:    s_mov_b32 s34, s33
16103 ; GFX10-NEXT:    s_mov_b32 s33, s32
16104 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16105 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16106 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16107 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16108 ; GFX10-NEXT:    v_mov_b32_e32 v0, 8
16109 ; GFX10-NEXT:    v_mov_b32_e32 v1, 9
16110 ; GFX10-NEXT:    v_mov_b32_e32 v2, 10
16111 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
16112 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
16113 ; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], s32
16114 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4
16115 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8
16116 ; GFX10-NEXT:    v_mov_b32_e32 v0, 11
16117 ; GFX10-NEXT:    v_mov_b32_e32 v1, 12
16118 ; GFX10-NEXT:    v_mov_b32_e32 v2, 13
16119 ; GFX10-NEXT:    v_mov_b32_e32 v3, 14
16120 ; GFX10-NEXT:    v_mov_b32_e32 v4, 15
16121 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
16122 ; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:12
16123 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:16
16124 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:20
16125 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:24
16126 ; GFX10-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:28
16127 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
16128 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
16129 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
16130 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
16131 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
16132 ; GFX10-NEXT:    v_mov_b32_e32 v5, 1
16133 ; GFX10-NEXT:    v_mov_b32_e32 v6, 1
16134 ; GFX10-NEXT:    v_mov_b32_e32 v7, 1
16135 ; GFX10-NEXT:    v_mov_b32_e32 v8, 1
16136 ; GFX10-NEXT:    v_mov_b32_e32 v9, 1
16137 ; GFX10-NEXT:    v_mov_b32_e32 v10, 2
16138 ; GFX10-NEXT:    v_mov_b32_e32 v11, 2
16139 ; GFX10-NEXT:    v_mov_b32_e32 v12, 2
16140 ; GFX10-NEXT:    v_mov_b32_e32 v13, 2
16141 ; GFX10-NEXT:    v_mov_b32_e32 v14, 2
16142 ; GFX10-NEXT:    v_mov_b32_e32 v15, 3
16143 ; GFX10-NEXT:    v_mov_b32_e32 v16, 3
16144 ; GFX10-NEXT:    v_mov_b32_e32 v17, 3
16145 ; GFX10-NEXT:    v_mov_b32_e32 v18, 3
16146 ; GFX10-NEXT:    v_mov_b32_e32 v19, 3
16147 ; GFX10-NEXT:    v_mov_b32_e32 v20, 4
16148 ; GFX10-NEXT:    v_mov_b32_e32 v21, 4
16149 ; GFX10-NEXT:    v_mov_b32_e32 v22, 4
16150 ; GFX10-NEXT:    v_mov_b32_e32 v23, 4
16151 ; GFX10-NEXT:    v_mov_b32_e32 v24, 4
16152 ; GFX10-NEXT:    v_mov_b32_e32 v25, 5
16153 ; GFX10-NEXT:    v_mov_b32_e32 v26, 5
16154 ; GFX10-NEXT:    v_mov_b32_e32 v27, 5
16155 ; GFX10-NEXT:    v_mov_b32_e32 v28, 5
16156 ; GFX10-NEXT:    v_mov_b32_e32 v29, 5
16157 ; GFX10-NEXT:    v_mov_b32_e32 v30, 6
16158 ; GFX10-NEXT:    v_mov_b32_e32 v31, 7
16159 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_8xv5i32@abs32@hi
16160 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_8xv5i32@abs32@lo
16161 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
16162 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16163 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
16164 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
16165 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
16166 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16167 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16168 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16169 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16170 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
16171 ; GFX10-NEXT:    s_mov_b32 s33, s34
16172 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
16173 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16175 ; GFX11-LABEL: stack_8xv5i32:
16176 ; GFX11:       ; %bb.0: ; %entry
16177 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16178 ; GFX11-NEXT:    s_mov_b32 s0, s33
16179 ; GFX11-NEXT:    s_mov_b32 s33, s32
16180 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16181 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
16182 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16183 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
16184 ; GFX11-NEXT:    v_dual_mov_b32 v0, 8 :: v_dual_mov_b32 v1, 9
16185 ; GFX11-NEXT:    v_dual_mov_b32 v2, 10 :: v_dual_mov_b32 v3, 11
16186 ; GFX11-NEXT:    v_dual_mov_b32 v4, 12 :: v_dual_mov_b32 v5, 13
16187 ; GFX11-NEXT:    v_dual_mov_b32 v6, 14 :: v_dual_mov_b32 v7, 15
16188 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
16189 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
16190 ; GFX11-NEXT:    s_add_i32 s0, s32, 16
16191 ; GFX11-NEXT:    scratch_store_b128 off, v[0:3], s32
16192 ; GFX11-NEXT:    scratch_store_b128 off, v[4:7], s0
16193 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0
16194 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0
16195 ; GFX11-NEXT:    v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v5, 1
16196 ; GFX11-NEXT:    v_dual_mov_b32 v6, 1 :: v_dual_mov_b32 v7, 1
16197 ; GFX11-NEXT:    v_dual_mov_b32 v8, 1 :: v_dual_mov_b32 v9, 1
16198 ; GFX11-NEXT:    v_dual_mov_b32 v10, 2 :: v_dual_mov_b32 v11, 2
16199 ; GFX11-NEXT:    v_dual_mov_b32 v12, 2 :: v_dual_mov_b32 v13, 2
16200 ; GFX11-NEXT:    v_dual_mov_b32 v14, 2 :: v_dual_mov_b32 v15, 3
16201 ; GFX11-NEXT:    v_dual_mov_b32 v16, 3 :: v_dual_mov_b32 v17, 3
16202 ; GFX11-NEXT:    v_dual_mov_b32 v18, 3 :: v_dual_mov_b32 v19, 3
16203 ; GFX11-NEXT:    v_dual_mov_b32 v20, 4 :: v_dual_mov_b32 v21, 4
16204 ; GFX11-NEXT:    v_dual_mov_b32 v22, 4 :: v_dual_mov_b32 v23, 4
16205 ; GFX11-NEXT:    v_dual_mov_b32 v24, 4 :: v_dual_mov_b32 v25, 5
16206 ; GFX11-NEXT:    v_dual_mov_b32 v26, 5 :: v_dual_mov_b32 v27, 5
16207 ; GFX11-NEXT:    v_dual_mov_b32 v28, 5 :: v_dual_mov_b32 v29, 5
16208 ; GFX11-NEXT:    v_dual_mov_b32 v30, 6 :: v_dual_mov_b32 v31, 7
16209 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_8xv5i32@abs32@hi
16210 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_8xv5i32@abs32@lo
16211 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
16212 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16213 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
16214 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
16215 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
16216 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
16217 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16218 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
16219 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16220 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
16221 ; GFX11-NEXT:    s_mov_b32 s33, s0
16222 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
16223 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
16225 ; GFX10-SCRATCH-LABEL: stack_8xv5i32:
16226 ; GFX10-SCRATCH:       ; %bb.0: ; %entry
16227 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16228 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
16229 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
16230 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16231 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
16232 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16233 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16234 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
16235 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 8
16236 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 9
16237 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 10
16238 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 11
16239 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 12
16240 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 13
16241 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v6, 14
16242 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v7, 15
16243 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
16244 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
16245 ; GFX10-SCRATCH-NEXT:    s_add_i32 s0, s32, 16
16246 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx4 off, v[0:3], s32
16247 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx4 off, v[4:7], s0
16248 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
16249 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
16250 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 0
16251 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 0
16252 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 0
16253 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 1
16254 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v6, 1
16255 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v7, 1
16256 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v8, 1
16257 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v9, 1
16258 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v10, 2
16259 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v11, 2
16260 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v12, 2
16261 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v13, 2
16262 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v14, 2
16263 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v15, 3
16264 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v16, 3
16265 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v17, 3
16266 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v18, 3
16267 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v19, 3
16268 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v20, 4
16269 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v21, 4
16270 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v22, 4
16271 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v23, 4
16272 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v24, 4
16273 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v25, 5
16274 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v26, 5
16275 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v27, 5
16276 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v28, 5
16277 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v29, 5
16278 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v30, 6
16279 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v31, 7
16280 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_8xv5i32@abs32@hi
16281 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_8xv5i32@abs32@lo
16282 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
16283 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16284 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
16285 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
16286 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
16287 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16288 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
16289 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16290 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16291 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
16292 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
16293 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
16294 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
16295 entry:
16296   call amdgpu_gfx void @external_void_func_8xv5i32(
16297       <5 x i32><i32 0, i32 0, i32 0, i32 0, i32 0>,
16298       <5 x i32><i32 1, i32 1, i32 1, i32 1, i32 1>,
16299       <5 x i32><i32 2, i32 2, i32 2, i32 2, i32 2>,
16300       <5 x i32><i32 3, i32 3, i32 3, i32 3, i32 3>,
16301       <5 x i32><i32 4, i32 4, i32 4, i32 4, i32 4>,
16302       <5 x i32><i32 5, i32 5, i32 5, i32 5, i32 5>,
16303       <5 x i32><i32 6, i32 7, i32 8, i32 9, i32 10>,
16304       <5 x i32><i32 11, i32 12, i32 13, i32 14, i32 15>)
16305   ret void
16308 define amdgpu_gfx void @stack_8xv5f32() #0 {
16309 ; GFX9-LABEL: stack_8xv5f32:
16310 ; GFX9:       ; %bb.0: ; %entry
16311 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16312 ; GFX9-NEXT:    s_mov_b32 s34, s33
16313 ; GFX9-NEXT:    s_mov_b32 s33, s32
16314 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16315 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16316 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16317 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
16318 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x41000000
16319 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32
16320 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x41100000
16321 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:4
16322 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x41200000
16323 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:8
16324 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x41300000
16325 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:12
16326 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x41400000
16327 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:16
16328 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x41500000
16329 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:20
16330 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x41600000
16331 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
16332 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:24
16333 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x41700000
16334 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
16335 ; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:28
16336 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_8xv5f32@abs32@hi
16337 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_8xv5f32@abs32@lo
16338 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
16339 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
16340 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
16341 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
16342 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
16343 ; GFX9-NEXT:    v_mov_b32_e32 v5, 1.0
16344 ; GFX9-NEXT:    v_mov_b32_e32 v6, 1.0
16345 ; GFX9-NEXT:    v_mov_b32_e32 v7, 1.0
16346 ; GFX9-NEXT:    v_mov_b32_e32 v8, 1.0
16347 ; GFX9-NEXT:    v_mov_b32_e32 v9, 1.0
16348 ; GFX9-NEXT:    v_mov_b32_e32 v10, 2.0
16349 ; GFX9-NEXT:    v_mov_b32_e32 v11, 2.0
16350 ; GFX9-NEXT:    v_mov_b32_e32 v12, 2.0
16351 ; GFX9-NEXT:    v_mov_b32_e32 v13, 2.0
16352 ; GFX9-NEXT:    v_mov_b32_e32 v14, 2.0
16353 ; GFX9-NEXT:    v_mov_b32_e32 v15, 0x40400000
16354 ; GFX9-NEXT:    v_mov_b32_e32 v16, 0x40400000
16355 ; GFX9-NEXT:    v_mov_b32_e32 v17, 0x40400000
16356 ; GFX9-NEXT:    v_mov_b32_e32 v18, 0x40400000
16357 ; GFX9-NEXT:    v_mov_b32_e32 v19, 0x40400000
16358 ; GFX9-NEXT:    v_mov_b32_e32 v20, 4.0
16359 ; GFX9-NEXT:    v_mov_b32_e32 v21, 4.0
16360 ; GFX9-NEXT:    v_mov_b32_e32 v22, 4.0
16361 ; GFX9-NEXT:    v_mov_b32_e32 v23, 4.0
16362 ; GFX9-NEXT:    v_mov_b32_e32 v24, 4.0
16363 ; GFX9-NEXT:    v_mov_b32_e32 v25, 0x40a00000
16364 ; GFX9-NEXT:    v_mov_b32_e32 v26, 0x40a00000
16365 ; GFX9-NEXT:    v_mov_b32_e32 v27, 0x40a00000
16366 ; GFX9-NEXT:    v_mov_b32_e32 v28, 0x40a00000
16367 ; GFX9-NEXT:    v_mov_b32_e32 v29, 0x40a00000
16368 ; GFX9-NEXT:    v_mov_b32_e32 v30, 0x40c00000
16369 ; GFX9-NEXT:    v_mov_b32_e32 v31, 0x40e00000
16370 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
16371 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16372 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
16373 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
16374 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
16375 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16376 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16377 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16378 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
16379 ; GFX9-NEXT:    s_mov_b32 s33, s34
16380 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
16381 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16383 ; GFX10-LABEL: stack_8xv5f32:
16384 ; GFX10:       ; %bb.0: ; %entry
16385 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16386 ; GFX10-NEXT:    s_mov_b32 s34, s33
16387 ; GFX10-NEXT:    s_mov_b32 s33, s32
16388 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16389 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16390 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16391 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16392 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x41000000
16393 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0x41100000
16394 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0x41200000
16395 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
16396 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
16397 ; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], s32
16398 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:4
16399 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:8
16400 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0x41300000
16401 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0x41400000
16402 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0x41500000
16403 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0x41600000
16404 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0x41700000
16405 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
16406 ; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:12
16407 ; GFX10-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:16
16408 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:20
16409 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:24
16410 ; GFX10-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:28
16411 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
16412 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
16413 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
16414 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
16415 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
16416 ; GFX10-NEXT:    v_mov_b32_e32 v5, 1.0
16417 ; GFX10-NEXT:    v_mov_b32_e32 v6, 1.0
16418 ; GFX10-NEXT:    v_mov_b32_e32 v7, 1.0
16419 ; GFX10-NEXT:    v_mov_b32_e32 v8, 1.0
16420 ; GFX10-NEXT:    v_mov_b32_e32 v9, 1.0
16421 ; GFX10-NEXT:    v_mov_b32_e32 v10, 2.0
16422 ; GFX10-NEXT:    v_mov_b32_e32 v11, 2.0
16423 ; GFX10-NEXT:    v_mov_b32_e32 v12, 2.0
16424 ; GFX10-NEXT:    v_mov_b32_e32 v13, 2.0
16425 ; GFX10-NEXT:    v_mov_b32_e32 v14, 2.0
16426 ; GFX10-NEXT:    v_mov_b32_e32 v15, 0x40400000
16427 ; GFX10-NEXT:    v_mov_b32_e32 v16, 0x40400000
16428 ; GFX10-NEXT:    v_mov_b32_e32 v17, 0x40400000
16429 ; GFX10-NEXT:    v_mov_b32_e32 v18, 0x40400000
16430 ; GFX10-NEXT:    v_mov_b32_e32 v19, 0x40400000
16431 ; GFX10-NEXT:    v_mov_b32_e32 v20, 4.0
16432 ; GFX10-NEXT:    v_mov_b32_e32 v21, 4.0
16433 ; GFX10-NEXT:    v_mov_b32_e32 v22, 4.0
16434 ; GFX10-NEXT:    v_mov_b32_e32 v23, 4.0
16435 ; GFX10-NEXT:    v_mov_b32_e32 v24, 4.0
16436 ; GFX10-NEXT:    v_mov_b32_e32 v25, 0x40a00000
16437 ; GFX10-NEXT:    v_mov_b32_e32 v26, 0x40a00000
16438 ; GFX10-NEXT:    v_mov_b32_e32 v27, 0x40a00000
16439 ; GFX10-NEXT:    v_mov_b32_e32 v28, 0x40a00000
16440 ; GFX10-NEXT:    v_mov_b32_e32 v29, 0x40a00000
16441 ; GFX10-NEXT:    v_mov_b32_e32 v30, 0x40c00000
16442 ; GFX10-NEXT:    v_mov_b32_e32 v31, 0x40e00000
16443 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_8xv5f32@abs32@hi
16444 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_8xv5f32@abs32@lo
16445 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
16446 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16447 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
16448 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
16449 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
16450 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16451 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16452 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16453 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16454 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
16455 ; GFX10-NEXT:    s_mov_b32 s33, s34
16456 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
16457 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16459 ; GFX11-LABEL: stack_8xv5f32:
16460 ; GFX11:       ; %bb.0: ; %entry
16461 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16462 ; GFX11-NEXT:    s_mov_b32 s0, s33
16463 ; GFX11-NEXT:    s_mov_b32 s33, s32
16464 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16465 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
16466 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16467 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
16468 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0x41000000
16469 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0x41100000
16470 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0x41200000
16471 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0x41300000
16472 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0x41400000
16473 ; GFX11-NEXT:    v_mov_b32_e32 v5, 0x41500000
16474 ; GFX11-NEXT:    v_mov_b32_e32 v6, 0x41600000
16475 ; GFX11-NEXT:    v_mov_b32_e32 v7, 0x41700000
16476 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
16477 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
16478 ; GFX11-NEXT:    s_add_i32 s0, s32, 16
16479 ; GFX11-NEXT:    scratch_store_b128 off, v[0:3], s32
16480 ; GFX11-NEXT:    scratch_store_b128 off, v[4:7], s0
16481 ; GFX11-NEXT:    v_mov_b32_e32 v6, 1.0
16482 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0
16483 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0
16484 ; GFX11-NEXT:    v_dual_mov_b32 v4, 0 :: v_dual_mov_b32 v5, 1.0
16485 ; GFX11-NEXT:    v_dual_mov_b32 v7, 1.0 :: v_dual_mov_b32 v8, 1.0
16486 ; GFX11-NEXT:    v_dual_mov_b32 v9, 1.0 :: v_dual_mov_b32 v10, 2.0
16487 ; GFX11-NEXT:    v_dual_mov_b32 v11, 2.0 :: v_dual_mov_b32 v12, 2.0
16488 ; GFX11-NEXT:    v_dual_mov_b32 v13, 2.0 :: v_dual_mov_b32 v14, 2.0
16489 ; GFX11-NEXT:    v_dual_mov_b32 v15, 0x40400000 :: v_dual_mov_b32 v16, 0x40400000
16490 ; GFX11-NEXT:    v_dual_mov_b32 v17, 0x40400000 :: v_dual_mov_b32 v18, 0x40400000
16491 ; GFX11-NEXT:    v_dual_mov_b32 v19, 0x40400000 :: v_dual_mov_b32 v20, 4.0
16492 ; GFX11-NEXT:    v_dual_mov_b32 v21, 4.0 :: v_dual_mov_b32 v22, 4.0
16493 ; GFX11-NEXT:    v_dual_mov_b32 v23, 4.0 :: v_dual_mov_b32 v24, 4.0
16494 ; GFX11-NEXT:    v_dual_mov_b32 v25, 0x40a00000 :: v_dual_mov_b32 v26, 0x40a00000
16495 ; GFX11-NEXT:    v_dual_mov_b32 v27, 0x40a00000 :: v_dual_mov_b32 v28, 0x40a00000
16496 ; GFX11-NEXT:    v_mov_b32_e32 v29, 0x40a00000
16497 ; GFX11-NEXT:    v_mov_b32_e32 v30, 0x40c00000
16498 ; GFX11-NEXT:    v_mov_b32_e32 v31, 0x40e00000
16499 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_8xv5f32@abs32@hi
16500 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_8xv5f32@abs32@lo
16501 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
16502 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16503 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
16504 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
16505 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
16506 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
16507 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16508 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
16509 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16510 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
16511 ; GFX11-NEXT:    s_mov_b32 s33, s0
16512 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
16513 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
16515 ; GFX10-SCRATCH-LABEL: stack_8xv5f32:
16516 ; GFX10-SCRATCH:       ; %bb.0: ; %entry
16517 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16518 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
16519 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
16520 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16521 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
16522 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16523 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16524 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
16525 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0x41000000
16526 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0x41100000
16527 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 0x41200000
16528 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 0x41300000
16529 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 0x41400000
16530 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 0x41500000
16531 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v6, 0x41600000
16532 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v7, 0x41700000
16533 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
16534 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
16535 ; GFX10-SCRATCH-NEXT:    s_add_i32 s0, s32, 16
16536 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx4 off, v[0:3], s32
16537 ; GFX10-SCRATCH-NEXT:    scratch_store_dwordx4 off, v[4:7], s0
16538 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v0, 0
16539 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v1, 0
16540 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v2, 0
16541 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v3, 0
16542 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v4, 0
16543 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v5, 1.0
16544 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v6, 1.0
16545 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v7, 1.0
16546 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v8, 1.0
16547 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v9, 1.0
16548 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v10, 2.0
16549 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v11, 2.0
16550 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v12, 2.0
16551 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v13, 2.0
16552 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v14, 2.0
16553 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v15, 0x40400000
16554 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v16, 0x40400000
16555 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v17, 0x40400000
16556 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v18, 0x40400000
16557 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v19, 0x40400000
16558 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v20, 4.0
16559 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v21, 4.0
16560 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v22, 4.0
16561 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v23, 4.0
16562 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v24, 4.0
16563 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v25, 0x40a00000
16564 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v26, 0x40a00000
16565 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v27, 0x40a00000
16566 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v28, 0x40a00000
16567 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v29, 0x40a00000
16568 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v30, 0x40c00000
16569 ; GFX10-SCRATCH-NEXT:    v_mov_b32_e32 v31, 0x40e00000
16570 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_8xv5f32@abs32@hi
16571 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_8xv5f32@abs32@lo
16572 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
16573 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16574 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
16575 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
16576 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
16577 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16578 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
16579 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16580 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16581 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
16582 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
16583 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
16584 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
16585 entry:
16586   call amdgpu_gfx void @external_void_func_8xv5f32(
16587       <5 x float><float 0.0, float 0.0, float 0.0, float 0.0, float 0.0>,
16588       <5 x float><float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>,
16589       <5 x float><float 2.0, float 2.0, float 2.0, float 2.0, float 2.0>,
16590       <5 x float><float 3.0, float 3.0, float 3.0, float 3.0, float 3.0>,
16591       <5 x float><float 4.0, float 4.0, float 4.0, float 4.0, float 4.0>,
16592       <5 x float><float 5.0, float 5.0, float 5.0, float 5.0, float 5.0>,
16593       <5 x float><float 6.0, float 7.0, float 8.0, float 9.0, float 10.0>,
16594       <5 x float><float 11.0, float 12.0, float 13.0, float 14.0, float 15.0>)
16595   ret void
16598 define amdgpu_gfx void @test_call_external_void_func_bf16(i16 %arg) #0 {
16599 ; GFX9-LABEL: test_call_external_void_func_bf16:
16600 ; GFX9:       ; %bb.0:
16601 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16602 ; GFX9-NEXT:    s_mov_b32 s34, s33
16603 ; GFX9-NEXT:    s_mov_b32 s33, s32
16604 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16605 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16606 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16607 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
16608 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
16609 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_bf16@abs32@hi
16610 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_bf16@abs32@lo
16611 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
16612 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
16613 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16614 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
16615 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
16616 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
16617 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16618 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16619 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16620 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
16621 ; GFX9-NEXT:    s_mov_b32 s33, s34
16622 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
16623 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16625 ; GFX10-LABEL: test_call_external_void_func_bf16:
16626 ; GFX10:       ; %bb.0:
16627 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16628 ; GFX10-NEXT:    s_mov_b32 s34, s33
16629 ; GFX10-NEXT:    s_mov_b32 s33, s32
16630 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16631 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16632 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16633 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16634 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
16635 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_bf16@abs32@hi
16636 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_bf16@abs32@lo
16637 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
16638 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
16639 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
16640 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16641 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
16642 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
16643 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
16644 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16645 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16646 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16647 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16648 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
16649 ; GFX10-NEXT:    s_mov_b32 s33, s34
16650 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
16651 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16653 ; GFX11-LABEL: test_call_external_void_func_bf16:
16654 ; GFX11:       ; %bb.0:
16655 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16656 ; GFX11-NEXT:    s_mov_b32 s0, s33
16657 ; GFX11-NEXT:    s_mov_b32 s33, s32
16658 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16659 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
16660 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16661 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
16662 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_bf16@abs32@hi
16663 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_bf16@abs32@lo
16664 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
16665 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
16666 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
16667 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16668 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
16669 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
16670 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
16671 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
16672 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16673 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
16674 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16675 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
16676 ; GFX11-NEXT:    s_mov_b32 s33, s0
16677 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
16678 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
16680 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_bf16:
16681 ; GFX10-SCRATCH:       ; %bb.0:
16682 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16683 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
16684 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
16685 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16686 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
16687 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16688 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16689 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
16690 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_bf16@abs32@hi
16691 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_bf16@abs32@lo
16692 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
16693 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
16694 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
16695 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16696 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
16697 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
16698 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
16699 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16700 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
16701 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16702 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16703 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
16704 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
16705 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
16706 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
16707   %val = bitcast i16 %arg to bfloat
16708   call amdgpu_gfx void @external_void_func_bf16(bfloat %val)
16709   ret void
16712 define amdgpu_gfx void @test_call_external_void_func_v1bf16(i16 %arg) #0 {
16713 ; GFX9-LABEL: test_call_external_void_func_v1bf16:
16714 ; GFX9:       ; %bb.0:
16715 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16716 ; GFX9-NEXT:    s_mov_b32 s34, s33
16717 ; GFX9-NEXT:    s_mov_b32 s33, s32
16718 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16719 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16720 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16721 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
16722 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
16723 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v1bf16@abs32@hi
16724 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v1bf16@abs32@lo
16725 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
16726 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
16727 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16728 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
16729 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
16730 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
16731 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16732 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16733 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16734 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
16735 ; GFX9-NEXT:    s_mov_b32 s33, s34
16736 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
16737 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16739 ; GFX10-LABEL: test_call_external_void_func_v1bf16:
16740 ; GFX10:       ; %bb.0:
16741 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16742 ; GFX10-NEXT:    s_mov_b32 s34, s33
16743 ; GFX10-NEXT:    s_mov_b32 s33, s32
16744 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16745 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16746 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16747 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16748 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
16749 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v1bf16@abs32@hi
16750 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v1bf16@abs32@lo
16751 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
16752 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
16753 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
16754 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16755 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
16756 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
16757 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
16758 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16759 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16760 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16761 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16762 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
16763 ; GFX10-NEXT:    s_mov_b32 s33, s34
16764 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
16765 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16767 ; GFX11-LABEL: test_call_external_void_func_v1bf16:
16768 ; GFX11:       ; %bb.0:
16769 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16770 ; GFX11-NEXT:    s_mov_b32 s0, s33
16771 ; GFX11-NEXT:    s_mov_b32 s33, s32
16772 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16773 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
16774 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16775 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
16776 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v1bf16@abs32@hi
16777 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v1bf16@abs32@lo
16778 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
16779 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
16780 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
16781 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16782 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
16783 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
16784 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
16785 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
16786 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16787 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
16788 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16789 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
16790 ; GFX11-NEXT:    s_mov_b32 s33, s0
16791 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
16792 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
16794 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v1bf16:
16795 ; GFX10-SCRATCH:       ; %bb.0:
16796 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16797 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
16798 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
16799 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16800 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
16801 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16802 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16803 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
16804 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v1bf16@abs32@hi
16805 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v1bf16@abs32@lo
16806 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
16807 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
16808 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
16809 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16810 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
16811 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
16812 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
16813 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16814 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
16815 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16816 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16817 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
16818 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
16819 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
16820 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
16821   %val = bitcast i16 %arg to <1 x bfloat>
16822   call amdgpu_gfx void @external_void_func_v1bf16(<1 x bfloat> %val)
16823   ret void
16826 define amdgpu_gfx void @test_call_external_void_func_v2bf16(i32 %arg) #0 {
16827 ; GFX9-LABEL: test_call_external_void_func_v2bf16:
16828 ; GFX9:       ; %bb.0:
16829 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16830 ; GFX9-NEXT:    s_mov_b32 s34, s33
16831 ; GFX9-NEXT:    s_mov_b32 s33, s32
16832 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16833 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16834 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16835 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
16836 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
16837 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2bf16@abs32@hi
16838 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2bf16@abs32@lo
16839 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
16840 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
16841 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16842 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
16843 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
16844 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
16845 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16846 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16847 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16848 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
16849 ; GFX9-NEXT:    s_mov_b32 s33, s34
16850 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
16851 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16853 ; GFX10-LABEL: test_call_external_void_func_v2bf16:
16854 ; GFX10:       ; %bb.0:
16855 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16856 ; GFX10-NEXT:    s_mov_b32 s34, s33
16857 ; GFX10-NEXT:    s_mov_b32 s33, s32
16858 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16859 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16860 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16861 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16862 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
16863 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2bf16@abs32@hi
16864 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2bf16@abs32@lo
16865 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
16866 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
16867 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
16868 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16869 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
16870 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
16871 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
16872 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16873 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16874 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16875 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16876 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
16877 ; GFX10-NEXT:    s_mov_b32 s33, s34
16878 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
16879 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16881 ; GFX11-LABEL: test_call_external_void_func_v2bf16:
16882 ; GFX11:       ; %bb.0:
16883 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16884 ; GFX11-NEXT:    s_mov_b32 s0, s33
16885 ; GFX11-NEXT:    s_mov_b32 s33, s32
16886 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16887 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
16888 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16889 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
16890 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2bf16@abs32@hi
16891 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2bf16@abs32@lo
16892 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
16893 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
16894 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
16895 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16896 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
16897 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
16898 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
16899 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
16900 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
16901 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
16902 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
16903 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
16904 ; GFX11-NEXT:    s_mov_b32 s33, s0
16905 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
16906 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
16908 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2bf16:
16909 ; GFX10-SCRATCH:       ; %bb.0:
16910 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16911 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
16912 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
16913 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16914 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
16915 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16916 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16917 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
16918 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2bf16@abs32@hi
16919 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2bf16@abs32@lo
16920 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
16921 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
16922 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
16923 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
16924 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
16925 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
16926 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
16927 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
16928 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
16929 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
16930 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
16931 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
16932 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
16933 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
16934 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
16935   %val = bitcast i32 %arg to <2 x bfloat>
16936   call amdgpu_gfx void @external_void_func_v2bf16(<2 x bfloat> %val)
16937   ret void
16940 define amdgpu_gfx void @test_call_external_void_func_v3bf16(<3 x i16> %arg) #0 {
16941 ; GFX9-LABEL: test_call_external_void_func_v3bf16:
16942 ; GFX9:       ; %bb.0:
16943 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16944 ; GFX9-NEXT:    s_mov_b32 s34, s33
16945 ; GFX9-NEXT:    s_mov_b32 s33, s32
16946 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16947 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16948 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16949 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
16950 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
16951 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3bf16@abs32@hi
16952 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3bf16@abs32@lo
16953 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
16954 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
16955 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16956 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
16957 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
16958 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
16959 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
16960 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16961 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
16962 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
16963 ; GFX9-NEXT:    s_mov_b32 s33, s34
16964 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
16965 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16967 ; GFX10-LABEL: test_call_external_void_func_v3bf16:
16968 ; GFX10:       ; %bb.0:
16969 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16970 ; GFX10-NEXT:    s_mov_b32 s34, s33
16971 ; GFX10-NEXT:    s_mov_b32 s33, s32
16972 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16973 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
16974 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16975 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16976 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
16977 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3bf16@abs32@hi
16978 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3bf16@abs32@lo
16979 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
16980 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
16981 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
16982 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
16983 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
16984 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
16985 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
16986 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
16987 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
16988 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
16989 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
16990 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
16991 ; GFX10-NEXT:    s_mov_b32 s33, s34
16992 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
16993 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16995 ; GFX11-LABEL: test_call_external_void_func_v3bf16:
16996 ; GFX11:       ; %bb.0:
16997 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16998 ; GFX11-NEXT:    s_mov_b32 s0, s33
16999 ; GFX11-NEXT:    s_mov_b32 s33, s32
17000 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17001 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17002 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17003 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17004 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3bf16@abs32@hi
17005 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3bf16@abs32@lo
17006 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17007 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17008 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17009 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17010 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17011 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17012 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17013 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17014 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17015 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17016 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17017 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17018 ; GFX11-NEXT:    s_mov_b32 s33, s0
17019 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17020 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17022 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3bf16:
17023 ; GFX10-SCRATCH:       ; %bb.0:
17024 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17025 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17026 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17027 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17028 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17029 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17030 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17031 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17032 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3bf16@abs32@hi
17033 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3bf16@abs32@lo
17034 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17035 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17036 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17037 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17038 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17039 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17040 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17041 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17042 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17043 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17044 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17045 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17046 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17047 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17048 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17049   %val = bitcast <3 x i16> %arg to <3 x bfloat>
17050   call amdgpu_gfx void @external_void_func_v3bf16(<3 x bfloat> %val)
17051   ret void
17054 define amdgpu_gfx void @test_call_external_void_func_v4bf16(<4 x i16> %arg) #0 {
17055 ; GFX9-LABEL: test_call_external_void_func_v4bf16:
17056 ; GFX9:       ; %bb.0:
17057 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17058 ; GFX9-NEXT:    s_mov_b32 s34, s33
17059 ; GFX9-NEXT:    s_mov_b32 s33, s32
17060 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17061 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17062 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17063 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17064 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17065 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4bf16@abs32@hi
17066 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4bf16@abs32@lo
17067 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17068 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17069 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17070 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17071 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17072 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17073 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17074 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17075 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17076 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17077 ; GFX9-NEXT:    s_mov_b32 s33, s34
17078 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17079 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17081 ; GFX10-LABEL: test_call_external_void_func_v4bf16:
17082 ; GFX10:       ; %bb.0:
17083 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17084 ; GFX10-NEXT:    s_mov_b32 s34, s33
17085 ; GFX10-NEXT:    s_mov_b32 s33, s32
17086 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17087 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17088 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17089 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17090 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
17091 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4bf16@abs32@hi
17092 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4bf16@abs32@lo
17093 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
17094 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
17095 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
17096 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17097 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
17098 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
17099 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
17100 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17101 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17102 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17103 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17104 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
17105 ; GFX10-NEXT:    s_mov_b32 s33, s34
17106 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
17107 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17109 ; GFX11-LABEL: test_call_external_void_func_v4bf16:
17110 ; GFX11:       ; %bb.0:
17111 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17112 ; GFX11-NEXT:    s_mov_b32 s0, s33
17113 ; GFX11-NEXT:    s_mov_b32 s33, s32
17114 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17115 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17116 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17117 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17118 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4bf16@abs32@hi
17119 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4bf16@abs32@lo
17120 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17121 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17122 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17123 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17124 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17125 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17126 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17127 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17128 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17129 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17130 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17131 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17132 ; GFX11-NEXT:    s_mov_b32 s33, s0
17133 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17134 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17136 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4bf16:
17137 ; GFX10-SCRATCH:       ; %bb.0:
17138 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17139 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17140 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17141 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17142 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17143 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17144 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17145 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17146 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4bf16@abs32@hi
17147 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4bf16@abs32@lo
17148 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17149 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17150 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17151 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17152 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17153 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17154 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17155 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17156 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17157 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17158 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17159 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17160 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17161 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17162 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17163   %val = bitcast <4 x i16> %arg to <4 x bfloat>
17164   call amdgpu_gfx void @external_void_func_v4bf16(<4 x bfloat> %val)
17165   ret void
17168 define amdgpu_gfx void @test_call_external_void_func_v8bf16(<8 x i16> %arg) #0 {
17169 ; GFX9-LABEL: test_call_external_void_func_v8bf16:
17170 ; GFX9:       ; %bb.0:
17171 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17172 ; GFX9-NEXT:    s_mov_b32 s34, s33
17173 ; GFX9-NEXT:    s_mov_b32 s33, s32
17174 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17175 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17176 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17177 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17178 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17179 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v8bf16@abs32@hi
17180 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v8bf16@abs32@lo
17181 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17182 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17183 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17184 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17185 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17186 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17187 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17188 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17189 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17190 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17191 ; GFX9-NEXT:    s_mov_b32 s33, s34
17192 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17193 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17195 ; GFX10-LABEL: test_call_external_void_func_v8bf16:
17196 ; GFX10:       ; %bb.0:
17197 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17198 ; GFX10-NEXT:    s_mov_b32 s34, s33
17199 ; GFX10-NEXT:    s_mov_b32 s33, s32
17200 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17201 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17202 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17203 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17204 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
17205 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v8bf16@abs32@hi
17206 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v8bf16@abs32@lo
17207 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
17208 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
17209 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
17210 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17211 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
17212 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
17213 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
17214 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17215 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17216 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17217 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17218 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
17219 ; GFX10-NEXT:    s_mov_b32 s33, s34
17220 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
17221 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17223 ; GFX11-LABEL: test_call_external_void_func_v8bf16:
17224 ; GFX11:       ; %bb.0:
17225 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17226 ; GFX11-NEXT:    s_mov_b32 s0, s33
17227 ; GFX11-NEXT:    s_mov_b32 s33, s32
17228 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17229 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17230 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17231 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17232 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v8bf16@abs32@hi
17233 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v8bf16@abs32@lo
17234 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17235 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17236 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17237 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17238 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17239 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17240 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17241 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17242 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17243 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17244 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17245 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17246 ; GFX11-NEXT:    s_mov_b32 s33, s0
17247 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17248 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17250 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v8bf16:
17251 ; GFX10-SCRATCH:       ; %bb.0:
17252 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17253 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17254 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17255 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17256 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17257 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17258 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17259 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17260 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v8bf16@abs32@hi
17261 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v8bf16@abs32@lo
17262 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17263 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17264 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17265 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17266 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17267 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17268 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17269 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17270 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17271 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17272 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17273 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17274 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17275 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17276 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17277   %val = bitcast <8 x i16> %arg to <8 x bfloat>
17278   call amdgpu_gfx void @external_void_func_v8bf16(<8 x bfloat> %val)
17279   ret void
17282 define amdgpu_gfx void @test_call_external_void_func_v16bf16(<16 x i16> %arg) #0 {
17283 ; GFX9-LABEL: test_call_external_void_func_v16bf16:
17284 ; GFX9:       ; %bb.0:
17285 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17286 ; GFX9-NEXT:    s_mov_b32 s34, s33
17287 ; GFX9-NEXT:    s_mov_b32 s33, s32
17288 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17289 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17290 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17291 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17292 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17293 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v16bf16@abs32@hi
17294 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v16bf16@abs32@lo
17295 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17296 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17297 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17298 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17299 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17300 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17301 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17302 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17303 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17304 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17305 ; GFX9-NEXT:    s_mov_b32 s33, s34
17306 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17307 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17309 ; GFX10-LABEL: test_call_external_void_func_v16bf16:
17310 ; GFX10:       ; %bb.0:
17311 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17312 ; GFX10-NEXT:    s_mov_b32 s34, s33
17313 ; GFX10-NEXT:    s_mov_b32 s33, s32
17314 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17315 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17316 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17317 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17318 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
17319 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v16bf16@abs32@hi
17320 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v16bf16@abs32@lo
17321 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
17322 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
17323 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
17324 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17325 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
17326 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
17327 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
17328 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17329 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17330 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17331 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17332 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
17333 ; GFX10-NEXT:    s_mov_b32 s33, s34
17334 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
17335 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17337 ; GFX11-LABEL: test_call_external_void_func_v16bf16:
17338 ; GFX11:       ; %bb.0:
17339 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17340 ; GFX11-NEXT:    s_mov_b32 s0, s33
17341 ; GFX11-NEXT:    s_mov_b32 s33, s32
17342 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17343 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17344 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17345 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17346 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v16bf16@abs32@hi
17347 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v16bf16@abs32@lo
17348 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17349 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17350 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17351 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17352 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17353 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17354 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17355 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17356 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17357 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17358 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17359 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17360 ; GFX11-NEXT:    s_mov_b32 s33, s0
17361 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17362 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17364 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v16bf16:
17365 ; GFX10-SCRATCH:       ; %bb.0:
17366 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17367 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17368 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17369 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17370 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17371 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17372 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17373 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17374 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v16bf16@abs32@hi
17375 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v16bf16@abs32@lo
17376 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17377 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17378 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17379 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17380 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17381 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17382 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17383 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17384 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17385 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17386 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17387 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17388 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17389 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17390 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17391   %val = bitcast <16 x i16> %arg to <16 x bfloat>
17392   call amdgpu_gfx void @external_void_func_v16bf16(<16 x bfloat> %val)
17393   ret void
17396 define amdgpu_gfx void @test_call_external_void_func_bf16_inreg(i16 inreg %arg) #0 {
17397 ; GFX9-LABEL: test_call_external_void_func_bf16_inreg:
17398 ; GFX9:       ; %bb.0:
17399 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17400 ; GFX9-NEXT:    s_mov_b32 s34, s33
17401 ; GFX9-NEXT:    s_mov_b32 s33, s32
17402 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17403 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17404 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17405 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17406 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17407 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_bf16@abs32@hi
17408 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_bf16@abs32@lo
17409 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17410 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17411 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17412 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17413 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17414 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17415 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17416 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17417 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17418 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17419 ; GFX9-NEXT:    s_mov_b32 s33, s34
17420 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17421 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17423 ; GFX10-LABEL: test_call_external_void_func_bf16_inreg:
17424 ; GFX10:       ; %bb.0:
17425 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17426 ; GFX10-NEXT:    s_mov_b32 s34, s33
17427 ; GFX10-NEXT:    s_mov_b32 s33, s32
17428 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17429 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17430 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17431 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17432 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
17433 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_bf16@abs32@hi
17434 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_bf16@abs32@lo
17435 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
17436 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
17437 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
17438 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17439 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
17440 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
17441 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
17442 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17443 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17444 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17445 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17446 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
17447 ; GFX10-NEXT:    s_mov_b32 s33, s34
17448 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
17449 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17451 ; GFX11-LABEL: test_call_external_void_func_bf16_inreg:
17452 ; GFX11:       ; %bb.0:
17453 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17454 ; GFX11-NEXT:    s_mov_b32 s0, s33
17455 ; GFX11-NEXT:    s_mov_b32 s33, s32
17456 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17457 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17458 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17459 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17460 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_bf16@abs32@hi
17461 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_bf16@abs32@lo
17462 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17463 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17464 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17465 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17466 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17467 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17468 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17469 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17470 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17471 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17472 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17473 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17474 ; GFX11-NEXT:    s_mov_b32 s33, s0
17475 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17476 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17478 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_bf16_inreg:
17479 ; GFX10-SCRATCH:       ; %bb.0:
17480 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17481 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17482 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17483 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17484 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17485 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17486 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17487 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17488 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_bf16@abs32@hi
17489 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_bf16@abs32@lo
17490 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17491 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17492 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17493 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17494 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17495 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17496 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17497 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17498 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17499 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17500 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17501 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17502 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17503 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17504 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17505   %val = bitcast i16 %arg to bfloat
17506   call amdgpu_gfx void @external_void_func_bf16(bfloat inreg %val)
17507   ret void
17510 define amdgpu_gfx void @test_call_external_void_func_v1bf16_inreg(i16 inreg %arg) #0 {
17511 ; GFX9-LABEL: test_call_external_void_func_v1bf16_inreg:
17512 ; GFX9:       ; %bb.0:
17513 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17514 ; GFX9-NEXT:    s_mov_b32 s34, s33
17515 ; GFX9-NEXT:    s_mov_b32 s33, s32
17516 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17517 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17518 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17519 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17520 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17521 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v1bf16@abs32@hi
17522 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v1bf16@abs32@lo
17523 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17524 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17525 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17526 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17527 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17528 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17529 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17530 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17531 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17532 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17533 ; GFX9-NEXT:    s_mov_b32 s33, s34
17534 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17535 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17537 ; GFX10-LABEL: test_call_external_void_func_v1bf16_inreg:
17538 ; GFX10:       ; %bb.0:
17539 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17540 ; GFX10-NEXT:    s_mov_b32 s34, s33
17541 ; GFX10-NEXT:    s_mov_b32 s33, s32
17542 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17543 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17544 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17545 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17546 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
17547 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v1bf16@abs32@hi
17548 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v1bf16@abs32@lo
17549 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
17550 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
17551 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
17552 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17553 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
17554 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
17555 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
17556 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17557 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17558 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17559 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17560 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
17561 ; GFX10-NEXT:    s_mov_b32 s33, s34
17562 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
17563 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17565 ; GFX11-LABEL: test_call_external_void_func_v1bf16_inreg:
17566 ; GFX11:       ; %bb.0:
17567 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17568 ; GFX11-NEXT:    s_mov_b32 s0, s33
17569 ; GFX11-NEXT:    s_mov_b32 s33, s32
17570 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17571 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17572 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17573 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17574 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v1bf16@abs32@hi
17575 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v1bf16@abs32@lo
17576 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17577 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17578 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17579 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17580 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17581 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17582 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17583 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17584 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17585 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17586 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17587 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17588 ; GFX11-NEXT:    s_mov_b32 s33, s0
17589 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17590 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17592 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v1bf16_inreg:
17593 ; GFX10-SCRATCH:       ; %bb.0:
17594 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17595 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17596 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17597 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17598 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17599 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17600 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17601 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17602 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v1bf16@abs32@hi
17603 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v1bf16@abs32@lo
17604 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17605 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17606 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17607 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17608 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17609 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17610 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17611 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17612 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17613 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17614 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17615 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17616 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17617 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17618 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17619   %val = bitcast i16 %arg to <1 x bfloat>
17620   call amdgpu_gfx void @external_void_func_v1bf16(<1 x bfloat> inreg %val)
17621   ret void
17624 define amdgpu_gfx void @test_call_external_void_func_v2bf16_inreg(i32 inreg %arg) #0 {
17625 ; GFX9-LABEL: test_call_external_void_func_v2bf16_inreg:
17626 ; GFX9:       ; %bb.0:
17627 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17628 ; GFX9-NEXT:    s_mov_b32 s34, s33
17629 ; GFX9-NEXT:    s_mov_b32 s33, s32
17630 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17631 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17632 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17633 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17634 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17635 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v2bf16@abs32@hi
17636 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v2bf16@abs32@lo
17637 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17638 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17639 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17640 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17641 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17642 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17643 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17644 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17645 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17646 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17647 ; GFX9-NEXT:    s_mov_b32 s33, s34
17648 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17649 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17651 ; GFX10-LABEL: test_call_external_void_func_v2bf16_inreg:
17652 ; GFX10:       ; %bb.0:
17653 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17654 ; GFX10-NEXT:    s_mov_b32 s34, s33
17655 ; GFX10-NEXT:    s_mov_b32 s33, s32
17656 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17657 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17658 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17659 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17660 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
17661 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v2bf16@abs32@hi
17662 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v2bf16@abs32@lo
17663 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
17664 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
17665 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
17666 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17667 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
17668 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
17669 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
17670 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17671 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17672 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17673 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17674 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
17675 ; GFX10-NEXT:    s_mov_b32 s33, s34
17676 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
17677 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17679 ; GFX11-LABEL: test_call_external_void_func_v2bf16_inreg:
17680 ; GFX11:       ; %bb.0:
17681 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17682 ; GFX11-NEXT:    s_mov_b32 s0, s33
17683 ; GFX11-NEXT:    s_mov_b32 s33, s32
17684 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17685 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17686 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17687 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17688 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v2bf16@abs32@hi
17689 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v2bf16@abs32@lo
17690 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17691 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17692 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17693 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17694 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17695 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17696 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17697 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17698 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17699 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17700 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17701 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17702 ; GFX11-NEXT:    s_mov_b32 s33, s0
17703 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17704 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17706 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v2bf16_inreg:
17707 ; GFX10-SCRATCH:       ; %bb.0:
17708 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17709 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17710 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17711 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17712 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17713 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17714 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17715 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17716 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v2bf16@abs32@hi
17717 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v2bf16@abs32@lo
17718 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17719 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17720 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17721 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17722 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17723 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17724 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17725 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17726 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17727 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17728 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17729 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17730 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17731 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17732 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17733   %val = bitcast i32 %arg to <2 x bfloat>
17734   call amdgpu_gfx void @external_void_func_v2bf16(<2 x bfloat> inreg %val)
17735   ret void
17738 define amdgpu_gfx void @test_call_external_void_func_v3bf16_inreg(<3 x i16> inreg %arg) #0 {
17739 ; GFX9-LABEL: test_call_external_void_func_v3bf16_inreg:
17740 ; GFX9:       ; %bb.0:
17741 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17742 ; GFX9-NEXT:    s_mov_b32 s34, s33
17743 ; GFX9-NEXT:    s_mov_b32 s33, s32
17744 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17745 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17746 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17747 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17748 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17749 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v3bf16@abs32@hi
17750 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v3bf16@abs32@lo
17751 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17752 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17753 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17754 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17755 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17756 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17757 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17758 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17759 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17760 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17761 ; GFX9-NEXT:    s_mov_b32 s33, s34
17762 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17763 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17765 ; GFX10-LABEL: test_call_external_void_func_v3bf16_inreg:
17766 ; GFX10:       ; %bb.0:
17767 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17768 ; GFX10-NEXT:    s_mov_b32 s34, s33
17769 ; GFX10-NEXT:    s_mov_b32 s33, s32
17770 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17771 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17772 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17773 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17774 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
17775 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v3bf16@abs32@hi
17776 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v3bf16@abs32@lo
17777 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
17778 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
17779 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
17780 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17781 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
17782 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
17783 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
17784 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17785 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17786 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17787 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17788 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
17789 ; GFX10-NEXT:    s_mov_b32 s33, s34
17790 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
17791 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17793 ; GFX11-LABEL: test_call_external_void_func_v3bf16_inreg:
17794 ; GFX11:       ; %bb.0:
17795 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17796 ; GFX11-NEXT:    s_mov_b32 s0, s33
17797 ; GFX11-NEXT:    s_mov_b32 s33, s32
17798 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17799 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17800 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17801 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17802 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v3bf16@abs32@hi
17803 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v3bf16@abs32@lo
17804 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17805 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17806 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17807 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17808 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17809 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17810 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17811 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17812 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17813 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17814 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17815 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17816 ; GFX11-NEXT:    s_mov_b32 s33, s0
17817 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17818 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17820 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v3bf16_inreg:
17821 ; GFX10-SCRATCH:       ; %bb.0:
17822 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17823 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17824 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17825 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17826 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17827 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17828 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17829 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17830 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v3bf16@abs32@hi
17831 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v3bf16@abs32@lo
17832 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17833 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17834 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17835 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17836 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17837 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17838 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17839 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17840 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17841 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17842 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17843 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17844 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17845 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17846 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17847   %val = bitcast <3 x i16> %arg to <3 x bfloat>
17848   call amdgpu_gfx void @external_void_func_v3bf16(<3 x bfloat> inreg %val)
17849   ret void
17852 define amdgpu_gfx void @test_call_external_void_func_v4bf16_inreg(<4 x i16> inreg %arg) #0 {
17853 ; GFX9-LABEL: test_call_external_void_func_v4bf16_inreg:
17854 ; GFX9:       ; %bb.0:
17855 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17856 ; GFX9-NEXT:    s_mov_b32 s34, s33
17857 ; GFX9-NEXT:    s_mov_b32 s33, s32
17858 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17859 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17860 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17861 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17862 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17863 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v4bf16@abs32@hi
17864 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v4bf16@abs32@lo
17865 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17866 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17867 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17868 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17869 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17870 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17871 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17872 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17873 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17874 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17875 ; GFX9-NEXT:    s_mov_b32 s33, s34
17876 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17877 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17879 ; GFX10-LABEL: test_call_external_void_func_v4bf16_inreg:
17880 ; GFX10:       ; %bb.0:
17881 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17882 ; GFX10-NEXT:    s_mov_b32 s34, s33
17883 ; GFX10-NEXT:    s_mov_b32 s33, s32
17884 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17885 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17886 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17887 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17888 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
17889 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v4bf16@abs32@hi
17890 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v4bf16@abs32@lo
17891 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
17892 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
17893 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
17894 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17895 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
17896 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
17897 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
17898 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17899 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17900 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
17901 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
17902 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
17903 ; GFX10-NEXT:    s_mov_b32 s33, s34
17904 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
17905 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17907 ; GFX11-LABEL: test_call_external_void_func_v4bf16_inreg:
17908 ; GFX11:       ; %bb.0:
17909 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17910 ; GFX11-NEXT:    s_mov_b32 s0, s33
17911 ; GFX11-NEXT:    s_mov_b32 s33, s32
17912 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17913 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
17914 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17915 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
17916 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v4bf16@abs32@hi
17917 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v4bf16@abs32@lo
17918 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
17919 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
17920 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
17921 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17922 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17923 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
17924 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
17925 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
17926 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
17927 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
17928 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
17929 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
17930 ; GFX11-NEXT:    s_mov_b32 s33, s0
17931 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
17932 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17934 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v4bf16_inreg:
17935 ; GFX10-SCRATCH:       ; %bb.0:
17936 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17937 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
17938 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
17939 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17940 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
17941 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17942 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17943 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
17944 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v4bf16@abs32@hi
17945 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v4bf16@abs32@lo
17946 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
17947 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
17948 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
17949 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
17950 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
17951 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
17952 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
17953 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
17954 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
17955 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
17956 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
17957 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
17958 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
17959 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
17960 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
17961   %val = bitcast <4 x i16> %arg to <4 x bfloat>
17962   call amdgpu_gfx void @external_void_func_v4bf16(<4 x bfloat> inreg %val)
17963   ret void
17966 define amdgpu_gfx void @test_call_external_void_func_v8bf16_inreg(<8 x i16> inreg %arg) #0 {
17967 ; GFX9-LABEL: test_call_external_void_func_v8bf16_inreg:
17968 ; GFX9:       ; %bb.0:
17969 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17970 ; GFX9-NEXT:    s_mov_b32 s34, s33
17971 ; GFX9-NEXT:    s_mov_b32 s33, s32
17972 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17973 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
17974 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17975 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
17976 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
17977 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v8bf16@abs32@hi
17978 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v8bf16@abs32@lo
17979 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
17980 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
17981 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
17982 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
17983 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
17984 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
17985 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
17986 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
17987 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
17988 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
17989 ; GFX9-NEXT:    s_mov_b32 s33, s34
17990 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
17991 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17993 ; GFX10-LABEL: test_call_external_void_func_v8bf16_inreg:
17994 ; GFX10:       ; %bb.0:
17995 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17996 ; GFX10-NEXT:    s_mov_b32 s34, s33
17997 ; GFX10-NEXT:    s_mov_b32 s33, s32
17998 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
17999 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
18000 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
18001 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
18002 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
18003 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v8bf16@abs32@hi
18004 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v8bf16@abs32@lo
18005 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
18006 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
18007 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
18008 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
18009 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
18010 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
18011 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
18012 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
18013 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
18014 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
18015 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
18016 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
18017 ; GFX10-NEXT:    s_mov_b32 s33, s34
18018 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
18019 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
18021 ; GFX11-LABEL: test_call_external_void_func_v8bf16_inreg:
18022 ; GFX11:       ; %bb.0:
18023 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18024 ; GFX11-NEXT:    s_mov_b32 s0, s33
18025 ; GFX11-NEXT:    s_mov_b32 s33, s32
18026 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
18027 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
18028 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
18029 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
18030 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v8bf16@abs32@hi
18031 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v8bf16@abs32@lo
18032 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
18033 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
18034 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
18035 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
18036 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
18037 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
18038 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
18039 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
18040 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
18041 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
18042 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
18043 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
18044 ; GFX11-NEXT:    s_mov_b32 s33, s0
18045 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
18046 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
18048 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v8bf16_inreg:
18049 ; GFX10-SCRATCH:       ; %bb.0:
18050 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18051 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
18052 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
18053 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
18054 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
18055 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
18056 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
18057 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
18058 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v8bf16@abs32@hi
18059 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v8bf16@abs32@lo
18060 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
18061 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
18062 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
18063 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
18064 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
18065 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
18066 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
18067 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
18068 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
18069 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
18070 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
18071 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
18072 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
18073 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
18074 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
18075   %val = bitcast <8 x i16> %arg to <8 x bfloat>
18076   call amdgpu_gfx void @external_void_func_v8bf16(<8 x bfloat> inreg %val)
18077   ret void
18080 define amdgpu_gfx void @test_call_external_void_func_v16bf16_inreg(<16 x i16> inreg %arg) #0 {
18081 ; GFX9-LABEL: test_call_external_void_func_v16bf16_inreg:
18082 ; GFX9:       ; %bb.0:
18083 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18084 ; GFX9-NEXT:    s_mov_b32 s34, s33
18085 ; GFX9-NEXT:    s_mov_b32 s33, s32
18086 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
18087 ; GFX9-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
18088 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
18089 ; GFX9-NEXT:    v_writelane_b32 v40, s34, 2
18090 ; GFX9-NEXT:    v_writelane_b32 v40, s30, 0
18091 ; GFX9-NEXT:    s_mov_b32 s35, external_void_func_v16bf16@abs32@hi
18092 ; GFX9-NEXT:    s_mov_b32 s34, external_void_func_v16bf16@abs32@lo
18093 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
18094 ; GFX9-NEXT:    v_writelane_b32 v40, s31, 1
18095 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[34:35]
18096 ; GFX9-NEXT:    v_readlane_b32 s31, v40, 1
18097 ; GFX9-NEXT:    v_readlane_b32 s30, v40, 0
18098 ; GFX9-NEXT:    v_readlane_b32 s34, v40, 2
18099 ; GFX9-NEXT:    s_or_saveexec_b64 s[36:37], -1
18100 ; GFX9-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
18101 ; GFX9-NEXT:    s_mov_b64 exec, s[36:37]
18102 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
18103 ; GFX9-NEXT:    s_mov_b32 s33, s34
18104 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
18105 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
18107 ; GFX10-LABEL: test_call_external_void_func_v16bf16_inreg:
18108 ; GFX10:       ; %bb.0:
18109 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18110 ; GFX10-NEXT:    s_mov_b32 s34, s33
18111 ; GFX10-NEXT:    s_mov_b32 s33, s32
18112 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
18113 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill
18114 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
18115 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
18116 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
18117 ; GFX10-NEXT:    s_mov_b32 s35, external_void_func_v16bf16@abs32@hi
18118 ; GFX10-NEXT:    s_mov_b32 s34, external_void_func_v16bf16@abs32@lo
18119 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
18120 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
18121 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
18122 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[34:35]
18123 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
18124 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
18125 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
18126 ; GFX10-NEXT:    s_or_saveexec_b32 s35, -1
18127 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload
18128 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
18129 ; GFX10-NEXT:    s_mov_b32 exec_lo, s35
18130 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
18131 ; GFX10-NEXT:    s_mov_b32 s33, s34
18132 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
18133 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
18135 ; GFX11-LABEL: test_call_external_void_func_v16bf16_inreg:
18136 ; GFX11:       ; %bb.0:
18137 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18138 ; GFX11-NEXT:    s_mov_b32 s0, s33
18139 ; GFX11-NEXT:    s_mov_b32 s33, s32
18140 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
18141 ; GFX11-NEXT:    scratch_store_b32 off, v40, s33 ; 4-byte Folded Spill
18142 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
18143 ; GFX11-NEXT:    v_writelane_b32 v40, s0, 2
18144 ; GFX11-NEXT:    s_mov_b32 s1, external_void_func_v16bf16@abs32@hi
18145 ; GFX11-NEXT:    s_mov_b32 s0, external_void_func_v16bf16@abs32@lo
18146 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
18147 ; GFX11-NEXT:    v_writelane_b32 v40, s30, 0
18148 ; GFX11-NEXT:    v_writelane_b32 v40, s31, 1
18149 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
18150 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
18151 ; GFX11-NEXT:    v_readlane_b32 s31, v40, 1
18152 ; GFX11-NEXT:    v_readlane_b32 s30, v40, 0
18153 ; GFX11-NEXT:    v_readlane_b32 s0, v40, 2
18154 ; GFX11-NEXT:    s_or_saveexec_b32 s1, -1
18155 ; GFX11-NEXT:    scratch_load_b32 v40, off, s33 ; 4-byte Folded Reload
18156 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
18157 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
18158 ; GFX11-NEXT:    s_mov_b32 s33, s0
18159 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
18160 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
18162 ; GFX10-SCRATCH-LABEL: test_call_external_void_func_v16bf16_inreg:
18163 ; GFX10-SCRATCH:       ; %bb.0:
18164 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18165 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, s33
18166 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s32
18167 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
18168 ; GFX10-SCRATCH-NEXT:    scratch_store_dword off, v40, s33 ; 4-byte Folded Spill
18169 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
18170 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
18171 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s0, 2
18172 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s1, external_void_func_v16bf16@abs32@hi
18173 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s0, external_void_func_v16bf16@abs32@lo
18174 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, 16
18175 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s30, 0
18176 ; GFX10-SCRATCH-NEXT:    v_writelane_b32 v40, s31, 1
18177 ; GFX10-SCRATCH-NEXT:    s_swappc_b64 s[30:31], s[0:1]
18178 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s31, v40, 1
18179 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s30, v40, 0
18180 ; GFX10-SCRATCH-NEXT:    v_readlane_b32 s0, v40, 2
18181 ; GFX10-SCRATCH-NEXT:    s_or_saveexec_b32 s1, -1
18182 ; GFX10-SCRATCH-NEXT:    scratch_load_dword v40, off, s33 ; 4-byte Folded Reload
18183 ; GFX10-SCRATCH-NEXT:    s_waitcnt_depctr 0xffe3
18184 ; GFX10-SCRATCH-NEXT:    s_mov_b32 exec_lo, s1
18185 ; GFX10-SCRATCH-NEXT:    s_add_i32 s32, s32, -16
18186 ; GFX10-SCRATCH-NEXT:    s_mov_b32 s33, s0
18187 ; GFX10-SCRATCH-NEXT:    s_waitcnt vmcnt(0)
18188 ; GFX10-SCRATCH-NEXT:    s_setpc_b64 s[30:31]
18189   %val = bitcast <16 x i16> %arg to <16 x bfloat>
18190   call amdgpu_gfx void @external_void_func_v16bf16(<16 x bfloat> inreg %val)
18191   ret void
18194 declare hidden amdgpu_gfx void @byval_align16_f64_arg(<32 x i32>, ptr addrspace(5) byval(double) align 16) #0
18195 declare hidden amdgpu_gfx void @stack_passed_f64_arg(<32 x i32>, double) #0
18196 declare hidden amdgpu_gfx void @external_void_func_12xv3i32(<3 x i32>, <3 x i32>, <3 x i32>, <3 x i32>,
18197     <3 x i32>, <3 x i32>, <3 x i32>, <3 x i32>, <3 x i32>, <3 x i32>, <3 x i32>, <3 x i32>) #0
18198 declare hidden amdgpu_gfx void @external_void_func_8xv5i32(<5 x i32>, <5 x i32>, <5 x i32>, <5 x i32>,
18199     <5 x i32>, <5 x i32>, <5 x i32>, <5 x i32>) #0
18200 declare hidden amdgpu_gfx void @external_void_func_12xv3f32(<3 x float>, <3 x float>, <3 x float>, <3 x float>,
18201     <3 x float>, <3 x float>, <3 x float>, <3 x float>, <3 x float>, <3 x float>, <3 x float>, <3 x float>) #0
18202 declare hidden amdgpu_gfx void @external_void_func_8xv5f32(<5 x float>, <5 x float>, <5 x float>, <5 x float>,
18203     <5 x float>, <5 x float>, <5 x float>, <5 x float>) #0
18204 attributes #0 = { nounwind }
18205 attributes #1 = { nounwind noinline }