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