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