[OptTable] Fix typo VALUE => VALUES (NFCI) (#121523)
[llvm-project.git] / llvm / test / CodeGen / X86 / GlobalISel / legalize-add-v512.mir
blob15c7b502779e20549d11c8f6e5701b13b51b894e
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx               -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=AVX1
3 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f           -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=AVX512F
4 # RUN: llc -mtriple=x86_64-linux-gnu -mattr=+avx512f,+avx512bw -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=AVX512BW
6 # TODO: add tests for additional configuration after the legalization supported
8 --- |
9   define void @test_add_v64i8() {
10     %ret = add <64 x i8> undef, undef
11     ret void
12   }
14   define void @test_add_v32i16() {
15     %ret = add <32 x i16> undef, undef
16     ret void
17   }
19   define void @test_add_v16i32() {
20     %ret = add <16 x i32> undef, undef
21     ret void
22   }
24   define void @test_add_v8i64() {
25     %ret = add <8 x i64> undef, undef
26     ret void
27   }
29   define <64 x i8> @test_add_v64i8_2(<64 x i8> %arg1, <64 x i8> %arg2) #0 {
30     %ret = add <64 x i8> %arg1, %arg2
31     ret <64 x i8> %ret
32   }
33 ...
34 ---
35 name:            test_add_v64i8
36 alignment:       16
37 legalized:       false
38 regBankSelected: false
39 registers:
40   - { id: 0, class: _ }
41   - { id: 1, class: _ }
42   - { id: 2, class: _ }
43 body:             |
44   bb.1 (%ir-block.0):
45     liveins: $zmm0, $zmm1
47     ; AVX1-LABEL: name: test_add_v64i8
48     ; AVX1: liveins: $zmm0, $zmm1
49     ; AVX1-NEXT: {{  $}}
50     ; AVX1-NEXT: [[DEF:%[0-9]+]]:_(<64 x s8>) = IMPLICIT_DEF
51     ; AVX1-NEXT: [[DEF1:%[0-9]+]]:_(<64 x s8>) = IMPLICIT_DEF
52     ; AVX1-NEXT: [[UV:%[0-9]+]]:_(<16 x s8>), [[UV1:%[0-9]+]]:_(<16 x s8>), [[UV2:%[0-9]+]]:_(<16 x s8>), [[UV3:%[0-9]+]]:_(<16 x s8>) = G_UNMERGE_VALUES [[DEF]](<64 x s8>)
53     ; AVX1-NEXT: [[UV4:%[0-9]+]]:_(<16 x s8>), [[UV5:%[0-9]+]]:_(<16 x s8>), [[UV6:%[0-9]+]]:_(<16 x s8>), [[UV7:%[0-9]+]]:_(<16 x s8>) = G_UNMERGE_VALUES [[DEF1]](<64 x s8>)
54     ; AVX1-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[UV]], [[UV4]]
55     ; AVX1-NEXT: [[ADD1:%[0-9]+]]:_(<16 x s8>) = G_ADD [[UV1]], [[UV5]]
56     ; AVX1-NEXT: [[ADD2:%[0-9]+]]:_(<16 x s8>) = G_ADD [[UV2]], [[UV6]]
57     ; AVX1-NEXT: [[ADD3:%[0-9]+]]:_(<16 x s8>) = G_ADD [[UV3]], [[UV7]]
58     ; AVX1-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<64 x s8>) = G_CONCAT_VECTORS [[ADD]](<16 x s8>), [[ADD1]](<16 x s8>), [[ADD2]](<16 x s8>), [[ADD3]](<16 x s8>)
59     ; AVX1-NEXT: $zmm0 = COPY [[CONCAT_VECTORS]](<64 x s8>)
60     ; AVX1-NEXT: RET 0
61     ;
62     ; AVX512F-LABEL: name: test_add_v64i8
63     ; AVX512F: liveins: $zmm0, $zmm1
64     ; AVX512F-NEXT: {{  $}}
65     ; AVX512F-NEXT: [[DEF:%[0-9]+]]:_(<64 x s8>) = IMPLICIT_DEF
66     ; AVX512F-NEXT: [[DEF1:%[0-9]+]]:_(<64 x s8>) = IMPLICIT_DEF
67     ; AVX512F-NEXT: [[UV:%[0-9]+]]:_(<32 x s8>), [[UV1:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[DEF]](<64 x s8>)
68     ; AVX512F-NEXT: [[UV2:%[0-9]+]]:_(<32 x s8>), [[UV3:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[DEF1]](<64 x s8>)
69     ; AVX512F-NEXT: [[ADD:%[0-9]+]]:_(<32 x s8>) = G_ADD [[UV]], [[UV2]]
70     ; AVX512F-NEXT: [[ADD1:%[0-9]+]]:_(<32 x s8>) = G_ADD [[UV1]], [[UV3]]
71     ; AVX512F-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<64 x s8>) = G_CONCAT_VECTORS [[ADD]](<32 x s8>), [[ADD1]](<32 x s8>)
72     ; AVX512F-NEXT: $zmm0 = COPY [[CONCAT_VECTORS]](<64 x s8>)
73     ; AVX512F-NEXT: RET 0
74     ;
75     ; AVX512BW-LABEL: name: test_add_v64i8
76     ; AVX512BW: liveins: $zmm0, $zmm1
77     ; AVX512BW-NEXT: {{  $}}
78     ; AVX512BW-NEXT: [[DEF:%[0-9]+]]:_(<64 x s8>) = IMPLICIT_DEF
79     ; AVX512BW-NEXT: [[DEF1:%[0-9]+]]:_(<64 x s8>) = IMPLICIT_DEF
80     ; AVX512BW-NEXT: [[ADD:%[0-9]+]]:_(<64 x s8>) = G_ADD [[DEF]], [[DEF1]]
81     ; AVX512BW-NEXT: $zmm0 = COPY [[ADD]](<64 x s8>)
82     ; AVX512BW-NEXT: RET 0
83     %0(<64 x s8>) = IMPLICIT_DEF
84     %1(<64 x s8>) = IMPLICIT_DEF
85     %2(<64 x s8>) = G_ADD %0, %1
86     $zmm0 = COPY %2
87     RET 0
89 ...
90 ---
91 name:            test_add_v32i16
92 alignment:       16
93 legalized:       false
94 regBankSelected: false
95 registers:
96   - { id: 0, class: _ }
97   - { id: 1, class: _ }
98   - { id: 2, class: _ }
99 body:             |
100   bb.1 (%ir-block.0):
101     liveins: $zmm0, $zmm1
103     ; AVX1-LABEL: name: test_add_v32i16
104     ; AVX1: liveins: $zmm0, $zmm1
105     ; AVX1-NEXT: {{  $}}
106     ; AVX1-NEXT: [[DEF:%[0-9]+]]:_(<32 x s16>) = IMPLICIT_DEF
107     ; AVX1-NEXT: [[DEF1:%[0-9]+]]:_(<32 x s16>) = IMPLICIT_DEF
108     ; AVX1-NEXT: [[UV:%[0-9]+]]:_(<8 x s16>), [[UV1:%[0-9]+]]:_(<8 x s16>), [[UV2:%[0-9]+]]:_(<8 x s16>), [[UV3:%[0-9]+]]:_(<8 x s16>) = G_UNMERGE_VALUES [[DEF]](<32 x s16>)
109     ; AVX1-NEXT: [[UV4:%[0-9]+]]:_(<8 x s16>), [[UV5:%[0-9]+]]:_(<8 x s16>), [[UV6:%[0-9]+]]:_(<8 x s16>), [[UV7:%[0-9]+]]:_(<8 x s16>) = G_UNMERGE_VALUES [[DEF1]](<32 x s16>)
110     ; AVX1-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[UV]], [[UV4]]
111     ; AVX1-NEXT: [[ADD1:%[0-9]+]]:_(<8 x s16>) = G_ADD [[UV1]], [[UV5]]
112     ; AVX1-NEXT: [[ADD2:%[0-9]+]]:_(<8 x s16>) = G_ADD [[UV2]], [[UV6]]
113     ; AVX1-NEXT: [[ADD3:%[0-9]+]]:_(<8 x s16>) = G_ADD [[UV3]], [[UV7]]
114     ; AVX1-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<32 x s16>) = G_CONCAT_VECTORS [[ADD]](<8 x s16>), [[ADD1]](<8 x s16>), [[ADD2]](<8 x s16>), [[ADD3]](<8 x s16>)
115     ; AVX1-NEXT: $zmm0 = COPY [[CONCAT_VECTORS]](<32 x s16>)
116     ; AVX1-NEXT: RET 0
117     ;
118     ; AVX512F-LABEL: name: test_add_v32i16
119     ; AVX512F: liveins: $zmm0, $zmm1
120     ; AVX512F-NEXT: {{  $}}
121     ; AVX512F-NEXT: [[DEF:%[0-9]+]]:_(<32 x s16>) = IMPLICIT_DEF
122     ; AVX512F-NEXT: [[DEF1:%[0-9]+]]:_(<32 x s16>) = IMPLICIT_DEF
123     ; AVX512F-NEXT: [[UV:%[0-9]+]]:_(<16 x s16>), [[UV1:%[0-9]+]]:_(<16 x s16>) = G_UNMERGE_VALUES [[DEF]](<32 x s16>)
124     ; AVX512F-NEXT: [[UV2:%[0-9]+]]:_(<16 x s16>), [[UV3:%[0-9]+]]:_(<16 x s16>) = G_UNMERGE_VALUES [[DEF1]](<32 x s16>)
125     ; AVX512F-NEXT: [[ADD:%[0-9]+]]:_(<16 x s16>) = G_ADD [[UV]], [[UV2]]
126     ; AVX512F-NEXT: [[ADD1:%[0-9]+]]:_(<16 x s16>) = G_ADD [[UV1]], [[UV3]]
127     ; AVX512F-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<32 x s16>) = G_CONCAT_VECTORS [[ADD]](<16 x s16>), [[ADD1]](<16 x s16>)
128     ; AVX512F-NEXT: $zmm0 = COPY [[CONCAT_VECTORS]](<32 x s16>)
129     ; AVX512F-NEXT: RET 0
130     ;
131     ; AVX512BW-LABEL: name: test_add_v32i16
132     ; AVX512BW: liveins: $zmm0, $zmm1
133     ; AVX512BW-NEXT: {{  $}}
134     ; AVX512BW-NEXT: [[DEF:%[0-9]+]]:_(<32 x s16>) = IMPLICIT_DEF
135     ; AVX512BW-NEXT: [[DEF1:%[0-9]+]]:_(<32 x s16>) = IMPLICIT_DEF
136     ; AVX512BW-NEXT: [[ADD:%[0-9]+]]:_(<32 x s16>) = G_ADD [[DEF]], [[DEF1]]
137     ; AVX512BW-NEXT: $zmm0 = COPY [[ADD]](<32 x s16>)
138     ; AVX512BW-NEXT: RET 0
139     %0(<32 x s16>) = IMPLICIT_DEF
140     %1(<32 x s16>) = IMPLICIT_DEF
141     %2(<32 x s16>) = G_ADD %0, %1
142     $zmm0 = COPY %2
143     RET 0
147 name:            test_add_v16i32
148 alignment:       16
149 legalized:       false
150 regBankSelected: false
151 registers:
152   - { id: 0, class: _ }
153   - { id: 1, class: _ }
154   - { id: 2, class: _ }
155 body:             |
156   bb.1 (%ir-block.0):
157     liveins: $zmm0, $zmm1
159     ; AVX1-LABEL: name: test_add_v16i32
160     ; AVX1: liveins: $zmm0, $zmm1
161     ; AVX1-NEXT: {{  $}}
162     ; AVX1-NEXT: [[DEF:%[0-9]+]]:_(<16 x s32>) = IMPLICIT_DEF
163     ; AVX1-NEXT: [[DEF1:%[0-9]+]]:_(<16 x s32>) = IMPLICIT_DEF
164     ; AVX1-NEXT: [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>), [[UV2:%[0-9]+]]:_(<4 x s32>), [[UV3:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[DEF]](<16 x s32>)
165     ; AVX1-NEXT: [[UV4:%[0-9]+]]:_(<4 x s32>), [[UV5:%[0-9]+]]:_(<4 x s32>), [[UV6:%[0-9]+]]:_(<4 x s32>), [[UV7:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[DEF1]](<16 x s32>)
166     ; AVX1-NEXT: [[ADD:%[0-9]+]]:_(<4 x s32>) = G_ADD [[UV]], [[UV4]]
167     ; AVX1-NEXT: [[ADD1:%[0-9]+]]:_(<4 x s32>) = G_ADD [[UV1]], [[UV5]]
168     ; AVX1-NEXT: [[ADD2:%[0-9]+]]:_(<4 x s32>) = G_ADD [[UV2]], [[UV6]]
169     ; AVX1-NEXT: [[ADD3:%[0-9]+]]:_(<4 x s32>) = G_ADD [[UV3]], [[UV7]]
170     ; AVX1-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<16 x s32>) = G_CONCAT_VECTORS [[ADD]](<4 x s32>), [[ADD1]](<4 x s32>), [[ADD2]](<4 x s32>), [[ADD3]](<4 x s32>)
171     ; AVX1-NEXT: $zmm0 = COPY [[CONCAT_VECTORS]](<16 x s32>)
172     ; AVX1-NEXT: RET 0
173     ;
174     ; AVX512F-LABEL: name: test_add_v16i32
175     ; AVX512F: liveins: $zmm0, $zmm1
176     ; AVX512F-NEXT: {{  $}}
177     ; AVX512F-NEXT: [[DEF:%[0-9]+]]:_(<16 x s32>) = IMPLICIT_DEF
178     ; AVX512F-NEXT: [[DEF1:%[0-9]+]]:_(<16 x s32>) = IMPLICIT_DEF
179     ; AVX512F-NEXT: [[ADD:%[0-9]+]]:_(<16 x s32>) = G_ADD [[DEF]], [[DEF1]]
180     ; AVX512F-NEXT: $zmm0 = COPY [[ADD]](<16 x s32>)
181     ; AVX512F-NEXT: RET 0
182     ;
183     ; AVX512BW-LABEL: name: test_add_v16i32
184     ; AVX512BW: liveins: $zmm0, $zmm1
185     ; AVX512BW-NEXT: {{  $}}
186     ; AVX512BW-NEXT: [[DEF:%[0-9]+]]:_(<16 x s32>) = IMPLICIT_DEF
187     ; AVX512BW-NEXT: [[DEF1:%[0-9]+]]:_(<16 x s32>) = IMPLICIT_DEF
188     ; AVX512BW-NEXT: [[ADD:%[0-9]+]]:_(<16 x s32>) = G_ADD [[DEF]], [[DEF1]]
189     ; AVX512BW-NEXT: $zmm0 = COPY [[ADD]](<16 x s32>)
190     ; AVX512BW-NEXT: RET 0
191     %0(<16 x s32>) = IMPLICIT_DEF
192     %1(<16 x s32>) = IMPLICIT_DEF
193     %2(<16 x s32>) = G_ADD %0, %1
194     $zmm0 = COPY %2
195     RET 0
199 name:            test_add_v8i64
200 alignment:       16
201 legalized:       false
202 regBankSelected: false
203 registers:
204   - { id: 0, class: _ }
205   - { id: 1, class: _ }
206   - { id: 2, class: _ }
207 body:             |
208   bb.1 (%ir-block.0):
209     liveins: $zmm0, $zmm1
211     ; AVX1-LABEL: name: test_add_v8i64
212     ; AVX1: liveins: $zmm0, $zmm1
213     ; AVX1-NEXT: {{  $}}
214     ; AVX1-NEXT: [[DEF:%[0-9]+]]:_(<8 x s64>) = IMPLICIT_DEF
215     ; AVX1-NEXT: [[DEF1:%[0-9]+]]:_(<8 x s64>) = IMPLICIT_DEF
216     ; AVX1-NEXT: [[UV:%[0-9]+]]:_(<2 x s64>), [[UV1:%[0-9]+]]:_(<2 x s64>), [[UV2:%[0-9]+]]:_(<2 x s64>), [[UV3:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[DEF]](<8 x s64>)
217     ; AVX1-NEXT: [[UV4:%[0-9]+]]:_(<2 x s64>), [[UV5:%[0-9]+]]:_(<2 x s64>), [[UV6:%[0-9]+]]:_(<2 x s64>), [[UV7:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[DEF1]](<8 x s64>)
218     ; AVX1-NEXT: [[ADD:%[0-9]+]]:_(<2 x s64>) = G_ADD [[UV]], [[UV4]]
219     ; AVX1-NEXT: [[ADD1:%[0-9]+]]:_(<2 x s64>) = G_ADD [[UV1]], [[UV5]]
220     ; AVX1-NEXT: [[ADD2:%[0-9]+]]:_(<2 x s64>) = G_ADD [[UV2]], [[UV6]]
221     ; AVX1-NEXT: [[ADD3:%[0-9]+]]:_(<2 x s64>) = G_ADD [[UV3]], [[UV7]]
222     ; AVX1-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s64>) = G_CONCAT_VECTORS [[ADD]](<2 x s64>), [[ADD1]](<2 x s64>), [[ADD2]](<2 x s64>), [[ADD3]](<2 x s64>)
223     ; AVX1-NEXT: $zmm0 = COPY [[CONCAT_VECTORS]](<8 x s64>)
224     ; AVX1-NEXT: RET 0
225     ;
226     ; AVX512F-LABEL: name: test_add_v8i64
227     ; AVX512F: liveins: $zmm0, $zmm1
228     ; AVX512F-NEXT: {{  $}}
229     ; AVX512F-NEXT: [[DEF:%[0-9]+]]:_(<8 x s64>) = IMPLICIT_DEF
230     ; AVX512F-NEXT: [[DEF1:%[0-9]+]]:_(<8 x s64>) = IMPLICIT_DEF
231     ; AVX512F-NEXT: [[ADD:%[0-9]+]]:_(<8 x s64>) = G_ADD [[DEF]], [[DEF1]]
232     ; AVX512F-NEXT: $zmm0 = COPY [[ADD]](<8 x s64>)
233     ; AVX512F-NEXT: RET 0
234     ;
235     ; AVX512BW-LABEL: name: test_add_v8i64
236     ; AVX512BW: liveins: $zmm0, $zmm1
237     ; AVX512BW-NEXT: {{  $}}
238     ; AVX512BW-NEXT: [[DEF:%[0-9]+]]:_(<8 x s64>) = IMPLICIT_DEF
239     ; AVX512BW-NEXT: [[DEF1:%[0-9]+]]:_(<8 x s64>) = IMPLICIT_DEF
240     ; AVX512BW-NEXT: [[ADD:%[0-9]+]]:_(<8 x s64>) = G_ADD [[DEF]], [[DEF1]]
241     ; AVX512BW-NEXT: $zmm0 = COPY [[ADD]](<8 x s64>)
242     ; AVX512BW-NEXT: RET 0
243     %0(<8 x s64>) = IMPLICIT_DEF
244     %1(<8 x s64>) = IMPLICIT_DEF
245     %2(<8 x s64>) = G_ADD %0, %1
246     $zmm0 = COPY %2
247     RET 0
251 name:            test_add_v64i8_2
252 alignment:       16
253 legalized:       false
254 regBankSelected: false
255 registers:
256   - { id: 0, class: _ }
257   - { id: 1, class: _ }
258   - { id: 2, class: _ }
259   - { id: 3, class: _ }
260   - { id: 4, class: _ }
261   - { id: 5, class: _ }
262   - { id: 6, class: _ }
263   - { id: 7, class: _ }
264   - { id: 8, class: _ }
267 body:             |
268   bb.1 (%ir-block.0):
269     liveins: $ymm0, $ymm1, $ymm2, $ymm3
270     ; AVX1-LABEL: name: test_add_v64i8_2
271     ; AVX1: liveins: $ymm0, $ymm1, $ymm2, $ymm3
272     ; AVX1-NEXT: {{  $}}
273     ; AVX1-NEXT: [[COPY:%[0-9]+]]:_(<32 x s8>) = COPY $ymm0
274     ; AVX1-NEXT: [[COPY1:%[0-9]+]]:_(<32 x s8>) = COPY $ymm1
275     ; AVX1-NEXT: [[COPY2:%[0-9]+]]:_(<32 x s8>) = COPY $ymm2
276     ; AVX1-NEXT: [[COPY3:%[0-9]+]]:_(<32 x s8>) = COPY $ymm3
277     ; AVX1-NEXT: [[UV:%[0-9]+]]:_(<16 x s8>), [[UV1:%[0-9]+]]:_(<16 x s8>) = G_UNMERGE_VALUES [[COPY]](<32 x s8>)
278     ; AVX1-NEXT: [[UV2:%[0-9]+]]:_(<16 x s8>), [[UV3:%[0-9]+]]:_(<16 x s8>) = G_UNMERGE_VALUES [[COPY1]](<32 x s8>)
279     ; AVX1-NEXT: [[UV4:%[0-9]+]]:_(<16 x s8>), [[UV5:%[0-9]+]]:_(<16 x s8>) = G_UNMERGE_VALUES [[COPY2]](<32 x s8>)
280     ; AVX1-NEXT: [[UV6:%[0-9]+]]:_(<16 x s8>), [[UV7:%[0-9]+]]:_(<16 x s8>) = G_UNMERGE_VALUES [[COPY3]](<32 x s8>)
281     ; AVX1-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[UV]], [[UV4]]
282     ; AVX1-NEXT: [[ADD1:%[0-9]+]]:_(<16 x s8>) = G_ADD [[UV1]], [[UV5]]
283     ; AVX1-NEXT: [[ADD2:%[0-9]+]]:_(<16 x s8>) = G_ADD [[UV2]], [[UV6]]
284     ; AVX1-NEXT: [[ADD3:%[0-9]+]]:_(<16 x s8>) = G_ADD [[UV3]], [[UV7]]
285     ; AVX1-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<32 x s8>) = G_CONCAT_VECTORS [[ADD]](<16 x s8>), [[ADD1]](<16 x s8>)
286     ; AVX1-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<32 x s8>) = G_CONCAT_VECTORS [[ADD2]](<16 x s8>), [[ADD3]](<16 x s8>)
287     ; AVX1-NEXT: $ymm0 = COPY [[CONCAT_VECTORS]](<32 x s8>)
288     ; AVX1-NEXT: $ymm1 = COPY [[CONCAT_VECTORS1]](<32 x s8>)
289     ; AVX1-NEXT: RET 0, implicit $ymm0, implicit $ymm1
290     ;
291     ; AVX512F-LABEL: name: test_add_v64i8_2
292     ; AVX512F: liveins: $ymm0, $ymm1, $ymm2, $ymm3
293     ; AVX512F-NEXT: {{  $}}
294     ; AVX512F-NEXT: [[COPY:%[0-9]+]]:_(<32 x s8>) = COPY $ymm0
295     ; AVX512F-NEXT: [[COPY1:%[0-9]+]]:_(<32 x s8>) = COPY $ymm1
296     ; AVX512F-NEXT: [[COPY2:%[0-9]+]]:_(<32 x s8>) = COPY $ymm2
297     ; AVX512F-NEXT: [[COPY3:%[0-9]+]]:_(<32 x s8>) = COPY $ymm3
298     ; AVX512F-NEXT: [[ADD:%[0-9]+]]:_(<32 x s8>) = G_ADD [[COPY]], [[COPY2]]
299     ; AVX512F-NEXT: [[ADD1:%[0-9]+]]:_(<32 x s8>) = G_ADD [[COPY1]], [[COPY3]]
300     ; AVX512F-NEXT: $ymm0 = COPY [[ADD]](<32 x s8>)
301     ; AVX512F-NEXT: $ymm1 = COPY [[ADD1]](<32 x s8>)
302     ; AVX512F-NEXT: RET 0, implicit $ymm0, implicit $ymm1
303     ;
304     ; AVX512BW-LABEL: name: test_add_v64i8_2
305     ; AVX512BW: liveins: $ymm0, $ymm1, $ymm2, $ymm3
306     ; AVX512BW-NEXT: {{  $}}
307     ; AVX512BW-NEXT: [[COPY:%[0-9]+]]:_(<32 x s8>) = COPY $ymm0
308     ; AVX512BW-NEXT: [[COPY1:%[0-9]+]]:_(<32 x s8>) = COPY $ymm1
309     ; AVX512BW-NEXT: [[COPY2:%[0-9]+]]:_(<32 x s8>) = COPY $ymm2
310     ; AVX512BW-NEXT: [[COPY3:%[0-9]+]]:_(<32 x s8>) = COPY $ymm3
311     ; AVX512BW-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<64 x s8>) = G_CONCAT_VECTORS [[COPY]](<32 x s8>), [[COPY1]](<32 x s8>)
312     ; AVX512BW-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<64 x s8>) = G_CONCAT_VECTORS [[COPY2]](<32 x s8>), [[COPY3]](<32 x s8>)
313     ; AVX512BW-NEXT: [[ADD:%[0-9]+]]:_(<64 x s8>) = G_ADD [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]
314     ; AVX512BW-NEXT: [[UV:%[0-9]+]]:_(<32 x s8>), [[UV1:%[0-9]+]]:_(<32 x s8>) = G_UNMERGE_VALUES [[ADD]](<64 x s8>)
315     ; AVX512BW-NEXT: $ymm0 = COPY [[UV]](<32 x s8>)
316     ; AVX512BW-NEXT: $ymm1 = COPY [[UV1]](<32 x s8>)
317     ; AVX512BW-NEXT: RET 0, implicit $ymm0, implicit $ymm1
318     %2(<32 x s8>) = COPY $ymm0
319     %3(<32 x s8>) = COPY $ymm1
320     %4(<32 x s8>) = COPY $ymm2
321     %5(<32 x s8>) = COPY $ymm3
322     %0(<64 x s8>) = G_CONCAT_VECTORS %2(<32 x s8>), %3(<32 x s8>)
323     %1(<64 x s8>) = G_CONCAT_VECTORS %4(<32 x s8>), %5(<32 x s8>)
324     %6(<64 x s8>) = G_ADD %0, %1
325     %7(<32 x s8>), %8(<32 x s8>) = G_UNMERGE_VALUES %6(<64 x s8>)
326     $ymm0 = COPY %7(<32 x s8>)
327     $ymm1 = COPY %8(<32 x s8>)
328     RET 0, implicit $ymm0, implicit $ymm1