xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-concat-vectors.mir (revision 595a08847a4b6e8d52c40715e2fa03e3d7f73189)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=instruction-select -global-isel-abort=2 -pass-remarks-missed='gisel*'  -o - %s | FileCheck -check-prefix=GCN  %s
3
4
5---
6name: test_concat_vectors_v_v4s16_v_v2s16_v_v2s16
7legalized:       true
8regBankSelected: true
9
10body: |
11  bb.0:
12    liveins: $vgpr0, $vgpr1
13
14    ; GCN-LABEL: name: test_concat_vectors_v_v4s16_v_v2s16_v_v2s16
15    ; GCN: liveins: $vgpr0, $vgpr1
16    ; GCN-NEXT: {{  $}}
17    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
18    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
19    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
20    ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[REG_SEQUENCE]]
21    %0:vgpr(<2 x s16>) = COPY $vgpr0
22    %1:vgpr(<2 x s16>) = COPY $vgpr1
23    %2:vgpr(<4 x s16>) = G_CONCAT_VECTORS %0, %1
24    $vgpr0_vgpr1 = COPY %2
25...
26
27---
28name: test_concat_vectors_v_v4s16_s_v2s16_v_v2s16
29legalized:       true
30regBankSelected: true
31
32body: |
33  bb.0:
34    liveins: $sgpr0, $vgpr0
35
36    ; GCN-LABEL: name: test_concat_vectors_v_v4s16_s_v2s16_v_v2s16
37    ; GCN: liveins: $sgpr0, $vgpr0
38    ; GCN-NEXT: {{  $}}
39    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
40    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
41    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
42    ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[REG_SEQUENCE]]
43    %0:sgpr(<2 x s16>) = COPY $sgpr0
44    %1:vgpr(<2 x s16>) = COPY $vgpr1
45    %2:vgpr(<4 x s16>) = G_CONCAT_VECTORS %0, %1
46    $vgpr0_vgpr1 = COPY %2
47...
48
49---
50name: test_concat_vectors_v_v4s16_v_v2s16_s_v2s16
51legalized:       true
52regBankSelected: true
53
54body: |
55  bb.0:
56    liveins: $sgpr0, $vgpr0
57
58    ; GCN-LABEL: name: test_concat_vectors_v_v4s16_v_v2s16_s_v2s16
59    ; GCN: liveins: $sgpr0, $vgpr0
60    ; GCN-NEXT: {{  $}}
61    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
62    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
63    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
64    ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[REG_SEQUENCE]]
65    %0:vgpr(<2 x s16>) = COPY $vgpr0
66    %1:sgpr(<2 x s16>) = COPY $sgpr0
67    %2:vgpr(<4 x s16>) = G_CONCAT_VECTORS %0, %1
68    $vgpr0_vgpr1 = COPY %2
69...
70
71---
72name: test_concat_vectors_s_v4s16_s_v2s16_s_v2s16
73legalized:       true
74regBankSelected: true
75
76body: |
77  bb.0:
78    liveins: $sgpr0, $sgpr1
79
80    ; GCN-LABEL: name: test_concat_vectors_s_v4s16_s_v2s16_s_v2s16
81    ; GCN: liveins: $sgpr0, $sgpr1
82    ; GCN-NEXT: {{  $}}
83    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
84    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
85    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
86    ; GCN-NEXT: $sgpr0_sgpr1 = COPY [[REG_SEQUENCE]]
87    %0:sgpr(<2 x s16>) = COPY $sgpr0
88    %1:sgpr(<2 x s16>) = COPY $sgpr1
89    %2:sgpr(<4 x s16>) = G_CONCAT_VECTORS %0, %1
90    $sgpr0_sgpr1 = COPY %2
91...
92
93---
94name: test_concat_vectors_s_s96_s_v2s16_s_v2s16_s_v2s16
95legalized:       true
96regBankSelected: true
97
98body: |
99  bb.0:
100    liveins: $sgpr0, $sgpr1, $sgpr2
101
102    ; GCN-LABEL: name: test_concat_vectors_s_s96_s_v2s16_s_v2s16_s_v2s16
103    ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2
104    ; GCN-NEXT: {{  $}}
105    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
106    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
107    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
108    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_96 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2
109    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2 = COPY [[REG_SEQUENCE]]
110    %0:sgpr(<2 x s16>) = COPY $sgpr0
111    %1:sgpr(<2 x s16>) = COPY $sgpr1
112    %2:sgpr(<2 x s16>) = COPY $sgpr2
113    %3:sgpr(<6 x s16>) = G_CONCAT_VECTORS %0, %1, %2
114    $sgpr0_sgpr1_sgpr2 = COPY %3
115...
116
117---
118name: test_concat_vectors_v_s96_v_v2s16_v_v2s16_v_v2s16
119legalized:       true
120regBankSelected: true
121
122body: |
123  bb.0:
124    liveins: $vgpr0, $vgpr1, $vgpr2
125
126    ; GCN-LABEL: name: test_concat_vectors_v_s96_v_v2s16_v_v2s16_v_v2s16
127    ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2
128    ; GCN-NEXT: {{  $}}
129    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
130    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
131    ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
132    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_96 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2
133    ; GCN-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[REG_SEQUENCE]]
134    %0:vgpr(<2 x s16>) = COPY $vgpr0
135    %1:vgpr(<2 x s16>) = COPY $vgpr1
136    %2:vgpr(<2 x s16>) = COPY $vgpr2
137    %3:vgpr(<6 x s16>) = G_CONCAT_VECTORS %0, %1, %2
138    $vgpr0_vgpr1_vgpr2 = COPY %3
139...
140
141---
142name: test_concat_vectors_s_v8s16_s_v2s16_s_v2s16_s_v2s16_s_v2s16
143legalized:       true
144regBankSelected: true
145
146body: |
147  bb.0:
148    liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
149
150    ; GCN-LABEL: name: test_concat_vectors_s_v8s16_s_v2s16_s_v2s16_s_v2s16_s_v2s16
151    ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
152    ; GCN-NEXT: {{  $}}
153    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
154    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
155    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
156    ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3
157    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3
158    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[REG_SEQUENCE]]
159    %0:sgpr(<2 x s16>) = COPY $sgpr0
160    %1:sgpr(<2 x s16>) = COPY $sgpr1
161    %2:sgpr(<2 x s16>) = COPY $sgpr2
162    %3:sgpr(<2 x s16>) = COPY $sgpr3
163    %4:sgpr(<8 x s16>) = G_CONCAT_VECTORS %0, %1, %2, %3
164    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %4
165...
166
167---
168name: test_concat_vectors_v_v8s16_v_v2s16_v_v2s16_v_v2s16
169legalized:       true
170regBankSelected: true
171
172body: |
173  bb.0:
174    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
175
176    ; GCN-LABEL: name: test_concat_vectors_v_v8s16_v_v2s16_v_v2s16_v_v2s16
177    ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
178    ; GCN-NEXT: {{  $}}
179    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
180    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
181    ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
182    ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
183    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3
184    ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[REG_SEQUENCE]]
185    %0:vgpr(<2 x s16>) = COPY $vgpr0
186    %1:vgpr(<2 x s16>) = COPY $vgpr1
187    %2:vgpr(<2 x s16>) = COPY $vgpr2
188    %3:vgpr(<2 x s16>) = COPY $vgpr3
189    %4:vgpr(<8 x s16>) = G_CONCAT_VECTORS %0, %1, %2, %3
190    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %4
191...
192
193---
194name: test_concat_vectors_s_v8s16_s_v4s16_s_v4s16
195legalized:       true
196regBankSelected: true
197
198body: |
199  bb.0:
200    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
201
202    ; GCN-LABEL: name: test_concat_vectors_s_v8s16_s_v4s16_s_v4s16
203    ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
204    ; GCN-NEXT: {{  $}}
205    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
206    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
207    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3
208    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[REG_SEQUENCE]]
209    %0:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
210    %1:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
211    %2:sgpr(<8 x s16>) = G_CONCAT_VECTORS %0, %1
212    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %2
213...
214
215---
216name: test_concat_vectors_v_v8s16_v_v4s16_v_v4s16
217legalized:       true
218regBankSelected: true
219
220body: |
221  bb.0:
222    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
223
224    ; GCN-LABEL: name: test_concat_vectors_v_v8s16_v_v4s16_v_v4s16
225    ; GCN: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
226    ; GCN-NEXT: {{  $}}
227    ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
228    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
229    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3
230    ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[REG_SEQUENCE]]
231    %0:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
232    %1:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
233    %2:vgpr(<8 x s16>) = G_CONCAT_VECTORS %0, %1
234    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
235...
236
237---
238name: test_concat_vectors_s_s160_s_v2s16_s_v2s16_s_v2s16_s_v2s16_s_v2s16
239legalized:       true
240regBankSelected: true
241
242body: |
243  bb.0:
244    liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
245
246    ; GCN-LABEL: name: test_concat_vectors_s_s160_s_v2s16_s_v2s16_s_v2s16_s_v2s16_s_v2s16
247    ; GCN: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4
248    ; GCN-NEXT: {{  $}}
249    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
250    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
251    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
252    ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3
253    ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr4
254    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_160 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3, [[COPY4]], %subreg.sub4
255    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4 = COPY [[REG_SEQUENCE]]
256    %0:sgpr(<2 x s16>) = COPY $sgpr0
257    %1:sgpr(<2 x s16>) = COPY $sgpr1
258    %2:sgpr(<2 x s16>) = COPY $sgpr2
259    %3:sgpr(<2 x s16>) = COPY $sgpr3
260    %4:sgpr(<2 x s16>) = COPY $sgpr4
261    %5:sgpr(<10 x s16>) = G_CONCAT_VECTORS %0, %1, %2, %3, %4
262    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4 = COPY %5
263...
264
265---
266name: test_concat_vectors_v_s160_v_v2s16_v_v2s16_v_v2s16_v_v2s16_v_v2s16
267legalized:       true
268regBankSelected: true
269
270body: |
271  bb.0:
272    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4
273
274    ; GCN-LABEL: name: test_concat_vectors_v_s160_v_v2s16_v_v2s16_v_v2s16_v_v2s16_v_v2s16
275    ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4
276    ; GCN-NEXT: {{  $}}
277    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
278    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
279    ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
280    ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
281    ; GCN-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4
282    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_160 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3, [[COPY4]], %subreg.sub4
283    ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4 = COPY [[REG_SEQUENCE]]
284    %0:vgpr(<2 x s16>) = COPY $vgpr0
285    %1:vgpr(<2 x s16>) = COPY $vgpr1
286    %2:vgpr(<2 x s16>) = COPY $vgpr2
287    %3:vgpr(<2 x s16>) = COPY $vgpr3
288    %4:vgpr(<2 x s16>) = COPY $vgpr4
289    %5:vgpr(<10 x s16>) = G_CONCAT_VECTORS %0, %1, %2, %3, %4
290    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4 = COPY %5
291...
292
293---
294name: test_concat_vectors_s_v12s16_s_v4s16_s_v4s16_s_v4s16
295legalized:       true
296regBankSelected: true
297
298body: |
299  bb.0:
300    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
301
302    ; GCN-LABEL: name: test_concat_vectors_s_v12s16_s_v4s16_s_v4s16_s_v4s16
303    ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
304    ; GCN-NEXT: {{  $}}
305    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
306    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
307    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
308    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_192 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5
309    ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
310    %0:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
311    %1:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
312    %2:sgpr(<4 x s16>) = COPY $sgpr4_sgpr5
313    %3:sgpr(<12 x s16>) = G_CONCAT_VECTORS %0, %1, %2
314    S_ENDPGM 0, implicit %3
315...
316
317---
318name: test_concat_vectors_v_v12s16_v_v4s16_v_v4s16_v_v4s16
319legalized:       true
320regBankSelected: true
321
322body: |
323  bb.0:
324    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
325
326    ; GCN-LABEL: name: test_concat_vectors_v_v12s16_v_v4s16_v_v4s16_v_v4s16
327    ; GCN: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
328    ; GCN-NEXT: {{  $}}
329    ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
330    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
331    ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr4_vgpr5
332    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_192 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5
333    ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
334    %0:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
335    %1:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
336    %2:vgpr(<4 x s16>) = COPY $vgpr4_vgpr5
337    %3:vgpr(<12 x s16>) = G_CONCAT_VECTORS %0, %1, %2
338    S_ENDPGM 0, implicit %3
339...
340
341---
342name: test_concat_vectors_s_v16s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16
343legalized:       true
344regBankSelected: true
345
346body: |
347  bb.0:
348    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7
349
350    ; GCN-LABEL: name: test_concat_vectors_s_v16s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16
351    ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7
352    ; GCN-NEXT: {{  $}}
353    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
354    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
355    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
356    ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr6_sgpr7
357    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7
358    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]]
359    %0:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
360    %1:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
361    %2:sgpr(<4 x s16>) = COPY $sgpr4_sgpr5
362    %3:sgpr(<4 x s16>) = COPY $sgpr6_sgpr7
363    %4:sgpr(<16 x s16>) = G_CONCAT_VECTORS %0, %1, %2, %3
364    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %4
365...
366
367---
368name: test_concat_vectors_s_v12s16_s_v8s16_s_v8s16
369legalized:       true
370regBankSelected: true
371
372body: |
373  bb.0:
374    liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7
375
376    ; GCN-LABEL: name: test_concat_vectors_s_v12s16_s_v8s16_s_v8s16
377    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7
378    ; GCN-NEXT: {{  $}}
379    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
380    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_128 = COPY $sgpr4_sgpr5_sgpr6_sgpr7
381    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3, [[COPY1]], %subreg.sub4_sub5_sub6_sub7
382    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]]
383    %0:sgpr(<8 x s16>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
384    %1:sgpr(<8 x s16>) = COPY $sgpr4_sgpr5_sgpr6_sgpr7
385    %2:sgpr(<16 x s16>) = G_CONCAT_VECTORS %0, %1
386    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %2
387...
388
389---
390name: test_concat_vectors_s_v32s16_s_v12s16_s_v12s16
391legalized:       true
392regBankSelected: true
393
394body: |
395  bb.0:
396    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
397
398    ; GCN-LABEL: name: test_concat_vectors_s_v32s16_s_v12s16_s_v12s16
399    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
400    ; GCN-NEXT: {{  $}}
401    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
402    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_256 = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
403    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7, [[COPY1]], %subreg.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15
404    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[REG_SEQUENCE]]
405    %0:sgpr(<16 x s16>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7,
406    %1:sgpr(<16 x s16>) = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
407    %4:sgpr(<32 x s16>) = G_CONCAT_VECTORS %0, %1
408    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %4
409...
410
411---
412name: test_concat_vectors_s_v32s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16
413legalized:       true
414regBankSelected: true
415
416body: |
417  bb.0:
418    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr12_sgpr13, $sgpr14_sgpr15
419
420    ; GCN-LABEL: name: test_concat_vectors_s_v32s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16_s_v4s16
421    ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr12_sgpr13, $sgpr14_sgpr15
422    ; GCN-NEXT: {{  $}}
423    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
424    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
425    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
426    ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr6_sgpr7
427    ; GCN-NEXT: [[COPY4:%[0-9]+]]:sreg_64 = COPY $sgpr8_sgpr9
428    ; GCN-NEXT: [[COPY5:%[0-9]+]]:sreg_64 = COPY $sgpr10_sgpr11
429    ; GCN-NEXT: [[COPY6:%[0-9]+]]:sreg_64 = COPY $sgpr12_sgpr13
430    ; GCN-NEXT: [[COPY7:%[0-9]+]]:sreg_64 = COPY $sgpr14_sgpr15
431    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7, [[COPY4]], %subreg.sub8_sub9, [[COPY5]], %subreg.sub10_sub11, [[COPY6]], %subreg.sub12_sub13, [[COPY7]], %subreg.sub14_sub15
432    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[REG_SEQUENCE]]
433    %0:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
434    %1:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
435    %2:sgpr(<4 x s16>) = COPY $sgpr4_sgpr5
436    %3:sgpr(<4 x s16>) = COPY $sgpr6_sgpr7
437    %4:sgpr(<4 x s16>) = COPY $sgpr8_sgpr9
438    %5:sgpr(<4 x s16>) = COPY $sgpr10_sgpr11
439    %6:sgpr(<4 x s16>) = COPY $sgpr12_sgpr13
440    %7:sgpr(<4 x s16>) = COPY $sgpr14_sgpr15
441    %8:sgpr(<32 x s16>) = G_CONCAT_VECTORS %0, %1, %2, %3, %4, %5, %6, %7
442    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %8
443...
444
445---
446name: test_concat_vectors_v_v512_v_v64_v_v64_v_v64_v_v64_v_v64_v_v64_v_v64_v_v64
447legalized:       true
448regBankSelected: true
449
450body: |
451  bb.0:
452    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11, $vgpr12_vgpr13, $vgpr14_vgpr15
453
454    ; GCN-LABEL: name: test_concat_vectors_v_v512_v_v64_v_v64_v_v64_v_v64_v_v64_v_v64_v_v64_v_v64
455    ; GCN: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11, $vgpr12_vgpr13, $vgpr14_vgpr15
456    ; GCN-NEXT: {{  $}}
457    ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
458    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
459    ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr4_vgpr5
460    ; GCN-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY $vgpr6_vgpr7
461    ; GCN-NEXT: [[COPY4:%[0-9]+]]:vreg_64 = COPY $vgpr8_vgpr9
462    ; GCN-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY $vgpr10_vgpr11
463    ; GCN-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY $vgpr12_vgpr13
464    ; GCN-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY $vgpr14_vgpr15
465    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7, [[COPY4]], %subreg.sub8_sub9, [[COPY5]], %subreg.sub10_sub11, [[COPY6]], %subreg.sub12_sub13, [[COPY7]], %subreg.sub14_sub15
466    ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[REG_SEQUENCE]]
467    %0:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
468    %1:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
469    %2:vgpr(<4 x s16>) = COPY $vgpr4_vgpr5
470    %3:vgpr(<4 x s16>) = COPY $vgpr6_vgpr7
471    %4:vgpr(<4 x s16>) = COPY $vgpr8_vgpr9
472    %5:vgpr(<4 x s16>) = COPY $vgpr10_vgpr11
473    %6:vgpr(<4 x s16>) = COPY $vgpr12_vgpr13
474    %7:vgpr(<4 x s16>) = COPY $vgpr14_vgpr15
475    %8:vgpr(<32 x s16>) = G_CONCAT_VECTORS %0, %1, %2, %3, %4, %5, %6, %7
476    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %8
477...
478
479
480
481
482
483
484---
485name: test_concat_vectors_s_v4s32_s_v2s32_s_v2s32
486legalized:       true
487regBankSelected: true
488
489body: |
490  bb.0:
491    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
492
493    ; GCN-LABEL: name: test_concat_vectors_s_v4s32_s_v2s32_s_v2s32
494    ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
495    ; GCN-NEXT: {{  $}}
496    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
497    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
498    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3
499    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[REG_SEQUENCE]]
500    %0:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
501    %1:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
502    %4:sgpr(<4 x s32>) = G_CONCAT_VECTORS %0, %1
503    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %4
504...
505
506---
507name: test_concat_vectors_v_v4s32_v_v2s32_v_v2s32
508legalized:       true
509regBankSelected: true
510
511body: |
512  bb.0:
513    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
514
515    ; GCN-LABEL: name: test_concat_vectors_v_v4s32_v_v2s32_v_v2s32
516    ; GCN: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
517    ; GCN-NEXT: {{  $}}
518    ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
519    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
520    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3
521    ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[REG_SEQUENCE]]
522    %0:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
523    %1:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
524    %2:vgpr(<4 x s32>) = G_CONCAT_VECTORS %0, %1
525    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
526...
527
528---
529name: test_concat_vectors_s_v8s32_s_v2s32_s_v2s32_s_v2s32_s_v2s32
530legalized:       true
531regBankSelected: true
532
533body: |
534  bb.0:
535    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7
536
537    ; GCN-LABEL: name: test_concat_vectors_s_v8s32_s_v2s32_s_v2s32_s_v2s32_s_v2s32
538    ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7
539    ; GCN-NEXT: {{  $}}
540    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
541    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
542    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
543    ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr6_sgpr7
544    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7
545    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]]
546    %0:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
547    %1:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
548    %2:sgpr(<2 x s32>) = COPY $sgpr4_sgpr5
549    %3:sgpr(<2 x s32>) = COPY $sgpr6_sgpr7
550    %4:sgpr(<8 x s32>) = G_CONCAT_VECTORS %0, %1, %2, %3
551    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %4
552...
553
554---
555
556name: test_concat_vectors_s_v8s32_s_v4s32_s_v4s32
557legalized:       true
558regBankSelected: true
559
560body: |
561  bb.0:
562    liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7
563
564    ; GCN-LABEL: name: test_concat_vectors_s_v8s32_s_v4s32_s_v4s32
565    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7
566    ; GCN-NEXT: {{  $}}
567    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
568    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_128 = COPY $sgpr4_sgpr5_sgpr6_sgpr7
569    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3, [[COPY1]], %subreg.sub4_sub5_sub6_sub7
570    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]]
571    %0:sgpr(<4 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
572    %1:sgpr(<4 x s32>) = COPY $sgpr4_sgpr5_sgpr6_sgpr7
573    %2:sgpr(<8 x s32>) = G_CONCAT_VECTORS %0, %1
574    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %2
575...
576
577---
578name: test_concat_vectors_s_v16s32_s_v8s32_s_v8s32
579legalized:       true
580regBankSelected: true
581
582body: |
583  bb.0:
584    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
585
586    ; GCN-LABEL: name: test_concat_vectors_s_v16s32_s_v8s32_s_v8s32
587    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
588    ; GCN-NEXT: {{  $}}
589    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
590    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_256 = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
591    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7, [[COPY1]], %subreg.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15
592    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[REG_SEQUENCE]]
593    %0:sgpr(<8 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7,
594    %1:sgpr(<8 x s32>) = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
595    %4:sgpr(<16 x s32>) = G_CONCAT_VECTORS %0, %1
596    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %4
597...
598
599---
600name: test_concat_vectors_v_v16s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32
601legalized:       true
602regBankSelected: true
603
604body: |
605  bb.0:
606    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11, $vgpr12_vgpr13, $vgpr14_vgpr15
607
608    ; GCN-LABEL: name: test_concat_vectors_v_v16s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32_v_v2s32
609    ; GCN: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11, $vgpr12_vgpr13, $vgpr14_vgpr15
610    ; GCN-NEXT: {{  $}}
611    ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
612    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
613    ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY $vgpr4_vgpr5
614    ; GCN-NEXT: [[COPY3:%[0-9]+]]:vreg_64 = COPY $vgpr6_vgpr7
615    ; GCN-NEXT: [[COPY4:%[0-9]+]]:vreg_64 = COPY $vgpr8_vgpr9
616    ; GCN-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY $vgpr10_vgpr11
617    ; GCN-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY $vgpr12_vgpr13
618    ; GCN-NEXT: [[COPY7:%[0-9]+]]:vreg_64 = COPY $vgpr14_vgpr15
619    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7, [[COPY4]], %subreg.sub8_sub9, [[COPY5]], %subreg.sub10_sub11, [[COPY6]], %subreg.sub12_sub13, [[COPY7]], %subreg.sub14_sub15
620    ; GCN-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[REG_SEQUENCE]]
621    %0:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
622    %1:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
623    %2:vgpr(<2 x s32>) = COPY $vgpr4_vgpr5
624    %3:vgpr(<2 x s32>) = COPY $vgpr6_vgpr7
625    %4:vgpr(<2 x s32>) = COPY $vgpr8_vgpr9
626    %5:vgpr(<2 x s32>) = COPY $vgpr10_vgpr11
627    %6:vgpr(<2 x s32>) = COPY $vgpr12_vgpr13
628    %7:vgpr(<2 x s32>) = COPY $vgpr14_vgpr15
629    %8:vgpr(<16 x s32>) = G_CONCAT_VECTORS %0, %1, %2, %3, %4, %5, %6, %7
630    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %8
631...
632
633---
634name: test_concat_vectors_s_v32s32_s_v16s32_s_v16s32
635legalized:       true
636regBankSelected: true
637
638body: |
639  bb.0:
640    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
641
642    ; GCN-LABEL: name: test_concat_vectors_s_v32s32_s_v16s32_s_v16s32
643    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
644    ; GCN-NEXT: {{  $}}
645    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_512 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
646    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_512 = COPY $sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
647    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_1024 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7_sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15, [[COPY1]], %subreg.sub16_sub17_sub18_sub19_sub20_sub21_sub22_sub23_sub24_sub25_sub26_sub27_sub28_sub29_sub30_sub31
648    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31 = COPY [[REG_SEQUENCE]]
649    %0:sgpr(<16 x s32>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
650    %1:sgpr(<16 x s32>) = COPY $sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31
651    %2:sgpr(<32 x s32>) = G_CONCAT_VECTORS %0, %1
652    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27_sgpr28_sgpr29_sgpr30_sgpr31 = COPY %2
653...
654
655---
656name: test_concat_vectors_s_v4s64_s_v2s64_s_v2s64
657legalized:       true
658regBankSelected: true
659
660body: |
661  bb.0:
662    liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7
663
664    ; GCN-LABEL: name: test_concat_vectors_s_v4s64_s_v2s64_s_v2s64
665    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7
666    ; GCN-NEXT: {{  $}}
667    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
668    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_128 = COPY $sgpr4_sgpr5_sgpr6_sgpr7
669    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3, [[COPY1]], %subreg.sub4_sub5_sub6_sub7
670    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]]
671    %0:sgpr(<2 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
672    %1:sgpr(<2 x s64>) = COPY $sgpr4_sgpr5_sgpr6_sgpr7
673    %3:sgpr(<4 x s64>) = G_CONCAT_VECTORS %0, %1
674    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %3
675...
676
677---
678name: test_concat_vectors_s_v6s64_s_v3s64_s_v3s64
679legalized:       true
680regBankSelected: true
681
682body: |
683  bb.0:
684    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
685
686    ; GCN-LABEL: name: test_concat_vectors_s_v6s64_s_v3s64_s_v3s64
687    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
688    ; GCN-NEXT: {{  $}}
689    ; GCN-NEXT: [[DEF:%[0-9]+]]:sgpr_192 = IMPLICIT_DEF
690    ; GCN-NEXT: [[DEF1:%[0-9]+]]:sgpr_192 = IMPLICIT_DEF
691    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_384 = REG_SEQUENCE [[DEF]], %subreg.sub0_sub1_sub2_sub3_sub4_sub5, [[DEF1]], %subreg.sub6_sub7_sub8_sub9_sub10_sub11
692    ; GCN-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
693    %0:sgpr(<3 x s64>) = G_IMPLICIT_DEF
694    %1:sgpr(<3 x s64>) = G_IMPLICIT_DEF
695    %2:sgpr(<6 x s64>) = G_CONCAT_VECTORS %0, %1
696    S_ENDPGM 0, implicit %2
697...
698
699---
700name: test_concat_vectors_s_v8s64_s_v4s64_s_v4s64
701legalized:       true
702regBankSelected: true
703
704body: |
705  bb.0:
706    liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
707
708    ; GCN-LABEL: name: test_concat_vectors_s_v8s64_s_v4s64_s_v4s64
709    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
710    ; GCN-NEXT: {{  $}}
711    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_256 = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7
712    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_256 = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
713    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3_sub4_sub5_sub6_sub7, [[COPY1]], %subreg.sub8_sub9_sub10_sub11_sub12_sub13_sub14_sub15
714    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[REG_SEQUENCE]]
715    %0:sgpr(<4 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7,
716    %1:sgpr(<4 x s64>) = COPY $sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15
717    %4:sgpr(<8 x s64>) = G_CONCAT_VECTORS %0, %1
718    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %4
719...
720
721---
722name: test_concat_vectors_s_v8s64_s_v2s64_s_v2s64_s_v2s64_s_v2s64
723legalized:       true
724regBankSelected: true
725
726body: |
727  bb.0:
728    liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11, $sgpr12_sgpr13_sgpr14_sgpr15
729
730    ; GCN-LABEL: name: test_concat_vectors_s_v8s64_s_v2s64_s_v2s64_s_v2s64_s_v2s64
731    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7, $sgpr8_sgpr9_sgpr10_sgpr11, $sgpr12_sgpr13_sgpr14_sgpr15
732    ; GCN-NEXT: {{  $}}
733    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
734    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_128 = COPY $sgpr4_sgpr5_sgpr6_sgpr7
735    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sgpr_128 = COPY $sgpr8_sgpr9_sgpr10_sgpr11
736    ; GCN-NEXT: [[COPY3:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
737    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_512 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3, [[COPY1]], %subreg.sub4_sub5_sub6_sub7, [[COPY2]], %subreg.sub8_sub9_sub10_sub11, [[COPY3]], %subreg.sub12_sub13_sub14_sub15
738    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[REG_SEQUENCE]]
739    %0:sgpr(<2 x s64>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
740    %1:sgpr(<2 x s64>) = COPY $sgpr4_sgpr5_sgpr6_sgpr7
741    %2:sgpr(<2 x s64>) = COPY $sgpr8_sgpr9_sgpr10_sgpr11
742    %3:sgpr(<2 x s64>) = COPY $sgpr12_sgpr13_sgpr14_sgpr15
743    %4:sgpr(<8 x s64>) = G_CONCAT_VECTORS %0, %1, %2, %3
744    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %4
745...
746
747---
748name: test_concat_vectors_s_v4p1_s_v2p1_s_v2p1
749legalized:       true
750regBankSelected: true
751
752body: |
753  bb.0:
754    liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7
755
756    ; GCN-LABEL: name: test_concat_vectors_s_v4p1_s_v2p1_s_v2p1
757    ; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4_sgpr5_sgpr6_sgpr7
758    ; GCN-NEXT: {{  $}}
759    ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
760    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sgpr_128 = COPY $sgpr4_sgpr5_sgpr6_sgpr7
761    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1_sub2_sub3, [[COPY1]], %subreg.sub4_sub5_sub6_sub7
762    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]]
763    %0:sgpr(<2 x p1>) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
764    %1:sgpr(<2 x p1>) = COPY $sgpr4_sgpr5_sgpr6_sgpr7
765    %3:sgpr(<4 x p1>) = G_CONCAT_VECTORS %0, %1
766    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %3
767...
768
769---
770name: test_concat_vectors_s_v4p3_s_v2p3_s_v2p3
771legalized:       true
772regBankSelected: true
773
774body: |
775  bb.0:
776    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
777
778    ; GCN-LABEL: name: test_concat_vectors_s_v4p3_s_v2p3_s_v2p3
779    ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
780    ; GCN-NEXT: {{  $}}
781    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
782    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
783    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3
784    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[REG_SEQUENCE]]
785    %0:sgpr(<2 x p3>) = COPY $sgpr0_sgpr1
786    %1:sgpr(<2 x p3>) = COPY $sgpr2_sgpr3
787    %2:sgpr(<4 x p3>) = G_CONCAT_VECTORS %0, %1
788    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %2
789...
790
791---
792name: test_concat_vectors_s_v8p3_s_v2p3_s_v2p3_v2p3_s_v2p3
793legalized:       true
794regBankSelected: true
795
796body: |
797  bb.0:
798    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7
799
800    ; GCN-LABEL: name: test_concat_vectors_s_v8p3_s_v2p3_s_v2p3_v2p3_s_v2p3
801    ; GCN: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr6_sgpr7
802    ; GCN-NEXT: {{  $}}
803    ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
804    ; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
805    ; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
806    ; GCN-NEXT: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr6_sgpr7
807    ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sgpr_256 = REG_SEQUENCE [[COPY]], %subreg.sub0_sub1, [[COPY1]], %subreg.sub2_sub3, [[COPY2]], %subreg.sub4_sub5, [[COPY3]], %subreg.sub6_sub7
808    ; GCN-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[REG_SEQUENCE]]
809    %0:sgpr(<2 x p3>) = COPY $sgpr0_sgpr1
810    %1:sgpr(<2 x p3>) = COPY $sgpr2_sgpr3
811    %2:sgpr(<2 x p3>) = COPY $sgpr4_sgpr5
812    %3:sgpr(<2 x p3>) = COPY $sgpr6_sgpr7
813    %4:sgpr(<8 x p3>) = G_CONCAT_VECTORS %0, %1, %2, %3
814    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %4
815...
816