xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-concat-vectors.mir (revision f1aa5980466507407377e83162e86d17f1fa2543)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer %s -o - | FileCheck %s
3
4---
5name: concat_vectors_v2s32_v2s32
6
7body: |
8  bb.0:
9    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
10    ; CHECK-LABEL: name: concat_vectors_v2s32_v2s32
11    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
12    ; CHECK-NEXT: {{  $}}
13    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
14    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
15    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s32>) = G_CONCAT_VECTORS [[COPY]](<2 x s32>), [[COPY1]](<2 x s32>)
16    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[CONCAT_VECTORS]](<4 x s32>)
17    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
18    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
19    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1
20    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
21...
22
23---
24name: concat_vectors_v2s16_v2s16
25
26body: |
27  bb.0:
28    liveins: $vgpr0, $vgpr1
29    ; CHECK-LABEL: name: concat_vectors_v2s16_v2s16
30    ; CHECK: liveins: $vgpr0, $vgpr1
31    ; CHECK-NEXT: {{  $}}
32    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
33    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
34    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)
35    ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>)
36    %0:_(<2 x s16>) = COPY $vgpr0
37    %1:_(<2 x s16>) = COPY $vgpr1
38    %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1
39    $vgpr0_vgpr1 = COPY %2
40...
41
42---
43name: concat_vectors_v2s16_v2s16_v2s16_v2s16
44
45body: |
46  bb.0:
47    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
48    ; CHECK-LABEL: name: concat_vectors_v2s16_v2s16_v2s16_v2s16
49    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
50    ; CHECK-NEXT: {{  $}}
51    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
52    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
53    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr2
54    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr3
55    ; CHECK-NEXT: [[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>)
56    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[CONCAT_VECTORS]](<8 x s16>)
57    %0:_(<2 x s16>) = COPY $vgpr0
58    %1:_(<2 x s16>) = COPY $vgpr1
59    %2:_(<2 x s16>) = COPY $vgpr2
60    %3:_(<2 x s16>) = COPY $vgpr3
61    %4:_(<8 x s16>) = G_CONCAT_VECTORS %0, %1, %2, %3
62    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %4
63...
64
65---
66name: concat_vectors_v4s16_v4s16
67
68body: |
69  bb.0:
70    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
71    ; CHECK-LABEL: name: concat_vectors_v4s16_v4s16
72    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
73    ; CHECK-NEXT: {{  $}}
74    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
75    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3
76    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s16>) = G_CONCAT_VECTORS [[COPY]](<4 x s16>), [[COPY1]](<4 x s16>)
77    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[CONCAT_VECTORS]](<8 x s16>)
78    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
79    %1:_(<4 x s16>) = COPY $vgpr2_vgpr3
80    %2:_(<8 x s16>) = G_CONCAT_VECTORS %0, %1
81    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
82...
83
84---
85name: concat_vectors_v4s32_v4s32
86
87body: |
88  bb.0:
89    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
90    ; CHECK-LABEL: name: concat_vectors_v4s32_v4s32
91    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
92    ; CHECK-NEXT: {{  $}}
93    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
94    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
95    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>)
96    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[CONCAT_VECTORS]](<8 x s32>)
97    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3,
98    %1:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
99    %2:_(<8 x s32>) = G_CONCAT_VECTORS %0, %1
100    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %2
101...
102
103---
104name: concat_vectors_v2s32_v2s32_v2s32_v2s32
105
106body: |
107  bb.0:
108    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
109    ; CHECK-LABEL: name: concat_vectors_v2s32_v2s32_v2s32_v2s32
110    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
111    ; CHECK-NEXT: {{  $}}
112    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
113    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
114    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5
115    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr6_vgpr7
116    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY]](<2 x s32>), [[COPY1]](<2 x s32>), [[COPY2]](<2 x s32>), [[COPY3]](<2 x s32>)
117    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[CONCAT_VECTORS]](<8 x s32>)
118    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
119    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
120    %2:_(<2 x s32>) = COPY $vgpr4_vgpr5
121    %3:_(<2 x s32>) = COPY $vgpr6_vgpr7
122
123    %4:_(<8 x s32>) = G_CONCAT_VECTORS %0, %1, %2, %3
124    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %4
125...
126---
127name: concat_vectors_v2s64_v2s64
128
129body: |
130  bb.0:
131    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
132    ; CHECK-LABEL: name: concat_vectors_v2s64_v2s64
133    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
134    ; CHECK-NEXT: {{  $}}
135    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
136    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
137    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s64>) = G_CONCAT_VECTORS [[COPY]](<2 x s64>), [[COPY1]](<2 x s64>)
138    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[CONCAT_VECTORS]](<4 x s64>)
139    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
140    %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
141    %2:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1
142    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %2
143...
144
145---
146name: concat_vectors_v2p1_v2p1
147
148body: |
149  bb.0:
150    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
151    ; CHECK-LABEL: name: concat_vectors_v2p1_v2p1
152    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
153    ; CHECK-NEXT: {{  $}}
154    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
155    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x p1>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
156    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x p1>) = G_CONCAT_VECTORS [[COPY]](<2 x p1>), [[COPY1]](<2 x p1>)
157    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[CONCAT_VECTORS]](<4 x p1>)
158    %0:_(<2 x p1>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
159    %1:_(<2 x p1>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
160    %2:_(<4 x p1>) = G_CONCAT_VECTORS %0, %1
161    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %2
162...
163
164---
165name: concat_vectors_v2p0_v2p0
166
167body: |
168  bb.0:
169    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
170    ; CHECK-LABEL: name: concat_vectors_v2p0_v2p0
171    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
172    ; CHECK-NEXT: {{  $}}
173    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
174    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x p0>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
175    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x p0>) = G_CONCAT_VECTORS [[COPY]](<2 x p0>), [[COPY1]](<2 x p0>)
176    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[CONCAT_VECTORS]](<4 x p0>)
177    %0:_(<2 x p0>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
178    %1:_(<2 x p0>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
179    %2:_(<4 x p0>) = G_CONCAT_VECTORS %0, %1
180    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %2
181...
182
183---
184name: concat_vectors_v2p3_v2p3
185
186body: |
187  bb.0:
188    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
189    ; CHECK-LABEL: name: concat_vectors_v2p3_v2p3
190    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
191    ; CHECK-NEXT: {{  $}}
192    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr0_vgpr1
193    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x p3>) = COPY $vgpr2_vgpr3
194    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x p3>) = G_CONCAT_VECTORS [[COPY]](<2 x p3>), [[COPY1]](<2 x p3>)
195    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[CONCAT_VECTORS]](<4 x p3>)
196    %0:_(<2 x p3>) = COPY $vgpr0_vgpr1
197    %1:_(<2 x p3>) = COPY $vgpr2_vgpr3
198    %2:_(<4 x p3>) = G_CONCAT_VECTORS %0, %1
199    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
200...
201
202---
203name: concat_vectors_v2p5_v2p5
204
205body: |
206  bb.0:
207    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
208    ; CHECK-LABEL: name: concat_vectors_v2p5_v2p5
209    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
210    ; CHECK-NEXT: {{  $}}
211    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x p5>) = COPY $vgpr0_vgpr1
212    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x p5>) = COPY $vgpr2_vgpr3
213    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x p5>) = G_CONCAT_VECTORS [[COPY]](<2 x p5>), [[COPY1]](<2 x p5>)
214    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[CONCAT_VECTORS]](<4 x p5>)
215    %0:_(<2 x p5>) = COPY $vgpr0_vgpr1
216    %1:_(<2 x p5>) = COPY $vgpr2_vgpr3
217    %2:_(<4 x p5>) = G_CONCAT_VECTORS %0, %1
218    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2
219...
220
221---
222name: concat_vectors_v2p999_v2p999
223
224body: |
225  bb.0:
226    liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
227    ; CHECK-LABEL: name: concat_vectors_v2p999_v2p999
228    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7
229    ; CHECK-NEXT: {{  $}}
230    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x p999>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
231    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x p999>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
232    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x p999>) = G_CONCAT_VECTORS [[COPY]](<2 x p999>), [[COPY1]](<2 x p999>)
233    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[CONCAT_VECTORS]](<4 x p999>)
234    %0:_(<2 x p999>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
235    %1:_(<2 x p999>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
236    %2:_(<4 x p999>) = G_CONCAT_VECTORS %0, %1
237    $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %2
238...
239
240---
241name: concat_vectors_v6s16_v3s16
242
243body: |
244  bb.0:
245    liveins: $vgpr0_vgpr1_vgpr2
246    ; CHECK-LABEL: name: concat_vectors_v6s16_v3s16
247    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
248    ; CHECK-NEXT: {{  $}}
249    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2
250    ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[COPY]](<6 x s16>)
251    %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2
252    %1:_(<3 x s16>), %2:_(<3 x s16>) = G_UNMERGE_VALUES %0
253    %3:_(<6 x s16>) = G_CONCAT_VECTORS %1, %2
254    $vgpr0_vgpr1_vgpr2 = COPY %3
255...
256