1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2; Note update_mir_test_checks does not support generating checks for
3; the frame info, so some functions have manually added stack object
4; checks.
5; RUN: llc -march=amdgcn -mcpu=fiji -O0 -stop-after=irtranslator -global-isel -verify-machineinstrs -o - %s | FileCheck %s
6; FIXME: pre-VI should have same ABI without legal i16 operations.
7
8define void @void_func_empty_arg({} %arg0, i32 %arg1) #0 {
9  ; CHECK-LABEL: name: void_func_empty_arg
10  ; CHECK: bb.1 (%ir-block.0):
11  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
12  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
13  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
14  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
15  ; CHECK:   G_STORE [[COPY]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
16  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
17  ; CHECK:   S_SETPC_B64_return [[COPY2]]
18  store i32 %arg1, i32 addrspace(1)* undef
19  ret void
20}
21
22define void @void_func_empty_array([0 x i8] %arg0, i32 %arg1) #0 {
23  ; CHECK-LABEL: name: void_func_empty_array
24  ; CHECK: bb.1 (%ir-block.0):
25  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
26  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
27  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
28  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
29  ; CHECK:   G_STORE [[COPY]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
30  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
31  ; CHECK:   S_SETPC_B64_return [[COPY2]]
32  store i32 %arg1, i32 addrspace(1)* undef
33  ret void
34}
35
36define void @void_func_i1(i1 %arg0) #0 {
37  ; CHECK-LABEL: name: void_func_i1
38  ; CHECK: bb.1 (%ir-block.0):
39  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
40  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
41  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
42  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
43  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
44  ; CHECK:   G_STORE [[TRUNC]](s1), [[DEF]](p1) :: (store 1 into `i1 addrspace(1)* undef`, addrspace 1)
45  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
46  ; CHECK:   S_SETPC_B64_return [[COPY2]]
47  store i1 %arg0, i1 addrspace(1)* undef
48  ret void
49}
50
51define void @void_func_i1_zeroext(i1 zeroext %arg0) #0 {
52  ; CHECK-LABEL: name: void_func_i1_zeroext
53  ; CHECK: bb.1 (%ir-block.0):
54  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
55  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
56  ; CHECK:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 1
57  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ASSERT_ZEXT]](s32)
58  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
59  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12
60  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
61  ; CHECK:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s1)
62  ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ZEXT]], [[C]]
63  ; CHECK:   G_STORE [[ADD]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
64  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
65  ; CHECK:   S_SETPC_B64_return [[COPY2]]
66  %ext = zext i1 %arg0 to i32
67  %add = add i32 %ext, 12
68  store i32 %add, i32 addrspace(1)* undef
69  ret void
70}
71
72define void @void_func_i1_signext(i1 signext %arg0) #0 {
73  ; CHECK-LABEL: name: void_func_i1_signext
74  ; CHECK: bb.1 (%ir-block.0):
75  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
76  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
77  ; CHECK:   [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 1
78  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ASSERT_SEXT]](s32)
79  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
80  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12
81  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
82  ; CHECK:   [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s1)
83  ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[SEXT]], [[C]]
84  ; CHECK:   G_STORE [[ADD]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
85  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
86  ; CHECK:   S_SETPC_B64_return [[COPY2]]
87  %ext = sext i1 %arg0 to i32
88  %add = add i32 %ext, 12
89  store i32 %add, i32 addrspace(1)* undef
90  ret void
91}
92
93define void @i1_arg_i1_use(i1 %arg) #0 {
94  ; CHECK-LABEL: name: i1_arg_i1_use
95  ; CHECK: bb.1.bb:
96  ; CHECK:   successors: %bb.2(0x40000000), %bb.3(0x40000000)
97  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
98  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
99  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
100  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
101  ; CHECK:   [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
102  ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
103  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
104  ; CHECK:   [[XOR:%[0-9]+]]:_(s1) = G_XOR [[TRUNC]], [[C]]
105  ; CHECK:   [[INT:%[0-9]+]]:_(s1), [[INT1:%[0-9]+]]:_(s64) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.if), [[XOR]](s1)
106  ; CHECK:   G_BRCOND [[INT]](s1), %bb.2
107  ; CHECK:   G_BR %bb.3
108  ; CHECK: bb.2.bb1:
109  ; CHECK:   successors: %bb.3(0x80000000)
110  ; CHECK:   G_STORE [[C1]](s32), [[DEF]](p1) :: (volatile store 4 into `i32 addrspace(1)* undef`, addrspace 1)
111  ; CHECK: bb.3.bb2:
112  ; CHECK:   G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.end.cf), [[INT1]](s64)
113  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
114  ; CHECK:   S_SETPC_B64_return [[COPY2]]
115bb:
116  br i1 %arg, label %bb2, label %bb1
117
118bb1:
119  store volatile i32 0, i32 addrspace(1)* undef
120  br label %bb2
121
122bb2:
123  ret void
124}
125
126define void @void_func_i8(i8 %arg0) #0 {
127  ; CHECK-LABEL: name: void_func_i8
128  ; CHECK: bb.1 (%ir-block.0):
129  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
130  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
131  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
132  ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16)
133  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
134  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
135  ; CHECK:   G_STORE [[TRUNC1]](s8), [[DEF]](p1) :: (store 1 into `i8 addrspace(1)* undef`, addrspace 1)
136  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
137  ; CHECK:   S_SETPC_B64_return [[COPY2]]
138  store i8 %arg0, i8 addrspace(1)* undef
139  ret void
140}
141
142define void @void_func_i8_zeroext(i8 zeroext %arg0) #0 {
143  ; CHECK-LABEL: name: void_func_i8_zeroext
144  ; CHECK: bb.1 (%ir-block.0):
145  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
146  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
147  ; CHECK:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 8
148  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_ZEXT]](s32)
149  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
150  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12
151  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
152  ; CHECK:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s8)
153  ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ZEXT]], [[C]]
154  ; CHECK:   G_STORE [[ADD]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
155  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
156  ; CHECK:   S_SETPC_B64_return [[COPY2]]
157  %ext = zext i8 %arg0 to i32
158  %add = add i32 %ext, 12
159  store i32 %add, i32 addrspace(1)* undef
160  ret void
161}
162
163define void @void_func_i8_signext(i8 signext %arg0) #0 {
164  ; CHECK-LABEL: name: void_func_i8_signext
165  ; CHECK: bb.1 (%ir-block.0):
166  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
167  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
168  ; CHECK:   [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 8
169  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[ASSERT_SEXT]](s32)
170  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
171  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12
172  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
173  ; CHECK:   [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s8)
174  ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[SEXT]], [[C]]
175  ; CHECK:   G_STORE [[ADD]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
176  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
177  ; CHECK:   S_SETPC_B64_return [[COPY2]]
178  %ext = sext i8 %arg0 to i32
179  %add = add i32 %ext, 12
180  store i32 %add, i32 addrspace(1)* undef
181  ret void
182}
183
184define void @void_func_i16(i16 %arg0) #0 {
185  ; CHECK-LABEL: name: void_func_i16
186  ; CHECK: bb.1 (%ir-block.0):
187  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
188  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
189  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
190  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
191  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
192  ; CHECK:   G_STORE [[TRUNC]](s16), [[DEF]](p1) :: (store 2 into `i16 addrspace(1)* undef`, addrspace 1)
193  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
194  ; CHECK:   S_SETPC_B64_return [[COPY2]]
195  store i16 %arg0, i16 addrspace(1)* undef
196  ret void
197}
198
199define void @void_func_i16_zeroext(i16 zeroext %arg0) #0 {
200  ; CHECK-LABEL: name: void_func_i16_zeroext
201  ; CHECK: bb.1 (%ir-block.0):
202  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
203  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
204  ; CHECK:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 16
205  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_ZEXT]](s32)
206  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
207  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12
208  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
209  ; CHECK:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s16)
210  ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ZEXT]], [[C]]
211  ; CHECK:   G_STORE [[ADD]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
212  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
213  ; CHECK:   S_SETPC_B64_return [[COPY2]]
214  %ext = zext i16 %arg0 to i32
215  %add = add i32 %ext, 12
216  store i32 %add, i32 addrspace(1)* undef
217  ret void
218}
219
220define void @void_func_i16_signext(i16 signext %arg0) #0 {
221  ; CHECK-LABEL: name: void_func_i16_signext
222  ; CHECK: bb.1 (%ir-block.0):
223  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
224  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
225  ; CHECK:   [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 16
226  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[ASSERT_SEXT]](s32)
227  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
228  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12
229  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
230  ; CHECK:   [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s16)
231  ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[SEXT]], [[C]]
232  ; CHECK:   G_STORE [[ADD]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
233  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
234  ; CHECK:   S_SETPC_B64_return [[COPY2]]
235  %ext = sext i16 %arg0 to i32
236  %add = add i32 %ext, 12
237  store i32 %add, i32 addrspace(1)* undef
238  ret void
239}
240
241define void @void_func_i24(i24 %arg0) #0 {
242  ; CHECK-LABEL: name: void_func_i24
243  ; CHECK: bb.1 (%ir-block.0):
244  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
245  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
246  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s24) = G_TRUNC [[COPY]](s32)
247  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
248  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
249  ; CHECK:   G_STORE [[TRUNC]](s24), [[DEF]](p1) :: (store 3 into `i24 addrspace(1)* undef`, align 4, addrspace 1)
250  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
251  ; CHECK:   S_SETPC_B64_return [[COPY2]]
252  store i24 %arg0, i24 addrspace(1)* undef
253  ret void
254}
255
256define void @void_func_i24_zeroext(i24 zeroext %arg0) #0 {
257  ; CHECK-LABEL: name: void_func_i24_zeroext
258  ; CHECK: bb.1 (%ir-block.0):
259  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
260  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
261  ; CHECK:   [[ASSERT_ZEXT:%[0-9]+]]:_(s32) = G_ASSERT_ZEXT [[COPY]], 24
262  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s24) = G_TRUNC [[ASSERT_ZEXT]](s32)
263  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
264  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
265  ; CHECK:   G_STORE [[TRUNC]](s24), [[DEF]](p1) :: (store 3 into `i24 addrspace(1)* undef`, align 4, addrspace 1)
266  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
267  ; CHECK:   S_SETPC_B64_return [[COPY2]]
268  store i24 %arg0, i24 addrspace(1)* undef
269  ret void
270}
271
272define void @void_func_i24_signext(i24 signext %arg0) #0 {
273  ; CHECK-LABEL: name: void_func_i24_signext
274  ; CHECK: bb.1 (%ir-block.0):
275  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
276  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
277  ; CHECK:   [[ASSERT_SEXT:%[0-9]+]]:_(s32) = G_ASSERT_SEXT [[COPY]], 24
278  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s24) = G_TRUNC [[ASSERT_SEXT]](s32)
279  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
280  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
281  ; CHECK:   G_STORE [[TRUNC]](s24), [[DEF]](p1) :: (store 3 into `i24 addrspace(1)* undef`, align 4, addrspace 1)
282  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
283  ; CHECK:   S_SETPC_B64_return [[COPY2]]
284  store i24 %arg0, i24 addrspace(1)* undef
285  ret void
286}
287
288define void @void_func_i32(i32 %arg0) #0 {
289  ; CHECK-LABEL: name: void_func_i32
290  ; CHECK: bb.1 (%ir-block.0):
291  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
292  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
293  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
294  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
295  ; CHECK:   G_STORE [[COPY]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
296  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
297  ; CHECK:   S_SETPC_B64_return [[COPY2]]
298  store i32 %arg0, i32 addrspace(1)* undef
299  ret void
300}
301
302; The signext is an no-op
303define void @void_func_i32_signext(i32 signext %arg0) #0 {
304  ; CHECK-LABEL: name: void_func_i32_signext
305  ; CHECK: bb.1 (%ir-block.0):
306  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
307  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
308  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
309  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
310  ; CHECK:   G_STORE [[COPY]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
311  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
312  ; CHECK:   S_SETPC_B64_return [[COPY2]]
313  store i32 %arg0, i32 addrspace(1)* undef
314  ret void
315}
316
317; The zeroext is an no-op
318define void @void_func_i32_zeroext(i32 zeroext %arg0) #0 {
319  ; CHECK-LABEL: name: void_func_i32_zeroext
320  ; CHECK: bb.1 (%ir-block.0):
321  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
322  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
323  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
324  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
325  ; CHECK:   G_STORE [[COPY]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
326  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
327  ; CHECK:   S_SETPC_B64_return [[COPY2]]
328  store i32 %arg0, i32 addrspace(1)* undef
329  ret void
330}
331
332define void @void_func_p3i8(i8 addrspace(3)* %arg0) #0 {
333  ; CHECK-LABEL: name: void_func_p3i8
334  ; CHECK: bb.1 (%ir-block.0):
335  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
336  ; CHECK:   [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0
337  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
338  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
339  ; CHECK:   G_STORE [[COPY]](p3), [[DEF]](p1) :: (store 4 into `i8 addrspace(3)* addrspace(1)* undef`, addrspace 1)
340  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
341  ; CHECK:   S_SETPC_B64_return [[COPY2]]
342  store i8 addrspace(3)* %arg0, i8 addrspace(3)* addrspace(1)* undef
343  ret void
344}
345
346define void @void_func_i48(i48 %arg0) #0 {
347  ; CHECK-LABEL: name: void_func_i48
348  ; CHECK: bb.1 (%ir-block.0):
349  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
350  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
351  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
352  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
353  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s48) = G_TRUNC [[MV]](s64)
354  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
355  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
356  ; CHECK:   G_STORE [[TRUNC]](s48), [[DEF]](p1) :: (store 6 into `i48 addrspace(1)* undef`, align 8, addrspace 1)
357  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
358  ; CHECK:   S_SETPC_B64_return [[COPY3]]
359  store i48 %arg0, i48 addrspace(1)* undef
360  ret void
361}
362
363define void @void_func_i48_zeroext(i48 zeroext %arg0) #0 {
364  ; CHECK-LABEL: name: void_func_i48_zeroext
365  ; CHECK: bb.1 (%ir-block.0):
366  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
367  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
368  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
369  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
370  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s48) = G_TRUNC [[MV]](s64)
371  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
372  ; CHECK:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
373  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
374  ; CHECK:   [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s48)
375  ; CHECK:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[ZEXT]], [[C]]
376  ; CHECK:   G_STORE [[ADD]](s64), [[DEF]](p1) :: (store 8 into `i64 addrspace(1)* undef`, addrspace 1)
377  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
378  ; CHECK:   S_SETPC_B64_return [[COPY3]]
379  %ext = zext i48 %arg0 to i64
380  %add = add i64 %ext, 12
381  store i64 %add, i64 addrspace(1)* undef
382  ret void
383}
384
385define void @void_func_i48_signext(i48 signext %arg0) #0 {
386  ; CHECK-LABEL: name: void_func_i48_signext
387  ; CHECK: bb.1 (%ir-block.0):
388  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
389  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
390  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
391  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
392  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s48) = G_TRUNC [[MV]](s64)
393  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
394  ; CHECK:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
395  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
396  ; CHECK:   [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[TRUNC]](s48)
397  ; CHECK:   [[ADD:%[0-9]+]]:_(s64) = G_ADD [[SEXT]], [[C]]
398  ; CHECK:   G_STORE [[ADD]](s64), [[DEF]](p1) :: (store 8 into `i64 addrspace(1)* undef`, addrspace 1)
399  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
400  ; CHECK:   S_SETPC_B64_return [[COPY3]]
401  %ext = sext i48 %arg0 to i64
402  %add = add i64 %ext, 12
403  store i64 %add, i64 addrspace(1)* undef
404  ret void
405}
406
407define void @void_func_i64(i64 %arg0) #0 {
408  ; CHECK-LABEL: name: void_func_i64
409  ; CHECK: bb.1 (%ir-block.0):
410  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
411  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
412  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
413  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
414  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
415  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
416  ; CHECK:   G_STORE [[MV]](s64), [[DEF]](p1) :: (store 8 into `i64 addrspace(1)* undef`, addrspace 1)
417  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
418  ; CHECK:   S_SETPC_B64_return [[COPY3]]
419  store i64 %arg0, i64 addrspace(1)* undef
420  ret void
421}
422
423define void @void_func_i95(i95 %arg0) #0 {
424  ; CHECK-LABEL: name: void_func_i95
425  ; CHECK: bb.1 (%ir-block.0):
426  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
427  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
428  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
429  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
430  ; CHECK:   [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
431  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s95) = G_TRUNC [[MV]](s96)
432  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
433  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
434  ; CHECK:   G_STORE [[TRUNC]](s95), [[DEF]](p1) :: (store 12 into `i95 addrspace(1)* undef`, align 8, addrspace 1)
435  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
436  ; CHECK:   S_SETPC_B64_return [[COPY4]]
437  store i95 %arg0, i95 addrspace(1)* undef
438  ret void
439}
440
441define void @void_func_i95_zeroext(i95 zeroext %arg0) #0 {
442  ; CHECK-LABEL: name: void_func_i95_zeroext
443  ; CHECK: bb.1 (%ir-block.0):
444  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
445  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
446  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
447  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
448  ; CHECK:   [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
449  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s95) = G_TRUNC [[MV]](s96)
450  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
451  ; CHECK:   [[C:%[0-9]+]]:_(s96) = G_CONSTANT i96 12
452  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
453  ; CHECK:   [[ZEXT:%[0-9]+]]:_(s96) = G_ZEXT [[TRUNC]](s95)
454  ; CHECK:   [[ADD:%[0-9]+]]:_(s96) = G_ADD [[ZEXT]], [[C]]
455  ; CHECK:   G_STORE [[ADD]](s96), [[DEF]](p1) :: (store 12 into `i96 addrspace(1)* undef`, align 8, addrspace 1)
456  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
457  ; CHECK:   S_SETPC_B64_return [[COPY4]]
458  %ext = zext i95 %arg0 to i96
459  %add = add i96 %ext, 12
460  store i96 %add, i96 addrspace(1)* undef
461  ret void
462}
463
464define void @void_func_i95_signext(i95 signext %arg0) #0 {
465  ; CHECK-LABEL: name: void_func_i95_signext
466  ; CHECK: bb.1 (%ir-block.0):
467  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
468  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
469  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
470  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
471  ; CHECK:   [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
472  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s95) = G_TRUNC [[MV]](s96)
473  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
474  ; CHECK:   [[C:%[0-9]+]]:_(s96) = G_CONSTANT i96 12
475  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
476  ; CHECK:   [[SEXT:%[0-9]+]]:_(s96) = G_SEXT [[TRUNC]](s95)
477  ; CHECK:   [[ADD:%[0-9]+]]:_(s96) = G_ADD [[SEXT]], [[C]]
478  ; CHECK:   G_STORE [[ADD]](s96), [[DEF]](p1) :: (store 12 into `i96 addrspace(1)* undef`, align 8, addrspace 1)
479  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
480  ; CHECK:   S_SETPC_B64_return [[COPY4]]
481  %ext = sext i95 %arg0 to i96
482  %add = add i96 %ext, 12
483  store i96 %add, i96 addrspace(1)* undef
484  ret void
485}
486
487define void @void_func_i96(i96 %arg0) #0 {
488  ; CHECK-LABEL: name: void_func_i96
489  ; CHECK: bb.1 (%ir-block.0):
490  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
491  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
492  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
493  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
494  ; CHECK:   [[MV:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
495  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
496  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
497  ; CHECK:   G_STORE [[MV]](s96), [[DEF]](p1) :: (store 12 into `i96 addrspace(1)* undef`, align 8, addrspace 1)
498  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
499  ; CHECK:   S_SETPC_B64_return [[COPY4]]
500  store i96 %arg0, i96 addrspace(1)* undef
501  ret void
502}
503
504define void @void_func_p0i8(i8* %arg0) #0 {
505  ; CHECK-LABEL: name: void_func_p0i8
506  ; CHECK: bb.1 (%ir-block.0):
507  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
508  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
509  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
510  ; CHECK:   [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
511  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
512  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
513  ; CHECK:   G_STORE [[MV]](p0), [[DEF]](p1) :: (store 8 into `i8* addrspace(1)* undef`, addrspace 1)
514  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
515  ; CHECK:   S_SETPC_B64_return [[COPY3]]
516  store i8* %arg0, i8* addrspace(1)* undef
517  ret void
518}
519
520define void @void_func_p1i8(i8 addrspace(1)* %arg0) #0 {
521  ; CHECK-LABEL: name: void_func_p1i8
522  ; CHECK: bb.1 (%ir-block.0):
523  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
524  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
525  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
526  ; CHECK:   [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
527  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
528  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
529  ; CHECK:   G_STORE [[MV]](p1), [[DEF]](p1) :: (store 8 into `i8 addrspace(1)* addrspace(1)* undef`, addrspace 1)
530  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
531  ; CHECK:   S_SETPC_B64_return [[COPY3]]
532  store i8 addrspace(1)* %arg0, i8 addrspace(1)* addrspace(1)* undef
533  ret void
534}
535
536define void @void_func_f16(half %arg0) #0 {
537  ; CHECK-LABEL: name: void_func_f16
538  ; CHECK: bb.1 (%ir-block.0):
539  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
540  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
541  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
542  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
543  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
544  ; CHECK:   G_STORE [[TRUNC]](s16), [[DEF]](p1) :: (store 2 into `half addrspace(1)* undef`, addrspace 1)
545  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
546  ; CHECK:   S_SETPC_B64_return [[COPY2]]
547  store half %arg0, half addrspace(1)* undef
548  ret void
549}
550
551define void @void_func_f32(float %arg0) #0 {
552  ; CHECK-LABEL: name: void_func_f32
553  ; CHECK: bb.1 (%ir-block.0):
554  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
555  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
556  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
557  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
558  ; CHECK:   G_STORE [[COPY]](s32), [[DEF]](p1) :: (store 4 into `float addrspace(1)* undef`, addrspace 1)
559  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
560  ; CHECK:   S_SETPC_B64_return [[COPY2]]
561  store float %arg0, float addrspace(1)* undef
562  ret void
563}
564
565define void @void_func_f64(double %arg0) #0 {
566  ; CHECK-LABEL: name: void_func_f64
567  ; CHECK: bb.1 (%ir-block.0):
568  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
569  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
570  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
571  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
572  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
573  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
574  ; CHECK:   G_STORE [[MV]](s64), [[DEF]](p1) :: (store 8 into `double addrspace(1)* undef`, addrspace 1)
575  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
576  ; CHECK:   S_SETPC_B64_return [[COPY3]]
577  store double %arg0, double addrspace(1)* undef
578  ret void
579}
580
581define void @void_func_v2i32(<2 x i32> %arg0) #0 {
582  ; CHECK-LABEL: name: void_func_v2i32
583  ; CHECK: bb.1 (%ir-block.0):
584  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
585  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
586  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
587  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)
588  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
589  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
590  ; CHECK:   G_STORE [[BUILD_VECTOR]](<2 x s32>), [[DEF]](p1) :: (store 8 into `<2 x i32> addrspace(1)* undef`, addrspace 1)
591  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
592  ; CHECK:   S_SETPC_B64_return [[COPY3]]
593  store <2 x i32> %arg0, <2 x i32> addrspace(1)* undef
594  ret void
595}
596
597define void @void_func_v2i24(<2 x i24> %arg0) #0 {
598  ; CHECK-LABEL: name: void_func_v2i24
599  ; CHECK: bb.1 (%ir-block.0):
600  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
601  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
602  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
603  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)
604  ; CHECK:   [[TRUNC:%[0-9]+]]:_(<2 x s24>) = G_TRUNC [[BUILD_VECTOR]](<2 x s32>)
605  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
606  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
607  ; CHECK:   G_STORE [[TRUNC]](<2 x s24>), [[DEF]](p1) :: (store 6 into `<2 x i24> addrspace(1)* undef`, align 8, addrspace 1)
608  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
609  ; CHECK:   S_SETPC_B64_return [[COPY3]]
610  store <2 x i24> %arg0, <2 x i24> addrspace(1)* undef
611  ret void
612}
613
614define void @void_func_v3i24(<3 x i24> %arg0) #0 {
615  ; CHECK-LABEL: name: void_func_v3i24
616  ; CHECK: bb.1 (%ir-block.0):
617  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
618  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
619  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
620  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
621  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
622  ; CHECK:   [[TRUNC:%[0-9]+]]:_(<3 x s24>) = G_TRUNC [[BUILD_VECTOR]](<3 x s32>)
623  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
624  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
625  ; CHECK:   G_STORE [[TRUNC]](<3 x s24>), [[DEF]](p1) :: (store 9 into `<3 x i24> addrspace(1)* undef`, align 16, addrspace 1)
626  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
627  ; CHECK:   S_SETPC_B64_return [[COPY4]]
628  store <3 x i24> %arg0, <3 x i24> addrspace(1)* undef
629  ret void
630}
631
632define void @void_func_v2i8(<2 x i8> %arg0) #0 {
633  ; CHECK-LABEL: name: void_func_v2i8
634  ; CHECK: bb.1 (%ir-block.0):
635  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
636  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
637  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
638  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
639  ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
640  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR [[TRUNC]](s16), [[TRUNC1]](s16)
641  ; CHECK:   [[TRUNC2:%[0-9]+]]:_(<2 x s8>) = G_TRUNC [[BUILD_VECTOR]](<2 x s16>)
642  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
643  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
644  ; CHECK:   G_STORE [[TRUNC2]](<2 x s8>), [[DEF]](p1) :: (store 2 into `<2 x i8> addrspace(1)* undef`, addrspace 1)
645  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
646  ; CHECK:   S_SETPC_B64_return [[COPY3]]
647  store <2 x i8> %arg0, <2 x i8> addrspace(1)* undef
648  ret void
649}
650
651define void @void_func_v3i8(<3 x i8> %arg0) #0 {
652  ; CHECK-LABEL: name: void_func_v3i8
653  ; CHECK: bb.1 (%ir-block.0):
654  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
655  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
656  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
657  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
658  ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
659  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
660  ; CHECK:   [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)
661  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s16>) = G_BUILD_VECTOR [[TRUNC]](s16), [[TRUNC1]](s16), [[TRUNC2]](s16)
662  ; CHECK:   [[TRUNC3:%[0-9]+]]:_(<3 x s8>) = G_TRUNC [[BUILD_VECTOR]](<3 x s16>)
663  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
664  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
665  ; CHECK:   G_STORE [[TRUNC3]](<3 x s8>), [[DEF]](p1) :: (store 3 into `<3 x i8> addrspace(1)* undef`, align 4, addrspace 1)
666  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
667  ; CHECK:   S_SETPC_B64_return [[COPY4]]
668  store <3 x i8> %arg0, <3 x i8> addrspace(1)* undef
669  ret void
670}
671
672define void @void_func_v4i8(<4 x i8> %arg0) #0 {
673  ; CHECK-LABEL: name: void_func_v4i8
674  ; CHECK: bb.1 (%ir-block.0):
675  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
676  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
677  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
678  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
679  ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
680  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
681  ; CHECK:   [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)
682  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
683  ; CHECK:   [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32)
684  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[TRUNC]](s16), [[TRUNC1]](s16), [[TRUNC2]](s16), [[TRUNC3]](s16)
685  ; CHECK:   [[TRUNC4:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[BUILD_VECTOR]](<4 x s16>)
686  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
687  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
688  ; CHECK:   G_STORE [[TRUNC4]](<4 x s8>), [[DEF]](p1) :: (store 4 into `<4 x i8> addrspace(1)* undef`, addrspace 1)
689  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
690  ; CHECK:   S_SETPC_B64_return [[COPY5]]
691  store <4 x i8> %arg0, <4 x i8> addrspace(1)* undef
692  ret void
693}
694
695define void @void_func_v2p3i8(<2 x i8 addrspace(3)*> %arg0) #0 {
696  ; CHECK-LABEL: name: void_func_v2p3i8
697  ; CHECK: bb.1 (%ir-block.0):
698  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
699  ; CHECK:   [[COPY:%[0-9]+]]:_(p3) = COPY $vgpr0
700  ; CHECK:   [[COPY1:%[0-9]+]]:_(p3) = COPY $vgpr1
701  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p3>) = G_BUILD_VECTOR [[COPY]](p3), [[COPY1]](p3)
702  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
703  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
704  ; CHECK:   G_STORE [[BUILD_VECTOR]](<2 x p3>), [[DEF]](p1) :: (store 8 into `<2 x i8 addrspace(3)*> addrspace(1)* undef`, addrspace 1)
705  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
706  ; CHECK:   S_SETPC_B64_return [[COPY3]]
707  store <2 x i8 addrspace(3)*> %arg0, <2 x i8 addrspace(3)*> addrspace(1)* undef
708  ret void
709}
710
711define void @void_func_v3i32(<3 x i32> %arg0) #0 {
712  ; CHECK-LABEL: name: void_func_v3i32
713  ; CHECK: bb.1 (%ir-block.0):
714  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
715  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
716  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
717  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
718  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
719  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
720  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
721  ; CHECK:   G_STORE [[BUILD_VECTOR]](<3 x s32>), [[DEF]](p1) :: (store 12 into `<3 x i32> addrspace(1)* undef`, align 16, addrspace 1)
722  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
723  ; CHECK:   S_SETPC_B64_return [[COPY4]]
724  store <3 x i32> %arg0, <3 x i32> addrspace(1)* undef
725  ret void
726}
727
728define void @void_func_v4i32(<4 x i32> %arg0) #0 {
729  ; CHECK-LABEL: name: void_func_v4i32
730  ; CHECK: bb.1 (%ir-block.0):
731  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
732  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
733  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
734  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
735  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
736  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)
737  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
738  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
739  ; CHECK:   G_STORE [[BUILD_VECTOR]](<4 x s32>), [[DEF]](p1) :: (store 16 into `<4 x i32> addrspace(1)* undef`, addrspace 1)
740  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
741  ; CHECK:   S_SETPC_B64_return [[COPY5]]
742  store <4 x i32> %arg0, <4 x i32> addrspace(1)* undef
743  ret void
744}
745
746define void @void_func_v5i32(<5 x i32> %arg0) #0 {
747  ; CHECK-LABEL: name: void_func_v5i32
748  ; CHECK: bb.1 (%ir-block.0):
749  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $sgpr30_sgpr31
750  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
751  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
752  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
753  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
754  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
755  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32)
756  ; CHECK:   [[COPY5:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
757  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
758  ; CHECK:   G_STORE [[BUILD_VECTOR]](<5 x s32>), [[DEF]](p1) :: (store 20 into `<5 x i32> addrspace(1)* undef`, align 32, addrspace 1)
759  ; CHECK:   [[COPY6:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY5]]
760  ; CHECK:   S_SETPC_B64_return [[COPY6]]
761  store <5 x i32> %arg0, <5 x i32> addrspace(1)* undef
762  ret void
763}
764
765define void @void_func_v8i32(<8 x i32> %arg0) #0 {
766  ; CHECK-LABEL: name: void_func_v8i32
767  ; CHECK: bb.1 (%ir-block.0):
768  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $sgpr30_sgpr31
769  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
770  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
771  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
772  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
773  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
774  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
775  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
776  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
777  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)
778  ; CHECK:   [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
779  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
780  ; CHECK:   G_STORE [[BUILD_VECTOR]](<8 x s32>), [[DEF]](p1) :: (store 32 into `<8 x i32> addrspace(1)* undef`, addrspace 1)
781  ; CHECK:   [[COPY9:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
782  ; CHECK:   S_SETPC_B64_return [[COPY9]]
783  store <8 x i32> %arg0, <8 x i32> addrspace(1)* undef
784  ret void
785}
786
787define void @void_func_v16i32(<16 x i32> %arg0) #0 {
788  ; CHECK-LABEL: name: void_func_v16i32
789  ; CHECK: bb.1 (%ir-block.0):
790  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $sgpr30_sgpr31
791  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
792  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
793  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
794  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
795  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
796  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
797  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
798  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
799  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
800  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
801  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
802  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
803  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
804  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
805  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
806  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
807  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32)
808  ; CHECK:   [[COPY16:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
809  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
810  ; CHECK:   G_STORE [[BUILD_VECTOR]](<16 x s32>), [[DEF]](p1) :: (store 64 into `<16 x i32> addrspace(1)* undef`, addrspace 1)
811  ; CHECK:   [[COPY17:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY16]]
812  ; CHECK:   S_SETPC_B64_return [[COPY17]]
813  store <16 x i32> %arg0, <16 x i32> addrspace(1)* undef
814  ret void
815}
816
817define void @void_func_v32i32(<32 x i32> %arg0) #0 {
818  ; CHECK-LABEL: name: void_func_v32i32
819  ; CHECK: bb.1 (%ir-block.0):
820  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
821  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
822  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
823  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
824  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
825  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
826  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
827  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
828  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
829  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
830  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
831  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
832  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
833  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
834  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
835  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
836  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
837  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
838  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
839  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
840  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
841  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
842  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
843  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
844  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
845  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
846  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
847  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
848  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
849  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
850  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
851  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
852  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
853  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
854  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
855  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
856  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
857  ; CHECK:   [[COPY33:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
858  ; CHECK:   S_SETPC_B64_return [[COPY33]]
859  store <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
860  ret void
861}
862
863; 1 over register limit
864define void @void_func_v33i32(<33 x i32> %arg0) #0 {
865  ; CHECK-LABEL: name: void_func_v33i32
866  ; CHECK: bb.1 (%ir-block.0):
867  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
868  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
869  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
870  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
871  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
872  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
873  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
874  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
875  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
876  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
877  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
878  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
879  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
880  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
881  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
882  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
883  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
884  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
885  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
886  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
887  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
888  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
889  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
890  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
891  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
892  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
893  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
894  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
895  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
896  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
897  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
898  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
899  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
900  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
901  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.0, align 16, addrspace 5)
902  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<33 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32), [[LOAD]](s32)
903  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
904  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
905  ; CHECK:   G_STORE [[BUILD_VECTOR]](<33 x s32>), [[DEF]](p1) :: (store 132 into `<33 x i32> addrspace(1)* undef`, align 256, addrspace 1)
906  ; CHECK:   [[COPY33:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
907  ; CHECK:   S_SETPC_B64_return [[COPY33]]
908  store <33 x i32> %arg0, <33 x i32> addrspace(1)* undef
909  ret void
910}
911
912define void @void_func_v2i64(<2 x i64> %arg0) #0 {
913  ; CHECK-LABEL: name: void_func_v2i64
914  ; CHECK: bb.1 (%ir-block.0):
915  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
916  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
917  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
918  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
919  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
920  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
921  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
922  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64)
923  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
924  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
925  ; CHECK:   G_STORE [[BUILD_VECTOR]](<2 x s64>), [[DEF]](p1) :: (store 16 into `<2 x i64> addrspace(1)* undef`, addrspace 1)
926  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
927  ; CHECK:   S_SETPC_B64_return [[COPY5]]
928  store <2 x i64> %arg0, <2 x i64> addrspace(1)* undef
929  ret void
930}
931
932define void @void_func_v2p0i8(<2 x i8*> %arg0) #0 {
933  ; CHECK-LABEL: name: void_func_v2p0i8
934  ; CHECK: bb.1 (%ir-block.0):
935  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
936  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
937  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
938  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
939  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
940  ; CHECK:   [[MV:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
941  ; CHECK:   [[MV1:%[0-9]+]]:_(p0) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
942  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p0>) = G_BUILD_VECTOR [[MV]](p0), [[MV1]](p0)
943  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
944  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
945  ; CHECK:   G_STORE [[BUILD_VECTOR]](<2 x p0>), [[DEF]](p1) :: (store 16 into `<2 x i8*> addrspace(1)* undef`, addrspace 1)
946  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
947  ; CHECK:   S_SETPC_B64_return [[COPY5]]
948  store <2 x i8*> %arg0, <2 x i8*> addrspace(1)* undef
949  ret void
950}
951
952define void @void_func_v2p1i8(<2 x i8 addrspace(1)*> %arg0) #0 {
953  ; CHECK-LABEL: name: void_func_v2p1i8
954  ; CHECK: bb.1 (%ir-block.0):
955  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
956  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
957  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
958  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
959  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
960  ; CHECK:   [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
961  ; CHECK:   [[MV1:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
962  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x p1>) = G_BUILD_VECTOR [[MV]](p1), [[MV1]](p1)
963  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
964  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
965  ; CHECK:   G_STORE [[BUILD_VECTOR]](<2 x p1>), [[DEF]](p1) :: (store 16 into `<2 x i8 addrspace(1)*> addrspace(1)* undef`, addrspace 1)
966  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
967  ; CHECK:   S_SETPC_B64_return [[COPY5]]
968  store <2 x i8 addrspace(1)*> %arg0, <2 x i8 addrspace(1)*> addrspace(1)* undef
969  ret void
970}
971
972define void @void_func_v3i64(<3 x i64> %arg0) #0 {
973  ; CHECK-LABEL: name: void_func_v3i64
974  ; CHECK: bb.1 (%ir-block.0):
975  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $sgpr30_sgpr31
976  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
977  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
978  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
979  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
980  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
981  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
982  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
983  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
984  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
985  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)
986  ; CHECK:   [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
987  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
988  ; CHECK:   G_STORE [[BUILD_VECTOR]](<3 x s64>), [[DEF]](p1) :: (store 24 into `<3 x i64> addrspace(1)* undef`, align 32, addrspace 1)
989  ; CHECK:   [[COPY7:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY6]]
990  ; CHECK:   S_SETPC_B64_return [[COPY7]]
991  store <3 x i64> %arg0, <3 x i64> addrspace(1)* undef
992  ret void
993}
994
995define void @void_func_v4i64(<4 x i64> %arg0) #0 {
996  ; CHECK-LABEL: name: void_func_v4i64
997  ; CHECK: bb.1 (%ir-block.0):
998  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $sgpr30_sgpr31
999  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1000  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1001  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1002  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1003  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1004  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1005  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1006  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1007  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1008  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1009  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
1010  ; CHECK:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
1011  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)
1012  ; CHECK:   [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1013  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1014  ; CHECK:   G_STORE [[BUILD_VECTOR]](<4 x s64>), [[DEF]](p1) :: (store 32 into `<4 x i64> addrspace(1)* undef`, addrspace 1)
1015  ; CHECK:   [[COPY9:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
1016  ; CHECK:   S_SETPC_B64_return [[COPY9]]
1017  store <4 x i64> %arg0, <4 x i64> addrspace(1)* undef
1018  ret void
1019}
1020
1021define void @void_func_v5i64(<5 x i64> %arg0) #0 {
1022  ; CHECK-LABEL: name: void_func_v5i64
1023  ; CHECK: bb.1 (%ir-block.0):
1024  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $sgpr30_sgpr31
1025  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1026  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1027  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1028  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1029  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1030  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1031  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1032  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1033  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
1034  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
1035  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1036  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1037  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
1038  ; CHECK:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
1039  ; CHECK:   [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)
1040  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64), [[MV4]](s64)
1041  ; CHECK:   [[COPY10:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1042  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1043  ; CHECK:   G_STORE [[BUILD_VECTOR]](<5 x s64>), [[DEF]](p1) :: (store 40 into `<5 x i64> addrspace(1)* undef`, align 64, addrspace 1)
1044  ; CHECK:   [[COPY11:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY10]]
1045  ; CHECK:   S_SETPC_B64_return [[COPY11]]
1046  store <5 x i64> %arg0, <5 x i64> addrspace(1)* undef
1047  ret void
1048}
1049
1050define void @void_func_v8i64(<8 x i64> %arg0) #0 {
1051  ; CHECK-LABEL: name: void_func_v8i64
1052  ; CHECK: bb.1 (%ir-block.0):
1053  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $sgpr30_sgpr31
1054  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1055  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1056  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1057  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1058  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1059  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1060  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1061  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1062  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
1063  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
1064  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
1065  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
1066  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
1067  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
1068  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
1069  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
1070  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1071  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1072  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
1073  ; CHECK:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
1074  ; CHECK:   [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)
1075  ; CHECK:   [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)
1076  ; CHECK:   [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)
1077  ; CHECK:   [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)
1078  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64), [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)
1079  ; CHECK:   [[COPY16:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1080  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1081  ; CHECK:   G_STORE [[BUILD_VECTOR]](<8 x s64>), [[DEF]](p1) :: (store 64 into `<8 x i64> addrspace(1)* undef`, addrspace 1)
1082  ; CHECK:   [[COPY17:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY16]]
1083  ; CHECK:   S_SETPC_B64_return [[COPY17]]
1084  store <8 x i64> %arg0, <8 x i64> addrspace(1)* undef
1085  ret void
1086}
1087
1088define void @void_func_v16i64(<16 x i64> %arg0) #0 {
1089  ; CHECK-LABEL: name: void_func_v16i64
1090  ; CHECK: bb.1 (%ir-block.0):
1091  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
1092  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1093  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1094  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1095  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1096  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1097  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1098  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1099  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1100  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
1101  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
1102  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
1103  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
1104  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
1105  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
1106  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
1107  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
1108  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
1109  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
1110  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
1111  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
1112  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
1113  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
1114  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
1115  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
1116  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
1117  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
1118  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
1119  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
1120  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
1121  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
1122  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
1123  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
1124  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1125  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1126  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
1127  ; CHECK:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
1128  ; CHECK:   [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)
1129  ; CHECK:   [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)
1130  ; CHECK:   [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)
1131  ; CHECK:   [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)
1132  ; CHECK:   [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)
1133  ; CHECK:   [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)
1134  ; CHECK:   [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)
1135  ; CHECK:   [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)
1136  ; CHECK:   [[MV12:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY24]](s32), [[COPY25]](s32)
1137  ; CHECK:   [[MV13:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY26]](s32), [[COPY27]](s32)
1138  ; CHECK:   [[MV14:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY28]](s32), [[COPY29]](s32)
1139  ; CHECK:   [[MV15:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY30]](s32), [[COPY31]](s32)
1140  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64), [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64), [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64), [[MV12]](s64), [[MV13]](s64), [[MV14]](s64), [[MV15]](s64)
1141  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1142  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1143  ; CHECK:   G_STORE [[BUILD_VECTOR]](<16 x s64>), [[DEF]](p1) :: (store 128 into `<16 x i64> addrspace(1)* undef`, addrspace 1)
1144  ; CHECK:   [[COPY33:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
1145  ; CHECK:   S_SETPC_B64_return [[COPY33]]
1146  store <16 x i64> %arg0, <16 x i64> addrspace(1)* undef
1147  ret void
1148}
1149
1150define void @void_func_v2i16(<2 x i16> %arg0) #0 {
1151  ; CHECK-LABEL: name: void_func_v2i16
1152  ; CHECK: bb.1 (%ir-block.0):
1153  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
1154  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1155  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1156  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1157  ; CHECK:   G_STORE [[COPY]](<2 x s16>), [[DEF]](p1) :: (store 4 into `<2 x i16> addrspace(1)* undef`, addrspace 1)
1158  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
1159  ; CHECK:   S_SETPC_B64_return [[COPY2]]
1160  store <2 x i16> %arg0, <2 x i16> addrspace(1)* undef
1161  ret void
1162}
1163
1164define void @void_func_v3i16(<3 x i16> %arg0) #0 {
1165  ; CHECK-LABEL: name: void_func_v3i16
1166  ; CHECK: bb.1 (%ir-block.0):
1167  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
1168  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1169  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1170  ; CHECK:   [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF
1171  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)
1172  ; CHECK:   [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)
1173  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1174  ; CHECK:   [[DEF1:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1175  ; CHECK:   G_STORE [[UV]](<3 x s16>), [[DEF1]](p1) :: (store 6 into `<3 x i16> addrspace(1)* undef`, align 8, addrspace 1)
1176  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1177  ; CHECK:   S_SETPC_B64_return [[COPY3]]
1178  store <3 x i16> %arg0, <3 x i16> addrspace(1)* undef
1179  ret void
1180}
1181
1182define void @void_func_v4i16(<4 x i16> %arg0) #0 {
1183  ; CHECK-LABEL: name: void_func_v4i16
1184  ; CHECK: bb.1 (%ir-block.0):
1185  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
1186  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1187  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1188  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)
1189  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1190  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1191  ; CHECK:   G_STORE [[CONCAT_VECTORS]](<4 x s16>), [[DEF]](p1) :: (store 8 into `<4 x i16> addrspace(1)* undef`, addrspace 1)
1192  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1193  ; CHECK:   S_SETPC_B64_return [[COPY3]]
1194  store <4 x i16> %arg0, <4 x i16> addrspace(1)* undef
1195  ret void
1196}
1197
1198define void @void_func_v5i16(<5 x i16> %arg0) #0 {
1199  ; CHECK-LABEL: name: void_func_v5i16
1200  ; CHECK: bb.1 (%ir-block.0):
1201  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
1202  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1203  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1204  ; CHECK:   [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
1205  ; CHECK:   [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF
1206  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<10 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[COPY2]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>)
1207  ; CHECK:   [[UV:%[0-9]+]]:_(<5 x s16>), [[UV1:%[0-9]+]]:_(<5 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<10 x s16>)
1208  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1209  ; CHECK:   [[DEF1:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1210  ; CHECK:   G_STORE [[UV]](<5 x s16>), [[DEF1]](p1) :: (store 10 into `<5 x i16> addrspace(1)* undef`, align 16, addrspace 1)
1211  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
1212  ; CHECK:   S_SETPC_B64_return [[COPY4]]
1213  store <5 x i16> %arg0, <5 x i16> addrspace(1)* undef
1214  ret void
1215}
1216
1217define void @void_func_v8i16(<8 x i16> %arg0) #0 {
1218  ; CHECK-LABEL: name: void_func_v8i16
1219  ; CHECK: bb.1 (%ir-block.0):
1220  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
1221  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1222  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1223  ; CHECK:   [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
1224  ; CHECK:   [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr3
1225  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)
1226  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1227  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1228  ; CHECK:   G_STORE [[CONCAT_VECTORS]](<8 x s16>), [[DEF]](p1) :: (store 16 into `<8 x i16> addrspace(1)* undef`, addrspace 1)
1229  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
1230  ; CHECK:   S_SETPC_B64_return [[COPY5]]
1231  store <8 x i16> %arg0, <8 x i16> addrspace(1)* undef
1232  ret void
1233}
1234
1235define void @void_func_v16i16(<16 x i16> %arg0) #0 {
1236  ; CHECK-LABEL: name: void_func_v16i16
1237  ; CHECK: bb.1 (%ir-block.0):
1238  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $sgpr30_sgpr31
1239  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1240  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1241  ; CHECK:   [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
1242  ; CHECK:   [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr3
1243  ; CHECK:   [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr4
1244  ; CHECK:   [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr5
1245  ; CHECK:   [[COPY6:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr6
1246  ; CHECK:   [[COPY7:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr7
1247  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<16 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[COPY6]](<2 x s16>), [[COPY7]](<2 x s16>)
1248  ; CHECK:   [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1249  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1250  ; CHECK:   G_STORE [[CONCAT_VECTORS]](<16 x s16>), [[DEF]](p1) :: (store 32 into `<16 x i16> addrspace(1)* undef`, addrspace 1)
1251  ; CHECK:   [[COPY9:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
1252  ; CHECK:   S_SETPC_B64_return [[COPY9]]
1253  store <16 x i16> %arg0, <16 x i16> addrspace(1)* undef
1254  ret void
1255}
1256
1257; <2 x i16> pieces that start spilling to the stack.
1258; FIXME: load of 2 would be sufficient for last piece
1259define void @void_func_v65i16(<65 x i16> %arg0) #0 {
1260  ; CHECK-LABEL: name: void_func_v65i16
1261  ; CHECK: bb.1 (%ir-block.0):
1262  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
1263  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1264  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1265  ; CHECK:   [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
1266  ; CHECK:   [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr3
1267  ; CHECK:   [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr4
1268  ; CHECK:   [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr5
1269  ; CHECK:   [[COPY6:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr6
1270  ; CHECK:   [[COPY7:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr7
1271  ; CHECK:   [[COPY8:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr8
1272  ; CHECK:   [[COPY9:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr9
1273  ; CHECK:   [[COPY10:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr10
1274  ; CHECK:   [[COPY11:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11
1275  ; CHECK:   [[COPY12:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr12
1276  ; CHECK:   [[COPY13:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr13
1277  ; CHECK:   [[COPY14:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr14
1278  ; CHECK:   [[COPY15:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr15
1279  ; CHECK:   [[COPY16:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr16
1280  ; CHECK:   [[COPY17:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr17
1281  ; CHECK:   [[COPY18:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr18
1282  ; CHECK:   [[COPY19:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr19
1283  ; CHECK:   [[COPY20:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr20
1284  ; CHECK:   [[COPY21:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21
1285  ; CHECK:   [[COPY22:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr22
1286  ; CHECK:   [[COPY23:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr23
1287  ; CHECK:   [[COPY24:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr24
1288  ; CHECK:   [[COPY25:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr25
1289  ; CHECK:   [[COPY26:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr26
1290  ; CHECK:   [[COPY27:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr27
1291  ; CHECK:   [[COPY28:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr28
1292  ; CHECK:   [[COPY29:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr29
1293  ; CHECK:   [[COPY30:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr30
1294  ; CHECK:   [[COPY31:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31
1295  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
1296  ; CHECK:   [[LOAD:%[0-9]+]]:_(<2 x s16>) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.0, align 16, addrspace 5)
1297  ; CHECK:   [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF
1298  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<130 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[COPY6]](<2 x s16>), [[COPY7]](<2 x s16>), [[COPY8]](<2 x s16>), [[COPY9]](<2 x s16>), [[COPY10]](<2 x s16>), [[COPY11]](<2 x s16>), [[COPY12]](<2 x s16>), [[COPY13]](<2 x s16>), [[COPY14]](<2 x s16>), [[COPY15]](<2 x s16>), [[COPY16]](<2 x s16>), [[COPY17]](<2 x s16>), [[COPY18]](<2 x s16>), [[COPY19]](<2 x s16>), [[COPY20]](<2 x s16>), [[COPY21]](<2 x s16>), [[COPY22]](<2 x s16>), [[COPY23]](<2 x s16>), [[COPY24]](<2 x s16>), [[COPY25]](<2 x s16>), [[COPY26]](<2 x s16>), [[COPY27]](<2 x s16>), [[COPY28]](<2 x s16>), [[COPY29]](<2 x s16>), [[COPY30]](<2 x s16>), [[COPY31]](<2 x s16>), [[LOAD]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>), [[DEF]](<2 x s16>)
1299  ; CHECK:   [[UV:%[0-9]+]]:_(<65 x s16>), [[UV1:%[0-9]+]]:_(<65 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<130 x s16>)
1300  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1301  ; CHECK:   [[DEF1:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1302  ; CHECK:   G_STORE [[UV]](<65 x s16>), [[DEF1]](p1) :: (store 130 into `<65 x i16> addrspace(1)* undef`, align 256, addrspace 1)
1303  ; CHECK:   [[COPY33:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
1304  ; CHECK:   S_SETPC_B64_return [[COPY33]]
1305  store <65 x i16> %arg0, <65 x i16> addrspace(1)* undef
1306  ret void
1307}
1308
1309define void @void_func_v2f32(<2 x float> %arg0) #0 {
1310  ; CHECK-LABEL: name: void_func_v2f32
1311  ; CHECK: bb.1 (%ir-block.0):
1312  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
1313  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1314  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1315  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)
1316  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1317  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1318  ; CHECK:   G_STORE [[BUILD_VECTOR]](<2 x s32>), [[DEF]](p1) :: (store 8 into `<2 x float> addrspace(1)* undef`, addrspace 1)
1319  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1320  ; CHECK:   S_SETPC_B64_return [[COPY3]]
1321  store <2 x float> %arg0, <2 x float> addrspace(1)* undef
1322  ret void
1323}
1324
1325define void @void_func_v3f32(<3 x float> %arg0) #0 {
1326  ; CHECK-LABEL: name: void_func_v3f32
1327  ; CHECK: bb.1 (%ir-block.0):
1328  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31
1329  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1330  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1331  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1332  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
1333  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1334  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1335  ; CHECK:   G_STORE [[BUILD_VECTOR]](<3 x s32>), [[DEF]](p1) :: (store 12 into `<3 x float> addrspace(1)* undef`, align 16, addrspace 1)
1336  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
1337  ; CHECK:   S_SETPC_B64_return [[COPY4]]
1338  store <3 x float> %arg0, <3 x float> addrspace(1)* undef
1339  ret void
1340}
1341
1342define void @void_func_v4f32(<4 x float> %arg0) #0 {
1343  ; CHECK-LABEL: name: void_func_v4f32
1344  ; CHECK: bb.1 (%ir-block.0):
1345  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
1346  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1347  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1348  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1349  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1350  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)
1351  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1352  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1353  ; CHECK:   G_STORE [[BUILD_VECTOR]](<4 x s32>), [[DEF]](p1) :: (store 16 into `<4 x float> addrspace(1)* undef`, addrspace 1)
1354  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
1355  ; CHECK:   S_SETPC_B64_return [[COPY5]]
1356  store <4 x float> %arg0, <4 x float> addrspace(1)* undef
1357  ret void
1358}
1359
1360define void @void_func_v8f32(<8 x float> %arg0) #0 {
1361  ; CHECK-LABEL: name: void_func_v8f32
1362  ; CHECK: bb.1 (%ir-block.0):
1363  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $sgpr30_sgpr31
1364  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1365  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1366  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1367  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1368  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1369  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1370  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1371  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1372  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)
1373  ; CHECK:   [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1374  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1375  ; CHECK:   G_STORE [[BUILD_VECTOR]](<8 x s32>), [[DEF]](p1) :: (store 32 into `<8 x float> addrspace(1)* undef`, addrspace 1)
1376  ; CHECK:   [[COPY9:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
1377  ; CHECK:   S_SETPC_B64_return [[COPY9]]
1378  store <8 x float> %arg0, <8 x float> addrspace(1)* undef
1379  ret void
1380}
1381
1382define void @void_func_v16f32(<16 x float> %arg0) #0 {
1383  ; CHECK-LABEL: name: void_func_v16f32
1384  ; CHECK: bb.1 (%ir-block.0):
1385  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $sgpr30_sgpr31
1386  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1387  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1388  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1389  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1390  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1391  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1392  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1393  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1394  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
1395  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
1396  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
1397  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
1398  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
1399  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
1400  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
1401  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
1402  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32)
1403  ; CHECK:   [[COPY16:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1404  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1405  ; CHECK:   G_STORE [[BUILD_VECTOR]](<16 x s32>), [[DEF]](p1) :: (store 64 into `<16 x float> addrspace(1)* undef`, addrspace 1)
1406  ; CHECK:   [[COPY17:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY16]]
1407  ; CHECK:   S_SETPC_B64_return [[COPY17]]
1408  store <16 x float> %arg0, <16 x float> addrspace(1)* undef
1409  ret void
1410}
1411
1412define void @void_func_v2f64(<2 x double> %arg0) #0 {
1413  ; CHECK-LABEL: name: void_func_v2f64
1414  ; CHECK: bb.1 (%ir-block.0):
1415  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
1416  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1417  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1418  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1419  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1420  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1421  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1422  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64)
1423  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1424  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1425  ; CHECK:   G_STORE [[BUILD_VECTOR]](<2 x s64>), [[DEF]](p1) :: (store 16 into `<2 x double> addrspace(1)* undef`, addrspace 1)
1426  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
1427  ; CHECK:   S_SETPC_B64_return [[COPY5]]
1428  store <2 x double> %arg0, <2 x double> addrspace(1)* undef
1429  ret void
1430}
1431
1432define void @void_func_v3f64(<3 x double> %arg0) #0 {
1433  ; CHECK-LABEL: name: void_func_v3f64
1434  ; CHECK: bb.1 (%ir-block.0):
1435  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $sgpr30_sgpr31
1436  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1437  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1438  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1439  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1440  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1441  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1442  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1443  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1444  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
1445  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)
1446  ; CHECK:   [[COPY6:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1447  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1448  ; CHECK:   G_STORE [[BUILD_VECTOR]](<3 x s64>), [[DEF]](p1) :: (store 24 into `<3 x double> addrspace(1)* undef`, align 32, addrspace 1)
1449  ; CHECK:   [[COPY7:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY6]]
1450  ; CHECK:   S_SETPC_B64_return [[COPY7]]
1451  store <3 x double> %arg0, <3 x double> addrspace(1)* undef
1452  ret void
1453}
1454
1455define void @void_func_v4f64(<4 x double> %arg0) #0 {
1456  ; CHECK-LABEL: name: void_func_v4f64
1457  ; CHECK: bb.1 (%ir-block.0):
1458  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $sgpr30_sgpr31
1459  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1460  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1461  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1462  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1463  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1464  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1465  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1466  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1467  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1468  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1469  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
1470  ; CHECK:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
1471  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)
1472  ; CHECK:   [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1473  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1474  ; CHECK:   G_STORE [[BUILD_VECTOR]](<4 x s64>), [[DEF]](p1) :: (store 32 into `<4 x double> addrspace(1)* undef`, addrspace 1)
1475  ; CHECK:   [[COPY9:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
1476  ; CHECK:   S_SETPC_B64_return [[COPY9]]
1477  store <4 x double> %arg0, <4 x double> addrspace(1)* undef
1478  ret void
1479}
1480
1481define void @void_func_v8f64(<8 x double> %arg0) #0 {
1482  ; CHECK-LABEL: name: void_func_v8f64
1483  ; CHECK: bb.1 (%ir-block.0):
1484  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $sgpr30_sgpr31
1485  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1486  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1487  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1488  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1489  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1490  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1491  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1492  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1493  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
1494  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
1495  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
1496  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
1497  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
1498  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
1499  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
1500  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
1501  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1502  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1503  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
1504  ; CHECK:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
1505  ; CHECK:   [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)
1506  ; CHECK:   [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)
1507  ; CHECK:   [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)
1508  ; CHECK:   [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)
1509  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64), [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)
1510  ; CHECK:   [[COPY16:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1511  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1512  ; CHECK:   G_STORE [[BUILD_VECTOR]](<8 x s64>), [[DEF]](p1) :: (store 64 into `<8 x double> addrspace(1)* undef`, addrspace 1)
1513  ; CHECK:   [[COPY17:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY16]]
1514  ; CHECK:   S_SETPC_B64_return [[COPY17]]
1515  store <8 x double> %arg0, <8 x double> addrspace(1)* undef
1516  ret void
1517}
1518
1519define void @void_func_v16f64(<16 x double> %arg0) #0 {
1520  ; CHECK-LABEL: name: void_func_v16f64
1521  ; CHECK: bb.1 (%ir-block.0):
1522  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
1523  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1524  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1525  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1526  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1527  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1528  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1529  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1530  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1531  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
1532  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
1533  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
1534  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
1535  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
1536  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
1537  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
1538  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
1539  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
1540  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
1541  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
1542  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
1543  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
1544  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
1545  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
1546  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
1547  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
1548  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
1549  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
1550  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
1551  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
1552  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
1553  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
1554  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
1555  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1556  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
1557  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
1558  ; CHECK:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
1559  ; CHECK:   [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)
1560  ; CHECK:   [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)
1561  ; CHECK:   [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)
1562  ; CHECK:   [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)
1563  ; CHECK:   [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)
1564  ; CHECK:   [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)
1565  ; CHECK:   [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)
1566  ; CHECK:   [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)
1567  ; CHECK:   [[MV12:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY24]](s32), [[COPY25]](s32)
1568  ; CHECK:   [[MV13:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY26]](s32), [[COPY27]](s32)
1569  ; CHECK:   [[MV14:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY28]](s32), [[COPY29]](s32)
1570  ; CHECK:   [[MV15:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY30]](s32), [[COPY31]](s32)
1571  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64), [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64), [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64), [[MV12]](s64), [[MV13]](s64), [[MV14]](s64), [[MV15]](s64)
1572  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1573  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1574  ; CHECK:   G_STORE [[BUILD_VECTOR]](<16 x s64>), [[DEF]](p1) :: (store 128 into `<16 x double> addrspace(1)* undef`, addrspace 1)
1575  ; CHECK:   [[COPY33:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
1576  ; CHECK:   S_SETPC_B64_return [[COPY33]]
1577  store <16 x double> %arg0, <16 x double> addrspace(1)* undef
1578  ret void
1579}
1580
1581define void @void_func_v2f16(<2 x half> %arg0) #0 {
1582  ; CHECK-LABEL: name: void_func_v2f16
1583  ; CHECK: bb.1 (%ir-block.0):
1584  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
1585  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1586  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1587  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1588  ; CHECK:   G_STORE [[COPY]](<2 x s16>), [[DEF]](p1) :: (store 4 into `<2 x half> addrspace(1)* undef`, addrspace 1)
1589  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
1590  ; CHECK:   S_SETPC_B64_return [[COPY2]]
1591  store <2 x half> %arg0, <2 x half> addrspace(1)* undef
1592  ret void
1593}
1594
1595define void @void_func_v3f16(<3 x half> %arg0) #0 {
1596  ; CHECK-LABEL: name: void_func_v3f16
1597  ; CHECK: bb.1 (%ir-block.0):
1598  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
1599  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1600  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1601  ; CHECK:   [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF
1602  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)
1603  ; CHECK:   [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)
1604  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1605  ; CHECK:   [[DEF1:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1606  ; CHECK:   G_STORE [[UV]](<3 x s16>), [[DEF1]](p1) :: (store 6 into `<3 x half> addrspace(1)* undef`, align 8, addrspace 1)
1607  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1608  ; CHECK:   S_SETPC_B64_return [[COPY3]]
1609  store <3 x half> %arg0, <3 x half> addrspace(1)* undef
1610  ret void
1611}
1612
1613define void @void_func_v4f16(<4 x half> %arg0) #0 {
1614  ; CHECK-LABEL: name: void_func_v4f16
1615  ; CHECK: bb.1 (%ir-block.0):
1616  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
1617  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1618  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1619  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)
1620  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1621  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1622  ; CHECK:   G_STORE [[CONCAT_VECTORS]](<4 x s16>), [[DEF]](p1) :: (store 8 into `<4 x half> addrspace(1)* undef`, addrspace 1)
1623  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1624  ; CHECK:   S_SETPC_B64_return [[COPY3]]
1625  store <4 x half> %arg0, <4 x half> addrspace(1)* undef
1626  ret void
1627}
1628
1629define void @void_func_v8f16(<8 x half> %arg0) #0 {
1630  ; CHECK-LABEL: name: void_func_v8f16
1631  ; CHECK: bb.1 (%ir-block.0):
1632  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
1633  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1634  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1635  ; CHECK:   [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
1636  ; CHECK:   [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr3
1637  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)
1638  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1639  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1640  ; CHECK:   G_STORE [[CONCAT_VECTORS]](<8 x s16>), [[DEF]](p1) :: (store 16 into `<8 x half> addrspace(1)* undef`, addrspace 1)
1641  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
1642  ; CHECK:   S_SETPC_B64_return [[COPY5]]
1643  store <8 x half> %arg0, <8 x half> addrspace(1)* undef
1644  ret void
1645}
1646
1647define void @void_func_v16f16(<16 x half> %arg0) #0 {
1648  ; CHECK-LABEL: name: void_func_v16f16
1649  ; CHECK: bb.1 (%ir-block.0):
1650  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $sgpr30_sgpr31
1651  ; CHECK:   [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
1652  ; CHECK:   [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
1653  ; CHECK:   [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
1654  ; CHECK:   [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr3
1655  ; CHECK:   [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr4
1656  ; CHECK:   [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr5
1657  ; CHECK:   [[COPY6:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr6
1658  ; CHECK:   [[COPY7:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr7
1659  ; CHECK:   [[CONCAT_VECTORS:%[0-9]+]]:_(<16 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[COPY6]](<2 x s16>), [[COPY7]](<2 x s16>)
1660  ; CHECK:   [[COPY8:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1661  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1662  ; CHECK:   G_STORE [[CONCAT_VECTORS]](<16 x s16>), [[DEF]](p1) :: (store 32 into `<16 x half> addrspace(1)* undef`, addrspace 1)
1663  ; CHECK:   [[COPY9:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY8]]
1664  ; CHECK:   S_SETPC_B64_return [[COPY9]]
1665  store <16 x half> %arg0, <16 x half> addrspace(1)* undef
1666  ret void
1667}
1668
1669; Make sure there is no alignment requirement for passed vgprs.
1670define void @void_func_i32_i64_i32(i32 %arg0, i64 %arg1, i32 %arg2) #0 {
1671  ; CHECK-LABEL: name: void_func_i32_i64_i32
1672  ; CHECK: bb.1 (%ir-block.0):
1673  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
1674  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1675  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1676  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1677  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)
1678  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1679  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1680  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1681  ; CHECK:   [[COPY5:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
1682  ; CHECK:   G_STORE [[COPY]](s32), [[DEF]](p1) :: (volatile store 4 into `i32 addrspace(1)* undef`, addrspace 1)
1683  ; CHECK:   G_STORE [[MV]](s64), [[COPY5]](p1) :: (volatile store 8 into `i64 addrspace(1)* undef`, addrspace 1)
1684  ; CHECK:   G_STORE [[COPY3]](s32), [[DEF]](p1) :: (volatile store 4 into `i32 addrspace(1)* undef`, addrspace 1)
1685  ; CHECK:   [[COPY6:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
1686  ; CHECK:   S_SETPC_B64_return [[COPY6]]
1687  store volatile i32 %arg0, i32 addrspace(1)* undef
1688  store volatile i64 %arg1, i64 addrspace(1)* undef
1689  store volatile i32 %arg2, i32 addrspace(1)* undef
1690  ret void
1691}
1692
1693define void @void_func_struct_i32({ i32 } %arg0) #0 {
1694  ; CHECK-LABEL: name: void_func_struct_i32
1695  ; CHECK: bb.1 (%ir-block.0):
1696  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
1697  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1698  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1699  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1700  ; CHECK:   G_STORE [[COPY]](s32), [[DEF]](p1) :: (store 4 into `{ i32 } addrspace(1)* undef`, addrspace 1)
1701  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
1702  ; CHECK:   S_SETPC_B64_return [[COPY2]]
1703  store { i32 } %arg0, { i32 } addrspace(1)* undef
1704  ret void
1705}
1706
1707define void @void_func_struct_i8_i32({ i8, i32 } %arg0) #0 {
1708  ; CHECK-LABEL: name: void_func_struct_i8_i32
1709  ; CHECK: bb.1 (%ir-block.0):
1710  ; CHECK:   liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31
1711  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1712  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
1713  ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[TRUNC]](s16)
1714  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1715  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1716  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1717  ; CHECK:   G_STORE [[TRUNC1]](s8), [[DEF]](p1) :: (store 1 into `{ i8, i32 } addrspace(1)* undef`, align 4, addrspace 1)
1718  ; CHECK:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
1719  ; CHECK:   [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[DEF]], [[C]](s64)
1720  ; CHECK:   G_STORE [[COPY1]](s32), [[PTR_ADD]](p1) :: (store 4 into `{ i8, i32 } addrspace(1)* undef` + 4, addrspace 1)
1721  ; CHECK:   [[COPY3:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1722  ; CHECK:   S_SETPC_B64_return [[COPY3]]
1723  store { i8, i32 } %arg0, { i8, i32 } addrspace(1)* undef
1724  ret void
1725}
1726
1727define void @void_func_byval_struct_i8_i32({ i8, i32 } addrspace(5)* byval({ i8, i32 }) %arg0) #0 {
1728  ; CHECK-LABEL: name: void_func_byval_struct_i8_i32
1729  ; CHECK: bb.1 (%ir-block.0):
1730  ; CHECK:   liveins: $sgpr30_sgpr31
1731  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
1732  ; CHECK:   [[COPY:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX]](p5)
1733  ; CHECK:   [[COPY1:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1734  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1735  ; CHECK:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p5) :: (dereferenceable load 1 from %ir.arg0, align 4, addrspace 5)
1736  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
1737  ; CHECK:   [[PTR_ADD:%[0-9]+]]:_(p5) = G_PTR_ADD [[COPY]], [[C]](s32)
1738  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p5) :: (dereferenceable load 4 from %ir.arg0 + 4, addrspace 5)
1739  ; CHECK:   G_STORE [[LOAD]](s8), [[DEF]](p1) :: (store 1 into `{ i8, i32 } addrspace(1)* undef`, align 4, addrspace 1)
1740  ; CHECK:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
1741  ; CHECK:   [[PTR_ADD1:%[0-9]+]]:_(p1) = G_PTR_ADD [[DEF]], [[C1]](s64)
1742  ; CHECK:   G_STORE [[LOAD1]](s32), [[PTR_ADD1]](p1) :: (store 4 into `{ i8, i32 } addrspace(1)* undef` + 4, addrspace 1)
1743  ; CHECK:   [[COPY2:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY1]]
1744  ; CHECK:   S_SETPC_B64_return [[COPY2]]
1745  %arg0.load = load { i8, i32 }, { i8, i32 } addrspace(5)* %arg0
1746  store { i8, i32 } %arg0.load, { i8, i32 } addrspace(1)* undef
1747  ret void
1748}
1749
1750define void @void_func_byval_struct_i8_i32_x2({ i8, i32 } addrspace(5)* byval({ i8, i32 }) %arg0, { i8, i32 } addrspace(5)* byval({ i8, i32 }) %arg1, i32 %arg2) #0 {
1751  ; CHECK-LABEL: name: void_func_byval_struct_i8_i32_x2
1752  ; CHECK: bb.1 (%ir-block.0):
1753  ; CHECK:   liveins: $vgpr0, $sgpr30_sgpr31
1754  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
1755  ; CHECK:   [[COPY:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX]](p5)
1756  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
1757  ; CHECK:   [[COPY1:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX1]](p5)
1758  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr0
1759  ; CHECK:   [[COPY3:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1760  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1761  ; CHECK:   [[DEF1:%[0-9]+]]:_(p3) = G_IMPLICIT_DEF
1762  ; CHECK:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p5) :: (volatile dereferenceable load 1 from %ir.arg0, align 4, addrspace 5)
1763  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
1764  ; CHECK:   [[PTR_ADD:%[0-9]+]]:_(p5) = G_PTR_ADD [[COPY]], [[C]](s32)
1765  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p5) :: (volatile dereferenceable load 4 from %ir.arg0 + 4, addrspace 5)
1766  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s8) = G_LOAD [[COPY1]](p5) :: (volatile dereferenceable load 1 from %ir.arg1, align 4, addrspace 5)
1767  ; CHECK:   [[PTR_ADD1:%[0-9]+]]:_(p5) = G_PTR_ADD [[COPY1]], [[C]](s32)
1768  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p5) :: (volatile dereferenceable load 4 from %ir.arg1 + 4, addrspace 5)
1769  ; CHECK:   G_STORE [[LOAD]](s8), [[DEF]](p1) :: (volatile store 1 into `{ i8, i32 } addrspace(1)* undef`, align 4, addrspace 1)
1770  ; CHECK:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
1771  ; CHECK:   [[PTR_ADD2:%[0-9]+]]:_(p1) = G_PTR_ADD [[DEF]], [[C1]](s64)
1772  ; CHECK:   G_STORE [[LOAD1]](s32), [[PTR_ADD2]](p1) :: (volatile store 4 into `{ i8, i32 } addrspace(1)* undef` + 4, addrspace 1)
1773  ; CHECK:   G_STORE [[LOAD2]](s8), [[DEF]](p1) :: (volatile store 1 into `{ i8, i32 } addrspace(1)* undef`, align 4, addrspace 1)
1774  ; CHECK:   [[PTR_ADD3:%[0-9]+]]:_(p1) = G_PTR_ADD [[DEF]], [[C1]](s64)
1775  ; CHECK:   G_STORE [[LOAD3]](s32), [[PTR_ADD3]](p1) :: (volatile store 4 into `{ i8, i32 } addrspace(1)* undef` + 4, addrspace 1)
1776  ; CHECK:   G_STORE [[COPY2]](s32), [[DEF1]](p3) :: (volatile store 4 into `i32 addrspace(3)* undef`, addrspace 3)
1777  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY3]]
1778  ; CHECK:   S_SETPC_B64_return [[COPY4]]
1779  %arg0.load = load volatile { i8, i32 }, { i8, i32 } addrspace(5)* %arg0
1780  %arg1.load = load volatile { i8, i32 }, { i8, i32 } addrspace(5)* %arg1
1781  store volatile { i8, i32 } %arg0.load, { i8, i32 } addrspace(1)* undef
1782  store volatile { i8, i32 } %arg1.load, { i8, i32 } addrspace(1)* undef
1783  store volatile i32 %arg2, i32 addrspace(3)* undef
1784  ret void
1785}
1786
1787define void @void_func_byval_i32_byval_i64(i32 addrspace(5)* byval(i32) %arg0, i64 addrspace(5)* byval(i64) %arg1) #0 {
1788  ; CHECK-LABEL: name: void_func_byval_i32_byval_i64
1789  ; CHECK: bb.1 (%ir-block.0):
1790  ; CHECK:   liveins: $sgpr30_sgpr31
1791  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
1792  ; CHECK:   [[COPY:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX]](p5)
1793  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
1794  ; CHECK:   [[COPY1:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX1]](p5)
1795  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1796  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
1797  ; CHECK:   [[COPY3:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
1798  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p5) :: (dereferenceable load 4 from %ir.arg0, addrspace 5)
1799  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[COPY1]](p5) :: (dereferenceable load 8 from %ir.arg1, addrspace 5)
1800  ; CHECK:   G_STORE [[LOAD]](s32), [[DEF]](p1) :: (store 4 into `i32 addrspace(1)* undef`, addrspace 1)
1801  ; CHECK:   G_STORE [[LOAD1]](s64), [[COPY3]](p1) :: (store 8 into `i64 addrspace(1)* undef`, addrspace 1)
1802  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1803  ; CHECK:   S_SETPC_B64_return [[COPY4]]
1804  %arg0.load = load i32, i32 addrspace(5)* %arg0
1805  %arg1.load = load i64, i64 addrspace(5)* %arg1
1806  store i32 %arg0.load, i32 addrspace(1)* undef
1807  store i64 %arg1.load, i64 addrspace(1)* undef
1808  ret void
1809}
1810
1811define void @void_func_byval_i8_align32_i16_align64(i8 addrspace(5)* byval(i8) %arg0, i16 addrspace(5)* byval(i16) align 64 %arg1) #0 {
1812  ; CHECK-LABEL: name: void_func_byval_i8_align32_i16_align64
1813  ; CHECK: frameInfo:
1814  ; CHECK: maxAlignment:    64
1815  ; CHECK: fixedStack:
1816  ; CHECK: - { id: 0, type: default, offset: 64, size: 2, alignment: 16, stack-id: default,
1817  ; CHECK-NEXT:    isImmutable: false, isAliased: false, callee-saved-register: '',
1818  ; CHECK: - { id: 1, type: default, offset: 0, size: 1, alignment: 16, stack-id: default,
1819  ; CHECK-NEXT:  isImmutable: false, isAliased: false, callee-saved-register: '',
1820  ; CHECK: bb.1 (%ir-block.0):
1821  ; CHECK:   liveins: $sgpr30_sgpr31
1822  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
1823  ; CHECK:   [[COPY:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX]](p5)
1824  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
1825  ; CHECK:   [[COPY1:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX1]](p5)
1826  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1827  ; CHECK:   [[C:%[0-9]+]]:_(p1) = G_CONSTANT i64 0
1828  ; CHECK:   [[COPY3:%[0-9]+]]:_(p1) = COPY [[C]](p1)
1829  ; CHECK:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p5) :: (dereferenceable load 1 from %ir.arg0, addrspace 5)
1830  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s16) = G_LOAD [[COPY1]](p5) :: (dereferenceable load 2 from %ir.arg1, addrspace 5)
1831  ; CHECK:   G_STORE [[LOAD]](s8), [[C]](p1) :: (store 1 into `i8 addrspace(1)* null`, addrspace 1)
1832  ; CHECK:   G_STORE [[LOAD1]](s16), [[COPY3]](p1) :: (store 2 into `i16 addrspace(1)* null`, addrspace 1)
1833  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1834  ; CHECK:   S_SETPC_B64_return [[COPY4]]
1835  %arg0.load = load i8, i8 addrspace(5)* %arg0
1836  %arg1.load = load i16, i16 addrspace(5)* %arg1
1837  store i8 %arg0.load, i8 addrspace(1)* null
1838  store i16 %arg1.load, i16 addrspace(1)* null
1839  ret void
1840}
1841
1842; Make sure the alignment is taken from the correct parameter.
1843define void @byval_a3i32_align128_byval_i16_align64([3 x i32] addrspace(5)* byval([3 x i32]) align 128 %arg0, i16 addrspace(5)* byval(i16) align 64 %arg1) #0 {
1844  ; CHECK-LABEL: name: byval_a3i32_align128_byval_i16_align64
1845  ; CHECK: frameInfo:
1846  ; CHECK: maxAlignment:    128
1847  ; CHECK: fixedStack:
1848  ; CHECK-NEXT: - { id: 0, type: default, offset: 64, size: 2, alignment: 16, stack-id: default,
1849  ; CHECK-NEXT:  isImmutable: false, isAliased: false, callee-saved-register: '',
1850  ; CHECK: - { id: 1, type: default, offset: 0, size: 12, alignment: 16, stack-id: default,
1851  ; CHECK-NEXT: isImmutable: false, isAliased: false, callee-saved-register: '',
1852  ; CHECK: bb.1 (%ir-block.0):
1853  ; CHECK:   liveins: $sgpr30_sgpr31
1854  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
1855  ; CHECK:   [[COPY:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX]](p5)
1856  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
1857  ; CHECK:   [[COPY1:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX1]](p5)
1858  ; CHECK:   [[COPY2:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1859  ; CHECK:   [[C:%[0-9]+]]:_(p1) = G_CONSTANT i64 0
1860  ; CHECK:   [[COPY3:%[0-9]+]]:_(p1) = COPY [[C]](p1)
1861  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p5) :: (dereferenceable load 4 from %ir.arg0, addrspace 5)
1862  ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
1863  ; CHECK:   [[PTR_ADD:%[0-9]+]]:_(p5) = G_PTR_ADD [[COPY]], [[C1]](s32)
1864  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p5) :: (dereferenceable load 4 from %ir.arg0 + 4, addrspace 5)
1865  ; CHECK:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
1866  ; CHECK:   [[PTR_ADD1:%[0-9]+]]:_(p5) = G_PTR_ADD [[COPY]], [[C2]](s32)
1867  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p5) :: (dereferenceable load 4 from %ir.arg0 + 8, addrspace 5)
1868  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s16) = G_LOAD [[COPY1]](p5) :: (dereferenceable load 2 from %ir.arg1, addrspace 5)
1869  ; CHECK:   G_STORE [[LOAD]](s32), [[C]](p1) :: (store 4 into `[3 x i32] addrspace(1)* null`, addrspace 1)
1870  ; CHECK:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
1871  ; CHECK:   [[PTR_ADD2:%[0-9]+]]:_(p1) = G_PTR_ADD [[C]], [[C3]](s64)
1872  ; CHECK:   G_STORE [[LOAD1]](s32), [[PTR_ADD2]](p1) :: (store 4 into `[3 x i32] addrspace(1)* null` + 4, addrspace 1)
1873  ; CHECK:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
1874  ; CHECK:   [[PTR_ADD3:%[0-9]+]]:_(p1) = G_PTR_ADD [[C]], [[C4]](s64)
1875  ; CHECK:   G_STORE [[LOAD2]](s32), [[PTR_ADD3]](p1) :: (store 4 into `[3 x i32] addrspace(1)* null` + 8, addrspace 1)
1876  ; CHECK:   G_STORE [[LOAD3]](s16), [[COPY3]](p1) :: (store 2 into `i16 addrspace(1)* null`, addrspace 1)
1877  ; CHECK:   [[COPY4:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY2]]
1878  ; CHECK:   S_SETPC_B64_return [[COPY4]]
1879  %arg0.load = load [3 x i32], [3 x i32] addrspace(5)* %arg0
1880  %arg1.load = load i16, i16 addrspace(5)* %arg1
1881  store [3 x i32] %arg0.load, [3 x i32] addrspace(1)* null
1882  store i16 %arg1.load, i16 addrspace(1)* null
1883  ret void
1884}
1885
1886; byval argument after non-byval stack passed argument
1887define void @void_func_v32i32_i32_byval_i8(<32 x i32> %arg0, i32 %arg1, i8 addrspace(5)* byval(i8) align 8 %arg2) #0 {
1888  ; CHECK-LABEL: name: void_func_v32i32_i32_byval_i8
1889  ; CHECK: frameInfo:
1890  ; CHECK: maxAlignment:    8
1891  ; CHECK: fixedStack:
1892  ; CHECK:     - { id: 0, type: default, offset: 8, size: 1, alignment: 8, stack-id: default,
1893  ; CHECK-NEXT:  isImmutable: false, isAliased: false, callee-saved-register: '',
1894  ; CHECK: - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
1895  ; CHECK-NEXT:  isImmutable: true, isAliased: false, callee-saved-register: '',
1896  ; CHECK: bb.1 (%ir-block.0):
1897  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
1898  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1899  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1900  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1901  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1902  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1903  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1904  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1905  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1906  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
1907  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
1908  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
1909  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
1910  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
1911  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
1912  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
1913  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
1914  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
1915  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
1916  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
1917  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
1918  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
1919  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
1920  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
1921  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
1922  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
1923  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
1924  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
1925  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
1926  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
1927  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
1928  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
1929  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
1930  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
1931  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
1932  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.1, align 16, addrspace 5)
1933  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
1934  ; CHECK:   [[COPY32:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX1]](p5)
1935  ; CHECK:   [[COPY33:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1936  ; CHECK:   [[C:%[0-9]+]]:_(p1) = G_CONSTANT i64 0
1937  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[C]](p1)
1938  ; CHECK:   G_STORE [[LOAD]](s32), [[C]](p1) :: (store 4 into `i32 addrspace(1)* null`, addrspace 1)
1939  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s8) = G_LOAD [[COPY32]](p5) :: (dereferenceable load 1 from %ir.arg2, addrspace 5)
1940  ; CHECK:   G_STORE [[LOAD1]](s8), [[COPY34]](p1) :: (store 1 into `i8 addrspace(1)* null`, addrspace 1)
1941  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY33]]
1942  ; CHECK:   S_SETPC_B64_return [[COPY35]]
1943  store i32 %arg1, i32 addrspace(1)* null
1944  %arg2.load = load i8, i8 addrspace(5)* %arg2
1945  store i8 %arg2.load, i8 addrspace(1)* null
1946  ret void
1947}
1948
1949; byval argument before non-byval stack passed argument
1950define void @void_func_v32i32_byval_i8_i32(<32 x i32> %arg0, i8 addrspace(5)* byval(i8) %arg1, i32 %arg2) #0 {
1951  ; CHECK-LABEL: name: void_func_v32i32_byval_i8_i32
1952  ; CHECK: frameInfo:
1953  ; CHECK: maxAlignment:    4
1954  ; CHECK: fixedStack:
1955  ; CHECK-NEXT: - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
1956  ; CHECK-NEXT:  isImmutable: true, isAliased: false, callee-saved-register: '',
1957  ; CHECK: - { id: 1, type: default, offset: 0, size: 1, alignment: 16, stack-id: default,
1958  ; CHECK-NEXT: isImmutable: false, isAliased: false, callee-saved-register: '',
1959  ; CHECK: bb.1 (%ir-block.0):
1960  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
1961  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1962  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1963  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1964  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1965  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1966  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1967  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
1968  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
1969  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
1970  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
1971  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
1972  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
1973  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
1974  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
1975  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
1976  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
1977  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
1978  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
1979  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
1980  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
1981  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
1982  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
1983  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
1984  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
1985  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
1986  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
1987  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
1988  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
1989  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
1990  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
1991  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
1992  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
1993  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
1994  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
1995  ; CHECK:   [[COPY32:%[0-9]+]]:_(p5) = COPY [[FRAME_INDEX]](p5)
1996  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
1997  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.0, addrspace 5)
1998  ; CHECK:   [[COPY33:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
1999  ; CHECK:   [[C:%[0-9]+]]:_(p1) = G_CONSTANT i64 0
2000  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[C]](p1)
2001  ; CHECK:   G_STORE [[LOAD]](s32), [[C]](p1) :: (store 4 into `i32 addrspace(1)* null`, addrspace 1)
2002  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s8) = G_LOAD [[COPY32]](p5) :: (dereferenceable load 1 from %ir.arg1, addrspace 5)
2003  ; CHECK:   G_STORE [[LOAD1]](s8), [[COPY34]](p1) :: (store 1 into `i8 addrspace(1)* null`, addrspace 1)
2004  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY33]]
2005  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2006  store i32 %arg2, i32 addrspace(1)* null
2007  %arg1.load = load i8, i8 addrspace(5)* %arg1
2008  store i8 %arg1.load, i8 addrspace(1)* null
2009  ret void
2010}
2011
2012define void @void_func_v32i32_i32_i64(<32 x i32> %arg0, i32 %arg1, i64 %arg2) #0 {
2013  ; CHECK-LABEL: name: void_func_v32i32_i32_i64
2014  ; CHECK: bb.1 (%ir-block.0):
2015  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2016  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2017  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2018  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2019  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2020  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2021  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2022  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2023  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2024  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2025  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2026  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2027  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2028  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2029  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2030  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2031  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2032  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2033  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2034  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2035  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2036  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2037  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2038  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2039  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2040  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2041  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2042  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2043  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2044  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2045  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2046  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2047  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2048  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2049  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.2
2050  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.2, align 16, addrspace 5)
2051  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2052  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.1, addrspace 5)
2053  ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2054  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p5) :: (invariant load 4 from %fixed-stack.0, align 8, addrspace 5)
2055  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD1]](s32), [[LOAD2]](s32)
2056  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2057  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2058  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2059  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2060  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2061  ; CHECK:   G_STORE [[LOAD]](s32), [[COPY33]](p1) :: (volatile store 4 into `i32 addrspace(1)* undef`, addrspace 1)
2062  ; CHECK:   G_STORE [[MV]](s64), [[COPY34]](p1) :: (volatile store 8 into `i64 addrspace(1)* undef`, addrspace 1)
2063  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2064  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2065  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2066  store volatile i32 %arg1, i32 addrspace(1)* undef
2067  store volatile i64 %arg2, i64 addrspace(1)* undef
2068  ret void
2069}
2070
2071; FIXME: Different ext load types on CI vs. VI
2072define void @void_func_v32i32_i1_i8_i16(<32 x i32> %arg0, i1 %arg1, i8 %arg2, i16 %arg3, half %arg4) #0 {
2073  ; CHECK-LABEL: name: void_func_v32i32_i1_i8_i16
2074  ; CHECK: bb.1 (%ir-block.0):
2075  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2076  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2077  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2078  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2079  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2080  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2081  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2082  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2083  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2084  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2085  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2086  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2087  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2088  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2089  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2090  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2091  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2092  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2093  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2094  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2095  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2096  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2097  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2098  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2099  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2100  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2101  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2102  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2103  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2104  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2105  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2106  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2107  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2108  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2109  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.3
2110  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 1 from %fixed-stack.3, align 16, addrspace 5)
2111  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[LOAD]](s32)
2112  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.2
2113  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 2 from %fixed-stack.2, align 4, addrspace 5)
2114  ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD1]](s16)
2115  ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2116  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX2]](p5) :: (invariant load 2 from %fixed-stack.1, align 8, addrspace 5)
2117  ; CHECK:   [[FRAME_INDEX3:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2118  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX3]](p5) :: (invariant load 2 from %fixed-stack.0, align 4, addrspace 5)
2119  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2120  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2121  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2122  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2123  ; CHECK:   [[COPY35:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2124  ; CHECK:   [[COPY36:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2125  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2126  ; CHECK:   G_STORE [[TRUNC]](s1), [[COPY33]](p1) :: (volatile store 1 into `i1 addrspace(1)* undef`, addrspace 1)
2127  ; CHECK:   G_STORE [[TRUNC1]](s8), [[COPY34]](p1) :: (volatile store 1 into `i8 addrspace(1)* undef`, addrspace 1)
2128  ; CHECK:   G_STORE [[LOAD2]](s16), [[COPY35]](p1) :: (volatile store 2 into `i16 addrspace(1)* undef`, addrspace 1)
2129  ; CHECK:   G_STORE [[LOAD3]](s16), [[COPY36]](p1) :: (volatile store 2 into `half addrspace(1)* undef`, addrspace 1)
2130  ; CHECK:   [[COPY37:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2131  ; CHECK:   S_SETPC_B64_return [[COPY37]]
2132  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2133  store volatile i1 %arg1, i1 addrspace(1)* undef
2134  store volatile i8 %arg2, i8 addrspace(1)* undef
2135  store volatile i16 %arg3, i16 addrspace(1)* undef
2136  store volatile half %arg4, half addrspace(1)* undef
2137  ret void
2138}
2139
2140define void @void_func_v32i32_p3_p5_i16(<32 x i32> %arg0, i8 addrspace(3)* %arg1, i8 addrspace(5)* %arg2) #0 {
2141  ; CHECK-LABEL: name: void_func_v32i32_p3_p5_i16
2142  ; CHECK: bb.1 (%ir-block.0):
2143  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2144  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2145  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2146  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2147  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2148  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2149  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2150  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2151  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2152  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2153  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2154  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2155  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2156  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2157  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2158  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2159  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2160  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2161  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2162  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2163  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2164  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2165  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2166  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2167  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2168  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2169  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2170  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2171  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2172  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2173  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2174  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2175  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2176  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2177  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2178  ; CHECK:   [[LOAD:%[0-9]+]]:_(p3) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.1, align 16, addrspace 5)
2179  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2180  ; CHECK:   [[LOAD1:%[0-9]+]]:_(p5) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.0, addrspace 5)
2181  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2182  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2183  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2184  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2185  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2186  ; CHECK:   G_STORE [[LOAD]](p3), [[COPY33]](p1) :: (volatile store 4 into `i8 addrspace(3)* addrspace(1)* undef`, addrspace 1)
2187  ; CHECK:   G_STORE [[LOAD1]](p5), [[COPY34]](p1) :: (volatile store 4 into `i8 addrspace(5)* addrspace(1)* undef`, addrspace 1)
2188  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2189  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2190  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2191  store volatile i8 addrspace(3)* %arg1, i8 addrspace(3)* addrspace(1)* undef
2192  store volatile i8 addrspace(5)* %arg2, i8 addrspace(5)* addrspace(1)* undef
2193  ret void
2194}
2195
2196define void @void_func_v32i32_v2i32_v2f32(<32 x i32> %arg0, <2 x i32> %arg1, <2 x float> %arg2) #0 {
2197  ; CHECK-LABEL: name: void_func_v32i32_v2i32_v2f32
2198  ; CHECK: bb.1 (%ir-block.0):
2199  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2200  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2201  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2202  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2203  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2204  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2205  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2206  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2207  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2208  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2209  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2210  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2211  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2212  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2213  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2214  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2215  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2216  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2217  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2218  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2219  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2220  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2221  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2222  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2223  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2224  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2225  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2226  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2227  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2228  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2229  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2230  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2231  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2232  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2233  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.3
2234  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.3, align 16, addrspace 5)
2235  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.2
2236  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.2, addrspace 5)
2237  ; CHECK:   [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[LOAD]](s32), [[LOAD1]](s32)
2238  ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2239  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p5) :: (invariant load 4 from %fixed-stack.1, align 8, addrspace 5)
2240  ; CHECK:   [[FRAME_INDEX3:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2241  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p5) :: (invariant load 4 from %fixed-stack.0, addrspace 5)
2242  ; CHECK:   [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[LOAD2]](s32), [[LOAD3]](s32)
2243  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2244  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2245  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2246  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2247  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2248  ; CHECK:   G_STORE [[BUILD_VECTOR1]](<2 x s32>), [[COPY33]](p1) :: (volatile store 8 into `<2 x i32> addrspace(1)* undef`, addrspace 1)
2249  ; CHECK:   G_STORE [[BUILD_VECTOR2]](<2 x s32>), [[COPY34]](p1) :: (volatile store 8 into `<2 x float> addrspace(1)* undef`, addrspace 1)
2250  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2251  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2252  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2253  store volatile <2 x i32> %arg1, <2 x i32> addrspace(1)* undef
2254  store volatile <2 x float> %arg2, <2 x float> addrspace(1)* undef
2255  ret void
2256}
2257
2258define void @void_func_v32i32_v2i16_v2f16(<32 x i32> %arg0, <2 x i16> %arg1, <2 x half> %arg2) #0 {
2259  ; CHECK-LABEL: name: void_func_v32i32_v2i16_v2f16
2260  ; CHECK: bb.1 (%ir-block.0):
2261  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2262  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2263  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2264  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2265  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2266  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2267  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2268  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2269  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2270  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2271  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2272  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2273  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2274  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2275  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2276  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2277  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2278  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2279  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2280  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2281  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2282  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2283  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2284  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2285  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2286  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2287  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2288  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2289  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2290  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2291  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2292  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2293  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2294  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2295  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2296  ; CHECK:   [[LOAD:%[0-9]+]]:_(<2 x s16>) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.1, align 16, addrspace 5)
2297  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2298  ; CHECK:   [[LOAD1:%[0-9]+]]:_(<2 x s16>) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.0, addrspace 5)
2299  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2300  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2301  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2302  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2303  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2304  ; CHECK:   G_STORE [[LOAD]](<2 x s16>), [[COPY33]](p1) :: (volatile store 4 into `<2 x i16> addrspace(1)* undef`, addrspace 1)
2305  ; CHECK:   G_STORE [[LOAD1]](<2 x s16>), [[COPY34]](p1) :: (volatile store 4 into `<2 x half> addrspace(1)* undef`, addrspace 1)
2306  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2307  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2308  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2309  store volatile <2 x i16> %arg1, <2 x i16> addrspace(1)* undef
2310  store volatile <2 x half> %arg2, <2 x half> addrspace(1)* undef
2311  ret void
2312}
2313
2314define void @void_func_v32i32_v2i64_v2f64(<32 x i32> %arg0, <2 x i64> %arg1, <2 x double> %arg2) #0 {
2315  ; CHECK-LABEL: name: void_func_v32i32_v2i64_v2f64
2316  ; CHECK: bb.1 (%ir-block.0):
2317  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2318  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2319  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2320  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2321  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2322  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2323  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2324  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2325  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2326  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2327  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2328  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2329  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2330  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2331  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2332  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2333  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2334  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2335  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2336  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2337  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2338  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2339  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2340  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2341  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2342  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2343  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2344  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2345  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2346  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2347  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2348  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2349  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2350  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2351  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.7
2352  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.7, align 16, addrspace 5)
2353  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.6
2354  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.6, addrspace 5)
2355  ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.5
2356  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p5) :: (invariant load 4 from %fixed-stack.5, align 8, addrspace 5)
2357  ; CHECK:   [[FRAME_INDEX3:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.4
2358  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p5) :: (invariant load 4 from %fixed-stack.4, addrspace 5)
2359  ; CHECK:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD]](s32), [[LOAD1]](s32)
2360  ; CHECK:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD2]](s32), [[LOAD3]](s32)
2361  ; CHECK:   [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64)
2362  ; CHECK:   [[FRAME_INDEX4:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.3
2363  ; CHECK:   [[LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX4]](p5) :: (invariant load 4 from %fixed-stack.3, align 16, addrspace 5)
2364  ; CHECK:   [[FRAME_INDEX5:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.2
2365  ; CHECK:   [[LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX5]](p5) :: (invariant load 4 from %fixed-stack.2, addrspace 5)
2366  ; CHECK:   [[FRAME_INDEX6:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2367  ; CHECK:   [[LOAD6:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX6]](p5) :: (invariant load 4 from %fixed-stack.1, align 8, addrspace 5)
2368  ; CHECK:   [[FRAME_INDEX7:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2369  ; CHECK:   [[LOAD7:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX7]](p5) :: (invariant load 4 from %fixed-stack.0, addrspace 5)
2370  ; CHECK:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD4]](s32), [[LOAD5]](s32)
2371  ; CHECK:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD6]](s32), [[LOAD7]](s32)
2372  ; CHECK:   [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV2]](s64), [[MV3]](s64)
2373  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2374  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2375  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2376  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2377  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2378  ; CHECK:   G_STORE [[BUILD_VECTOR1]](<2 x s64>), [[COPY33]](p1) :: (volatile store 16 into `<2 x i64> addrspace(1)* undef`, addrspace 1)
2379  ; CHECK:   G_STORE [[BUILD_VECTOR2]](<2 x s64>), [[COPY34]](p1) :: (volatile store 16 into `<2 x double> addrspace(1)* undef`, addrspace 1)
2380  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2381  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2382  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2383  store volatile <2 x i64> %arg1, <2 x i64> addrspace(1)* undef
2384  store volatile <2 x double> %arg2, <2 x double> addrspace(1)* undef
2385  ret void
2386}
2387
2388define void @void_func_v32i32_v4i32_v4f32(<32 x i32> %arg0, <4 x i32> %arg1, <4 x float> %arg2) #0 {
2389  ; CHECK-LABEL: name: void_func_v32i32_v4i32_v4f32
2390  ; CHECK: bb.1 (%ir-block.0):
2391  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2392  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2393  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2394  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2395  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2396  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2397  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2398  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2399  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2400  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2401  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2402  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2403  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2404  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2405  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2406  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2407  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2408  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2409  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2410  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2411  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2412  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2413  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2414  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2415  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2416  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2417  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2418  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2419  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2420  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2421  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2422  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2423  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2424  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2425  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.7
2426  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.7, align 16, addrspace 5)
2427  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.6
2428  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.6, addrspace 5)
2429  ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.5
2430  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p5) :: (invariant load 4 from %fixed-stack.5, align 8, addrspace 5)
2431  ; CHECK:   [[FRAME_INDEX3:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.4
2432  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p5) :: (invariant load 4 from %fixed-stack.4, addrspace 5)
2433  ; CHECK:   [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[LOAD]](s32), [[LOAD1]](s32), [[LOAD2]](s32), [[LOAD3]](s32)
2434  ; CHECK:   [[FRAME_INDEX4:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.3
2435  ; CHECK:   [[LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX4]](p5) :: (invariant load 4 from %fixed-stack.3, align 16, addrspace 5)
2436  ; CHECK:   [[FRAME_INDEX5:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.2
2437  ; CHECK:   [[LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX5]](p5) :: (invariant load 4 from %fixed-stack.2, addrspace 5)
2438  ; CHECK:   [[FRAME_INDEX6:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2439  ; CHECK:   [[LOAD6:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX6]](p5) :: (invariant load 4 from %fixed-stack.1, align 8, addrspace 5)
2440  ; CHECK:   [[FRAME_INDEX7:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2441  ; CHECK:   [[LOAD7:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX7]](p5) :: (invariant load 4 from %fixed-stack.0, addrspace 5)
2442  ; CHECK:   [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[LOAD4]](s32), [[LOAD5]](s32), [[LOAD6]](s32), [[LOAD7]](s32)
2443  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2444  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2445  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2446  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2447  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2448  ; CHECK:   G_STORE [[BUILD_VECTOR1]](<4 x s32>), [[COPY33]](p1) :: (volatile store 16 into `<4 x i32> addrspace(1)* undef`, addrspace 1)
2449  ; CHECK:   G_STORE [[BUILD_VECTOR2]](<4 x s32>), [[COPY34]](p1) :: (volatile store 16 into `<4 x float> addrspace(1)* undef`, addrspace 1)
2450  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2451  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2452  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2453  store volatile <4 x i32> %arg1, <4 x i32> addrspace(1)* undef
2454  store volatile <4 x float> %arg2, <4 x float> addrspace(1)* undef
2455  ret void
2456}
2457
2458define void @void_func_v32i32_v8i32_v8f32(<32 x i32> %arg0, <8 x i32> %arg1, <8 x float> %arg2) #0 {
2459  ; CHECK-LABEL: name: void_func_v32i32_v8i32_v8f32
2460  ; CHECK: bb.1 (%ir-block.0):
2461  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2462  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2463  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2464  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2465  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2466  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2467  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2468  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2469  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2470  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2471  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2472  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2473  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2474  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2475  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2476  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2477  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2478  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2479  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2480  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2481  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2482  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2483  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2484  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2485  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2486  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2487  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2488  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2489  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2490  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2491  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2492  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2493  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2494  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2495  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.15
2496  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.15, align 16, addrspace 5)
2497  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.14
2498  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.14, addrspace 5)
2499  ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.13
2500  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p5) :: (invariant load 4 from %fixed-stack.13, align 8, addrspace 5)
2501  ; CHECK:   [[FRAME_INDEX3:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.12
2502  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p5) :: (invariant load 4 from %fixed-stack.12, addrspace 5)
2503  ; CHECK:   [[FRAME_INDEX4:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.11
2504  ; CHECK:   [[LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX4]](p5) :: (invariant load 4 from %fixed-stack.11, align 16, addrspace 5)
2505  ; CHECK:   [[FRAME_INDEX5:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.10
2506  ; CHECK:   [[LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX5]](p5) :: (invariant load 4 from %fixed-stack.10, addrspace 5)
2507  ; CHECK:   [[FRAME_INDEX6:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.9
2508  ; CHECK:   [[LOAD6:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX6]](p5) :: (invariant load 4 from %fixed-stack.9, align 8, addrspace 5)
2509  ; CHECK:   [[FRAME_INDEX7:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.8
2510  ; CHECK:   [[LOAD7:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX7]](p5) :: (invariant load 4 from %fixed-stack.8, addrspace 5)
2511  ; CHECK:   [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s32>) = G_BUILD_VECTOR [[LOAD]](s32), [[LOAD1]](s32), [[LOAD2]](s32), [[LOAD3]](s32), [[LOAD4]](s32), [[LOAD5]](s32), [[LOAD6]](s32), [[LOAD7]](s32)
2512  ; CHECK:   [[FRAME_INDEX8:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.7
2513  ; CHECK:   [[LOAD8:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX8]](p5) :: (invariant load 4 from %fixed-stack.7, align 16, addrspace 5)
2514  ; CHECK:   [[FRAME_INDEX9:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.6
2515  ; CHECK:   [[LOAD9:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX9]](p5) :: (invariant load 4 from %fixed-stack.6, addrspace 5)
2516  ; CHECK:   [[FRAME_INDEX10:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.5
2517  ; CHECK:   [[LOAD10:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX10]](p5) :: (invariant load 4 from %fixed-stack.5, align 8, addrspace 5)
2518  ; CHECK:   [[FRAME_INDEX11:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.4
2519  ; CHECK:   [[LOAD11:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX11]](p5) :: (invariant load 4 from %fixed-stack.4, addrspace 5)
2520  ; CHECK:   [[FRAME_INDEX12:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.3
2521  ; CHECK:   [[LOAD12:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX12]](p5) :: (invariant load 4 from %fixed-stack.3, align 16, addrspace 5)
2522  ; CHECK:   [[FRAME_INDEX13:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.2
2523  ; CHECK:   [[LOAD13:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX13]](p5) :: (invariant load 4 from %fixed-stack.2, addrspace 5)
2524  ; CHECK:   [[FRAME_INDEX14:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2525  ; CHECK:   [[LOAD14:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX14]](p5) :: (invariant load 4 from %fixed-stack.1, align 8, addrspace 5)
2526  ; CHECK:   [[FRAME_INDEX15:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2527  ; CHECK:   [[LOAD15:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX15]](p5) :: (invariant load 4 from %fixed-stack.0, addrspace 5)
2528  ; CHECK:   [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s32>) = G_BUILD_VECTOR [[LOAD8]](s32), [[LOAD9]](s32), [[LOAD10]](s32), [[LOAD11]](s32), [[LOAD12]](s32), [[LOAD13]](s32), [[LOAD14]](s32), [[LOAD15]](s32)
2529  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2530  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2531  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2532  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2533  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2534  ; CHECK:   G_STORE [[BUILD_VECTOR1]](<8 x s32>), [[COPY33]](p1) :: (volatile store 32 into `<8 x i32> addrspace(1)* undef`, addrspace 1)
2535  ; CHECK:   G_STORE [[BUILD_VECTOR2]](<8 x s32>), [[COPY34]](p1) :: (volatile store 32 into `<8 x float> addrspace(1)* undef`, addrspace 1)
2536  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2537  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2538  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2539  store volatile <8 x i32> %arg1, <8 x i32> addrspace(1)* undef
2540  store volatile <8 x float> %arg2, <8 x float> addrspace(1)* undef
2541  ret void
2542}
2543
2544define void @void_func_v32i32_v16i32_v16f32(<32 x i32> %arg0, <16 x i32> %arg1, <16 x float> %arg2) #0 {
2545  ; CHECK-LABEL: name: void_func_v32i32_v16i32_v16f32
2546  ; CHECK: bb.1 (%ir-block.0):
2547  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2548  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2549  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2550  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2551  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2552  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2553  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2554  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2555  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2556  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2557  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2558  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2559  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2560  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2561  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2562  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2563  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2564  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2565  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2566  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2567  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2568  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2569  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2570  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2571  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2572  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2573  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2574  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2575  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2576  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2577  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2578  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2579  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2580  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2581  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.31
2582  ; CHECK:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 4 from %fixed-stack.31, align 16, addrspace 5)
2583  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.30
2584  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 4 from %fixed-stack.30, addrspace 5)
2585  ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.29
2586  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p5) :: (invariant load 4 from %fixed-stack.29, align 8, addrspace 5)
2587  ; CHECK:   [[FRAME_INDEX3:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.28
2588  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p5) :: (invariant load 4 from %fixed-stack.28, addrspace 5)
2589  ; CHECK:   [[FRAME_INDEX4:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.27
2590  ; CHECK:   [[LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX4]](p5) :: (invariant load 4 from %fixed-stack.27, align 16, addrspace 5)
2591  ; CHECK:   [[FRAME_INDEX5:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.26
2592  ; CHECK:   [[LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX5]](p5) :: (invariant load 4 from %fixed-stack.26, addrspace 5)
2593  ; CHECK:   [[FRAME_INDEX6:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.25
2594  ; CHECK:   [[LOAD6:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX6]](p5) :: (invariant load 4 from %fixed-stack.25, align 8, addrspace 5)
2595  ; CHECK:   [[FRAME_INDEX7:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.24
2596  ; CHECK:   [[LOAD7:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX7]](p5) :: (invariant load 4 from %fixed-stack.24, addrspace 5)
2597  ; CHECK:   [[FRAME_INDEX8:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.23
2598  ; CHECK:   [[LOAD8:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX8]](p5) :: (invariant load 4 from %fixed-stack.23, align 16, addrspace 5)
2599  ; CHECK:   [[FRAME_INDEX9:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.22
2600  ; CHECK:   [[LOAD9:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX9]](p5) :: (invariant load 4 from %fixed-stack.22, addrspace 5)
2601  ; CHECK:   [[FRAME_INDEX10:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.21
2602  ; CHECK:   [[LOAD10:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX10]](p5) :: (invariant load 4 from %fixed-stack.21, align 8, addrspace 5)
2603  ; CHECK:   [[FRAME_INDEX11:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.20
2604  ; CHECK:   [[LOAD11:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX11]](p5) :: (invariant load 4 from %fixed-stack.20, addrspace 5)
2605  ; CHECK:   [[FRAME_INDEX12:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.19
2606  ; CHECK:   [[LOAD12:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX12]](p5) :: (invariant load 4 from %fixed-stack.19, align 16, addrspace 5)
2607  ; CHECK:   [[FRAME_INDEX13:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.18
2608  ; CHECK:   [[LOAD13:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX13]](p5) :: (invariant load 4 from %fixed-stack.18, addrspace 5)
2609  ; CHECK:   [[FRAME_INDEX14:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.17
2610  ; CHECK:   [[LOAD14:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX14]](p5) :: (invariant load 4 from %fixed-stack.17, align 8, addrspace 5)
2611  ; CHECK:   [[FRAME_INDEX15:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.16
2612  ; CHECK:   [[LOAD15:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX15]](p5) :: (invariant load 4 from %fixed-stack.16, addrspace 5)
2613  ; CHECK:   [[BUILD_VECTOR1:%[0-9]+]]:_(<16 x s32>) = G_BUILD_VECTOR [[LOAD]](s32), [[LOAD1]](s32), [[LOAD2]](s32), [[LOAD3]](s32), [[LOAD4]](s32), [[LOAD5]](s32), [[LOAD6]](s32), [[LOAD7]](s32), [[LOAD8]](s32), [[LOAD9]](s32), [[LOAD10]](s32), [[LOAD11]](s32), [[LOAD12]](s32), [[LOAD13]](s32), [[LOAD14]](s32), [[LOAD15]](s32)
2614  ; CHECK:   [[FRAME_INDEX16:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.15
2615  ; CHECK:   [[LOAD16:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX16]](p5) :: (invariant load 4 from %fixed-stack.15, align 16, addrspace 5)
2616  ; CHECK:   [[FRAME_INDEX17:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.14
2617  ; CHECK:   [[LOAD17:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX17]](p5) :: (invariant load 4 from %fixed-stack.14, addrspace 5)
2618  ; CHECK:   [[FRAME_INDEX18:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.13
2619  ; CHECK:   [[LOAD18:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX18]](p5) :: (invariant load 4 from %fixed-stack.13, align 8, addrspace 5)
2620  ; CHECK:   [[FRAME_INDEX19:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.12
2621  ; CHECK:   [[LOAD19:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX19]](p5) :: (invariant load 4 from %fixed-stack.12, addrspace 5)
2622  ; CHECK:   [[FRAME_INDEX20:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.11
2623  ; CHECK:   [[LOAD20:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX20]](p5) :: (invariant load 4 from %fixed-stack.11, align 16, addrspace 5)
2624  ; CHECK:   [[FRAME_INDEX21:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.10
2625  ; CHECK:   [[LOAD21:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX21]](p5) :: (invariant load 4 from %fixed-stack.10, addrspace 5)
2626  ; CHECK:   [[FRAME_INDEX22:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.9
2627  ; CHECK:   [[LOAD22:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX22]](p5) :: (invariant load 4 from %fixed-stack.9, align 8, addrspace 5)
2628  ; CHECK:   [[FRAME_INDEX23:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.8
2629  ; CHECK:   [[LOAD23:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX23]](p5) :: (invariant load 4 from %fixed-stack.8, addrspace 5)
2630  ; CHECK:   [[FRAME_INDEX24:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.7
2631  ; CHECK:   [[LOAD24:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX24]](p5) :: (invariant load 4 from %fixed-stack.7, align 16, addrspace 5)
2632  ; CHECK:   [[FRAME_INDEX25:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.6
2633  ; CHECK:   [[LOAD25:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX25]](p5) :: (invariant load 4 from %fixed-stack.6, addrspace 5)
2634  ; CHECK:   [[FRAME_INDEX26:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.5
2635  ; CHECK:   [[LOAD26:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX26]](p5) :: (invariant load 4 from %fixed-stack.5, align 8, addrspace 5)
2636  ; CHECK:   [[FRAME_INDEX27:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.4
2637  ; CHECK:   [[LOAD27:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX27]](p5) :: (invariant load 4 from %fixed-stack.4, addrspace 5)
2638  ; CHECK:   [[FRAME_INDEX28:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.3
2639  ; CHECK:   [[LOAD28:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX28]](p5) :: (invariant load 4 from %fixed-stack.3, align 16, addrspace 5)
2640  ; CHECK:   [[FRAME_INDEX29:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.2
2641  ; CHECK:   [[LOAD29:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX29]](p5) :: (invariant load 4 from %fixed-stack.2, addrspace 5)
2642  ; CHECK:   [[FRAME_INDEX30:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2643  ; CHECK:   [[LOAD30:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX30]](p5) :: (invariant load 4 from %fixed-stack.1, align 8, addrspace 5)
2644  ; CHECK:   [[FRAME_INDEX31:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2645  ; CHECK:   [[LOAD31:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX31]](p5) :: (invariant load 4 from %fixed-stack.0, addrspace 5)
2646  ; CHECK:   [[BUILD_VECTOR2:%[0-9]+]]:_(<16 x s32>) = G_BUILD_VECTOR [[LOAD16]](s32), [[LOAD17]](s32), [[LOAD18]](s32), [[LOAD19]](s32), [[LOAD20]](s32), [[LOAD21]](s32), [[LOAD22]](s32), [[LOAD23]](s32), [[LOAD24]](s32), [[LOAD25]](s32), [[LOAD26]](s32), [[LOAD27]](s32), [[LOAD28]](s32), [[LOAD29]](s32), [[LOAD30]](s32), [[LOAD31]](s32)
2647  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2648  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2649  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2650  ; CHECK:   [[COPY34:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2651  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2652  ; CHECK:   G_STORE [[BUILD_VECTOR1]](<16 x s32>), [[COPY33]](p1) :: (volatile store 64 into `<16 x i32> addrspace(1)* undef`, addrspace 1)
2653  ; CHECK:   G_STORE [[BUILD_VECTOR2]](<16 x s32>), [[COPY34]](p1) :: (volatile store 64 into `<16 x float> addrspace(1)* undef`, addrspace 1)
2654  ; CHECK:   [[COPY35:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2655  ; CHECK:   S_SETPC_B64_return [[COPY35]]
2656  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2657  store volatile <16 x i32> %arg1, <16 x i32> addrspace(1)* undef
2658  store volatile <16 x float> %arg2, <16 x float> addrspace(1)* undef
2659  ret void
2660}
2661
2662; Make sure v3 isn't a wasted register because of v3 types being promoted to v4
2663define void @void_func_v3f32_wasted_reg(<3 x float> %arg0, i32 %arg1) #0 {
2664  ; CHECK-LABEL: name: void_func_v3f32_wasted_reg
2665  ; CHECK: bb.1 (%ir-block.0):
2666  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
2667  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2668  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2669  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2670  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
2671  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2672  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2673  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
2674  ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
2675  ; CHECK:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
2676  ; CHECK:   [[DEF:%[0-9]+]]:_(p3) = G_IMPLICIT_DEF
2677  ; CHECK:   [[COPY5:%[0-9]+]]:_(p3) = COPY [[DEF]](p3)
2678  ; CHECK:   [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s32>), [[C]](s32)
2679  ; CHECK:   [[EVEC1:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s32>), [[C1]](s32)
2680  ; CHECK:   [[EVEC2:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s32>), [[C2]](s32)
2681  ; CHECK:   G_STORE [[EVEC]](s32), [[DEF]](p3) :: (volatile store 4 into `float addrspace(3)* undef`, addrspace 3)
2682  ; CHECK:   G_STORE [[EVEC1]](s32), [[DEF]](p3) :: (volatile store 4 into `float addrspace(3)* undef`, addrspace 3)
2683  ; CHECK:   G_STORE [[EVEC2]](s32), [[DEF]](p3) :: (volatile store 4 into `float addrspace(3)* undef`, addrspace 3)
2684  ; CHECK:   G_STORE [[COPY3]](s32), [[COPY5]](p3) :: (volatile store 4 into `i32 addrspace(3)* undef`, addrspace 3)
2685  ; CHECK:   [[COPY6:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
2686  ; CHECK:   S_SETPC_B64_return [[COPY6]]
2687  %arg0.0 = extractelement <3 x float> %arg0, i32 0
2688  %arg0.1 = extractelement <3 x float> %arg0, i32 1
2689  %arg0.2 = extractelement <3 x float> %arg0, i32 2
2690  store volatile float %arg0.0, float addrspace(3)* undef
2691  store volatile float %arg0.1, float addrspace(3)* undef
2692  store volatile float %arg0.2, float addrspace(3)* undef
2693  store volatile i32 %arg1, i32 addrspace(3)* undef
2694  ret void
2695}
2696
2697define void @void_func_v3i32_wasted_reg(<3 x i32> %arg0, i32 %arg1) #0 {
2698  ; CHECK-LABEL: name: void_func_v3i32_wasted_reg
2699  ; CHECK: bb.1 (%ir-block.0):
2700  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $sgpr30_sgpr31
2701  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2702  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2703  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2704  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
2705  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2706  ; CHECK:   [[COPY4:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2707  ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
2708  ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
2709  ; CHECK:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
2710  ; CHECK:   [[DEF:%[0-9]+]]:_(p3) = G_IMPLICIT_DEF
2711  ; CHECK:   [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s32>), [[C]](s32)
2712  ; CHECK:   [[EVEC1:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s32>), [[C1]](s32)
2713  ; CHECK:   [[EVEC2:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[BUILD_VECTOR]](<3 x s32>), [[C2]](s32)
2714  ; CHECK:   G_STORE [[EVEC]](s32), [[DEF]](p3) :: (volatile store 4 into `i32 addrspace(3)* undef`, addrspace 3)
2715  ; CHECK:   G_STORE [[EVEC1]](s32), [[DEF]](p3) :: (volatile store 4 into `i32 addrspace(3)* undef`, addrspace 3)
2716  ; CHECK:   G_STORE [[EVEC2]](s32), [[DEF]](p3) :: (volatile store 4 into `i32 addrspace(3)* undef`, addrspace 3)
2717  ; CHECK:   G_STORE [[COPY3]](s32), [[DEF]](p3) :: (volatile store 4 into `i32 addrspace(3)* undef`, addrspace 3)
2718  ; CHECK:   [[COPY5:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY4]]
2719  ; CHECK:   S_SETPC_B64_return [[COPY5]]
2720  %arg0.0 = extractelement <3 x i32> %arg0, i32 0
2721  %arg0.1 = extractelement <3 x i32> %arg0, i32 1
2722  %arg0.2 = extractelement <3 x i32> %arg0, i32 2
2723  store volatile i32 %arg0.0, i32 addrspace(3)* undef
2724  store volatile i32 %arg0.1, i32 addrspace(3)* undef
2725  store volatile i32 %arg0.2, i32 addrspace(3)* undef
2726  store volatile i32 %arg1, i32 addrspace(3)* undef
2727  ret void
2728}
2729
2730; Check there is no crash.
2731define void @void_func_v16i8(<16 x i8> %arg0) #0 {
2732  ; CHECK-LABEL: name: void_func_v16i8
2733  ; CHECK: bb.1 (%ir-block.0):
2734  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $sgpr30_sgpr31
2735  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2736  ; CHECK:   [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
2737  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2738  ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
2739  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2740  ; CHECK:   [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)
2741  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2742  ; CHECK:   [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32)
2743  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2744  ; CHECK:   [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY4]](s32)
2745  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2746  ; CHECK:   [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[COPY5]](s32)
2747  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2748  ; CHECK:   [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[COPY6]](s32)
2749  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2750  ; CHECK:   [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[COPY7]](s32)
2751  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2752  ; CHECK:   [[TRUNC8:%[0-9]+]]:_(s16) = G_TRUNC [[COPY8]](s32)
2753  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2754  ; CHECK:   [[TRUNC9:%[0-9]+]]:_(s16) = G_TRUNC [[COPY9]](s32)
2755  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2756  ; CHECK:   [[TRUNC10:%[0-9]+]]:_(s16) = G_TRUNC [[COPY10]](s32)
2757  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2758  ; CHECK:   [[TRUNC11:%[0-9]+]]:_(s16) = G_TRUNC [[COPY11]](s32)
2759  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2760  ; CHECK:   [[TRUNC12:%[0-9]+]]:_(s16) = G_TRUNC [[COPY12]](s32)
2761  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2762  ; CHECK:   [[TRUNC13:%[0-9]+]]:_(s16) = G_TRUNC [[COPY13]](s32)
2763  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2764  ; CHECK:   [[TRUNC14:%[0-9]+]]:_(s16) = G_TRUNC [[COPY14]](s32)
2765  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2766  ; CHECK:   [[TRUNC15:%[0-9]+]]:_(s16) = G_TRUNC [[COPY15]](s32)
2767  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s16>) = G_BUILD_VECTOR [[TRUNC]](s16), [[TRUNC1]](s16), [[TRUNC2]](s16), [[TRUNC3]](s16), [[TRUNC4]](s16), [[TRUNC5]](s16), [[TRUNC6]](s16), [[TRUNC7]](s16), [[TRUNC8]](s16), [[TRUNC9]](s16), [[TRUNC10]](s16), [[TRUNC11]](s16), [[TRUNC12]](s16), [[TRUNC13]](s16), [[TRUNC14]](s16), [[TRUNC15]](s16)
2768  ; CHECK:   [[TRUNC16:%[0-9]+]]:_(<16 x s8>) = G_TRUNC [[BUILD_VECTOR]](<16 x s16>)
2769  ; CHECK:   [[COPY16:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2770  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2771  ; CHECK:   G_STORE [[TRUNC16]](<16 x s8>), [[DEF]](p1) :: (volatile store 16 into `<16 x i8> addrspace(1)* undef`, addrspace 1)
2772  ; CHECK:   [[COPY17:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY16]]
2773  ; CHECK:   S_SETPC_B64_return [[COPY17]]
2774  store volatile <16 x i8> %arg0, <16 x i8> addrspace(1)* undef
2775  ret void
2776}
2777
2778; Check there is no crash.
2779define void @void_func_v32i32_v16i8(<32 x i32> %arg0, <16 x i8> %arg1) #0 {
2780  ; CHECK-LABEL: name: void_func_v32i32_v16i8
2781  ; CHECK: bb.1 (%ir-block.0):
2782  ; CHECK:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr23, $vgpr24, $vgpr25, $vgpr26, $vgpr27, $vgpr28, $vgpr29, $vgpr30, $vgpr31, $sgpr30_sgpr31
2783  ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
2784  ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
2785  ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
2786  ; CHECK:   [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
2787  ; CHECK:   [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
2788  ; CHECK:   [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
2789  ; CHECK:   [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
2790  ; CHECK:   [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
2791  ; CHECK:   [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
2792  ; CHECK:   [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
2793  ; CHECK:   [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
2794  ; CHECK:   [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
2795  ; CHECK:   [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
2796  ; CHECK:   [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
2797  ; CHECK:   [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
2798  ; CHECK:   [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
2799  ; CHECK:   [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr16
2800  ; CHECK:   [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr17
2801  ; CHECK:   [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr18
2802  ; CHECK:   [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr19
2803  ; CHECK:   [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr20
2804  ; CHECK:   [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr21
2805  ; CHECK:   [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr22
2806  ; CHECK:   [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr23
2807  ; CHECK:   [[COPY24:%[0-9]+]]:_(s32) = COPY $vgpr24
2808  ; CHECK:   [[COPY25:%[0-9]+]]:_(s32) = COPY $vgpr25
2809  ; CHECK:   [[COPY26:%[0-9]+]]:_(s32) = COPY $vgpr26
2810  ; CHECK:   [[COPY27:%[0-9]+]]:_(s32) = COPY $vgpr27
2811  ; CHECK:   [[COPY28:%[0-9]+]]:_(s32) = COPY $vgpr28
2812  ; CHECK:   [[COPY29:%[0-9]+]]:_(s32) = COPY $vgpr29
2813  ; CHECK:   [[COPY30:%[0-9]+]]:_(s32) = COPY $vgpr30
2814  ; CHECK:   [[COPY31:%[0-9]+]]:_(s32) = COPY $vgpr31
2815  ; CHECK:   [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32), [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32), [[COPY15]](s32), [[COPY16]](s32), [[COPY17]](s32), [[COPY18]](s32), [[COPY19]](s32), [[COPY20]](s32), [[COPY21]](s32), [[COPY22]](s32), [[COPY23]](s32), [[COPY24]](s32), [[COPY25]](s32), [[COPY26]](s32), [[COPY27]](s32), [[COPY28]](s32), [[COPY29]](s32), [[COPY30]](s32), [[COPY31]](s32)
2816  ; CHECK:   [[FRAME_INDEX:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.15
2817  ; CHECK:   [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX]](p5) :: (invariant load 2 from %fixed-stack.15, align 16, addrspace 5)
2818  ; CHECK:   [[FRAME_INDEX1:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.14
2819  ; CHECK:   [[LOAD1:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX1]](p5) :: (invariant load 2 from %fixed-stack.14, align 4, addrspace 5)
2820  ; CHECK:   [[FRAME_INDEX2:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.13
2821  ; CHECK:   [[LOAD2:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX2]](p5) :: (invariant load 2 from %fixed-stack.13, align 8, addrspace 5)
2822  ; CHECK:   [[FRAME_INDEX3:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.12
2823  ; CHECK:   [[LOAD3:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX3]](p5) :: (invariant load 2 from %fixed-stack.12, align 4, addrspace 5)
2824  ; CHECK:   [[FRAME_INDEX4:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.11
2825  ; CHECK:   [[LOAD4:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX4]](p5) :: (invariant load 2 from %fixed-stack.11, align 16, addrspace 5)
2826  ; CHECK:   [[FRAME_INDEX5:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.10
2827  ; CHECK:   [[LOAD5:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX5]](p5) :: (invariant load 2 from %fixed-stack.10, align 4, addrspace 5)
2828  ; CHECK:   [[FRAME_INDEX6:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.9
2829  ; CHECK:   [[LOAD6:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX6]](p5) :: (invariant load 2 from %fixed-stack.9, align 8, addrspace 5)
2830  ; CHECK:   [[FRAME_INDEX7:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.8
2831  ; CHECK:   [[LOAD7:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX7]](p5) :: (invariant load 2 from %fixed-stack.8, align 4, addrspace 5)
2832  ; CHECK:   [[FRAME_INDEX8:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.7
2833  ; CHECK:   [[LOAD8:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX8]](p5) :: (invariant load 2 from %fixed-stack.7, align 16, addrspace 5)
2834  ; CHECK:   [[FRAME_INDEX9:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.6
2835  ; CHECK:   [[LOAD9:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX9]](p5) :: (invariant load 2 from %fixed-stack.6, align 4, addrspace 5)
2836  ; CHECK:   [[FRAME_INDEX10:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.5
2837  ; CHECK:   [[LOAD10:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX10]](p5) :: (invariant load 2 from %fixed-stack.5, align 8, addrspace 5)
2838  ; CHECK:   [[FRAME_INDEX11:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.4
2839  ; CHECK:   [[LOAD11:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX11]](p5) :: (invariant load 2 from %fixed-stack.4, align 4, addrspace 5)
2840  ; CHECK:   [[FRAME_INDEX12:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.3
2841  ; CHECK:   [[LOAD12:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX12]](p5) :: (invariant load 2 from %fixed-stack.3, align 16, addrspace 5)
2842  ; CHECK:   [[FRAME_INDEX13:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.2
2843  ; CHECK:   [[LOAD13:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX13]](p5) :: (invariant load 2 from %fixed-stack.2, align 4, addrspace 5)
2844  ; CHECK:   [[FRAME_INDEX14:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.1
2845  ; CHECK:   [[LOAD14:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX14]](p5) :: (invariant load 2 from %fixed-stack.1, align 8, addrspace 5)
2846  ; CHECK:   [[FRAME_INDEX15:%[0-9]+]]:_(p5) = G_FRAME_INDEX %fixed-stack.0
2847  ; CHECK:   [[LOAD15:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX15]](p5) :: (invariant load 2 from %fixed-stack.0, align 4, addrspace 5)
2848  ; CHECK:   [[BUILD_VECTOR1:%[0-9]+]]:_(<16 x s16>) = G_BUILD_VECTOR [[LOAD]](s16), [[LOAD1]](s16), [[LOAD2]](s16), [[LOAD3]](s16), [[LOAD4]](s16), [[LOAD5]](s16), [[LOAD6]](s16), [[LOAD7]](s16), [[LOAD8]](s16), [[LOAD9]](s16), [[LOAD10]](s16), [[LOAD11]](s16), [[LOAD12]](s16), [[LOAD13]](s16), [[LOAD14]](s16), [[LOAD15]](s16)
2849  ; CHECK:   [[TRUNC:%[0-9]+]]:_(<16 x s8>) = G_TRUNC [[BUILD_VECTOR1]](<16 x s16>)
2850  ; CHECK:   [[COPY32:%[0-9]+]]:sgpr_64 = COPY $sgpr30_sgpr31
2851  ; CHECK:   [[DEF:%[0-9]+]]:_(p1) = G_IMPLICIT_DEF
2852  ; CHECK:   [[COPY33:%[0-9]+]]:_(p1) = COPY [[DEF]](p1)
2853  ; CHECK:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[DEF]](p1) :: (volatile store 128 into `<32 x i32> addrspace(1)* undef`, addrspace 1)
2854  ; CHECK:   G_STORE [[TRUNC]](<16 x s8>), [[COPY33]](p1) :: (volatile store 16 into `<16 x i8> addrspace(1)* undef`, addrspace 1)
2855  ; CHECK:   [[COPY34:%[0-9]+]]:ccr_sgpr_64 = COPY [[COPY32]]
2856  ; CHECK:   S_SETPC_B64_return [[COPY34]]
2857  store volatile <32 x i32> %arg0, <32 x i32> addrspace(1)* undef
2858  store volatile <16 x i8> %arg1, <16 x i8> addrspace(1)* undef
2859  ret void
2860}
2861
2862attributes #0 = { nounwind }
2863