[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-unmerge.mir
blobe047692f7d1e01f037003068eae75087ca25ad24
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
3 # RUN: llc -O0 -mattr=-fullfp16 -mtriple=aarch64-- \
4 # RUN: -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=1 %s -o - | FileCheck %s
6 ---
7 name:            test_v2s64_unmerge
8 alignment:       4
9 legalized:       true
10 regBankSelected: true
11 tracksRegLiveness: true
12 registers:
13   - { id: 0, class: fpr }
14   - { id: 1, class: fpr }
15   - { id: 2, class: fpr }
16   - { id: 3, class: fpr }
17 body:             |
18   bb.1:
19     liveins: $q0
20     ; CHECK-LABEL: name: test_v2s64_unmerge
21     ; CHECK: liveins: $q0
22     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
23     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY [[COPY]].dsub
24     ; CHECK: [[CPYi64_:%[0-9]+]]:fpr64 = CPYi64 [[COPY]], 1
25     ; CHECK: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
26     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY1]], %subreg.dsub
27     ; CHECK: [[DEF1:%[0-9]+]]:fpr128 = IMPLICIT_DEF
28     ; CHECK: [[INSERT_SUBREG1:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF1]], [[CPYi64_]], %subreg.dsub
29     ; CHECK: [[INSvi64lane:%[0-9]+]]:fpr128 = INSvi64lane [[INSERT_SUBREG]], 1, [[INSERT_SUBREG1]], 0
30     ; CHECK: $q0 = COPY [[INSvi64lane]]
31     ; CHECK: RET_ReallyLR implicit $q0
32     %0:fpr(<2 x s64>) = COPY $q0
34     ; Since 2 * 64 = 128, we can just directly copy.
35     %2:fpr(s64), %3:fpr(s64) = G_UNMERGE_VALUES %0(<2 x s64>)
37     %1:fpr(<2 x s64>) = G_BUILD_VECTOR %2(s64), %3(s64)
38     $q0 = COPY %1(<2 x s64>)
39     RET_ReallyLR implicit $q0
40 ...
41 ---
42 name:            test_v4s32_unmerge
43 alignment:       4
44 legalized:       true
45 regBankSelected: true
46 tracksRegLiveness: true
47 registers:
48   - { id: 0, class: fpr }
49   - { id: 1, class: fpr }
50   - { id: 2, class: fpr }
51   - { id: 3, class: fpr }
52   - { id: 4, class: fpr }
53   - { id: 5, class: fpr }
54 body:             |
55   bb.1:
56     liveins: $q0
57     ; CHECK-LABEL: name: test_v4s32_unmerge
58     ; CHECK: liveins: $q0
59     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
60     ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY [[COPY]].ssub
61     ; CHECK: [[CPYi32_:%[0-9]+]]:fpr32 = CPYi32 [[COPY]], 1
62     ; CHECK: [[CPYi32_1:%[0-9]+]]:fpr32 = CPYi32 [[COPY]], 2
63     ; CHECK: [[CPYi32_2:%[0-9]+]]:fpr32 = CPYi32 [[COPY]], 3
64     ; CHECK: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
65     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY1]], %subreg.ssub
66     ; CHECK: [[DEF1:%[0-9]+]]:fpr128 = IMPLICIT_DEF
67     ; CHECK: [[INSERT_SUBREG1:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF1]], [[CPYi32_]], %subreg.ssub
68     ; CHECK: [[INSvi32lane:%[0-9]+]]:fpr128 = INSvi32lane [[INSERT_SUBREG]], 1, [[INSERT_SUBREG1]], 0
69     ; CHECK: [[DEF2:%[0-9]+]]:fpr128 = IMPLICIT_DEF
70     ; CHECK: [[INSERT_SUBREG2:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF2]], [[CPYi32_1]], %subreg.ssub
71     ; CHECK: [[INSvi32lane1:%[0-9]+]]:fpr128 = INSvi32lane [[INSvi32lane]], 2, [[INSERT_SUBREG2]], 0
72     ; CHECK: [[DEF3:%[0-9]+]]:fpr128 = IMPLICIT_DEF
73     ; CHECK: [[INSERT_SUBREG3:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF3]], [[CPYi32_2]], %subreg.ssub
74     ; CHECK: [[INSvi32lane2:%[0-9]+]]:fpr128 = INSvi32lane [[INSvi32lane1]], 3, [[INSERT_SUBREG3]], 0
75     ; CHECK: $q0 = COPY [[INSvi32lane2]]
76     ; CHECK: RET_ReallyLR implicit $q0
77     %0:fpr(<4 x s32>) = COPY $q0
79     ; Since 4 * 32 = 128, we can just directly copy.
80     %2:fpr(s32), %3:fpr(s32), %4:fpr(s32), %5:fpr(s32) = G_UNMERGE_VALUES %0(<4 x s32>)
82     %1:fpr(<4 x s32>) = G_BUILD_VECTOR %2(s32), %3(s32), %4(s32), %5(s32)
83     $q0 = COPY %1(<4 x s32>)
84     RET_ReallyLR implicit $q0
85 ...
86 ---
87 name:            test_v2s16_unmerge
88 legalized:       true
89 regBankSelected: true
90 tracksRegLiveness: true
91 registers:
92   - { id: 0, class: fpr }
93   - { id: 1, class: fpr }
94   - { id: 2, class: fpr }
95   - { id: 3, class: fpr }
96   - { id: 4, class: fpr }
97   - { id: 5, class: fpr }
98 body:             |
99   bb.1:
100     liveins: $s0
102     ; CHECK-LABEL: name: test_v2s16_unmerge
103     ; CHECK: liveins: $s0
104     ; CHECK: [[COPY:%[0-9]+]]:fpr32 = COPY $s0
105     ; CHECK: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
106     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.ssub
107     ; CHECK: [[COPY1:%[0-9]+]]:fpr16 = COPY [[INSERT_SUBREG]].hsub
108     ; CHECK: [[CPYi16_:%[0-9]+]]:fpr16 = CPYi16 [[INSERT_SUBREG]], 1
109     ; CHECK: [[DEF1:%[0-9]+]]:fpr128 = IMPLICIT_DEF
110     ; CHECK: [[INSERT_SUBREG1:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF1]], [[COPY1]], %subreg.hsub
111     ; CHECK: [[DEF2:%[0-9]+]]:fpr128 = IMPLICIT_DEF
112     ; CHECK: [[INSERT_SUBREG2:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF2]], [[CPYi16_]], %subreg.hsub
113     ; CHECK: [[INSvi16lane:%[0-9]+]]:fpr128 = INSvi16lane [[INSERT_SUBREG1]], 1, [[INSERT_SUBREG2]], 0
114     ; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY [[INSvi16lane]].ssub
115     ; CHECK: $s0 = COPY [[COPY2]]
116     ; CHECK: RET_ReallyLR implicit $s0
117     %0:fpr(<2 x s16>) = COPY $s0
119     ; Since 2 * 16 != 128, we need to widen using implicit defs.
120     ; Note that we expect to reuse one of the INSERT_SUBREG results, as CPYi16
121     ; expects a lane > 0.
122     %2:fpr(s16), %3:fpr(s16) = G_UNMERGE_VALUES %0(<2 x s16>)
124     %1:fpr(<2 x s16>) = G_BUILD_VECTOR %2(s16), %3(s16)
126     $s0 = COPY %1(<2 x s16>)
128     RET_ReallyLR implicit $s0
131 name:            test_v4s16_unmerge
132 alignment:       4
133 legalized:       true
134 regBankSelected: true
135 tracksRegLiveness: true
136 registers:
137   - { id: 0, class: fpr }
138   - { id: 1, class: fpr }
139   - { id: 2, class: fpr }
140   - { id: 3, class: fpr }
141   - { id: 4, class: fpr }
142   - { id: 5, class: fpr }
143 body:             |
144   bb.1:
145     liveins: $d0
146     ; CHECK-LABEL: name: test_v4s16_unmerge
147     ; CHECK: liveins: $d0
148     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
149     ; CHECK: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
150     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.dsub
151     ; CHECK: [[DEF1:%[0-9]+]]:fpr128 = IMPLICIT_DEF
152     ; CHECK: [[INSERT_SUBREG1:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF1]], [[COPY]], %subreg.dsub
153     ; CHECK: [[DEF2:%[0-9]+]]:fpr128 = IMPLICIT_DEF
154     ; CHECK: [[INSERT_SUBREG2:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF2]], [[COPY]], %subreg.dsub
155     ; CHECK: [[COPY1:%[0-9]+]]:fpr16 = COPY [[INSERT_SUBREG]].hsub
156     ; CHECK: [[CPYi16_:%[0-9]+]]:fpr16 = CPYi16 [[INSERT_SUBREG]], 1
157     ; CHECK: [[CPYi16_1:%[0-9]+]]:fpr16 = CPYi16 [[INSERT_SUBREG1]], 2
158     ; CHECK: [[CPYi16_2:%[0-9]+]]:fpr16 = CPYi16 [[INSERT_SUBREG2]], 3
159     ; CHECK: [[DEF3:%[0-9]+]]:fpr128 = IMPLICIT_DEF
160     ; CHECK: [[INSERT_SUBREG3:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF3]], [[COPY1]], %subreg.hsub
161     ; CHECK: [[DEF4:%[0-9]+]]:fpr128 = IMPLICIT_DEF
162     ; CHECK: [[INSERT_SUBREG4:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF4]], [[CPYi16_]], %subreg.hsub
163     ; CHECK: [[INSvi16lane:%[0-9]+]]:fpr128 = INSvi16lane [[INSERT_SUBREG3]], 1, [[INSERT_SUBREG4]], 0
164     ; CHECK: [[DEF5:%[0-9]+]]:fpr128 = IMPLICIT_DEF
165     ; CHECK: [[INSERT_SUBREG5:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF5]], [[CPYi16_1]], %subreg.hsub
166     ; CHECK: [[INSvi16lane1:%[0-9]+]]:fpr128 = INSvi16lane [[INSvi16lane]], 2, [[INSERT_SUBREG5]], 0
167     ; CHECK: [[DEF6:%[0-9]+]]:fpr128 = IMPLICIT_DEF
168     ; CHECK: [[INSERT_SUBREG6:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF6]], [[CPYi16_2]], %subreg.hsub
169     ; CHECK: [[INSvi16lane2:%[0-9]+]]:fpr128 = INSvi16lane [[INSvi16lane1]], 3, [[INSERT_SUBREG6]], 0
170     ; CHECK: [[COPY2:%[0-9]+]]:fpr64 = COPY [[INSvi16lane2]].dsub
171     ; CHECK: $d0 = COPY [[COPY2]]
172     ; CHECK: RET_ReallyLR implicit $d0
173     %0:fpr(<4 x s16>) = COPY $d0
175     ; Since 4 * 16 != 128, we need to widen using implicit defs.
176     ; Note that we expect to reuse one of the INSERT_SUBREG results, as CPYi16
177     ; expects a lane > 0.
178     %2:fpr(s16), %3:fpr(s16), %4:fpr(s16), %5:fpr(s16) = G_UNMERGE_VALUES %0(<4 x s16>)
180     %1:fpr(<4 x s16>) = G_BUILD_VECTOR %2(s16), %3(s16), %4(s16), %5(s16)
181     $d0 = COPY %1(<4 x s16>)
182     RET_ReallyLR implicit $d0
185 name:            test_v8s16_unmerge
186 alignment:       4
187 legalized:       true
188 regBankSelected: true
189 tracksRegLiveness: true
190 registers:
191   - { id: 0, class: fpr }
192   - { id: 1, class: fpr }
193   - { id: 2, class: fpr }
194   - { id: 3, class: fpr }
195   - { id: 4, class: fpr }
196   - { id: 5, class: fpr }
197   - { id: 6, class: fpr }
198   - { id: 7, class: fpr }
199   - { id: 8, class: fpr }
200   - { id: 9, class: fpr }
201 body:             |
202   bb.1:
203     liveins: $q0
204     ; CHECK-LABEL: name: test_v8s16_unmerge
205     ; CHECK: liveins: $q0
206     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
207     ; CHECK: [[COPY1:%[0-9]+]]:fpr16 = COPY [[COPY]].hsub
208     ; CHECK: [[CPYi16_:%[0-9]+]]:fpr16 = CPYi16 [[COPY]], 1
209     ; CHECK: [[CPYi16_1:%[0-9]+]]:fpr16 = CPYi16 [[COPY]], 2
210     ; CHECK: [[CPYi16_2:%[0-9]+]]:fpr16 = CPYi16 [[COPY]], 3
211     ; CHECK: [[CPYi16_3:%[0-9]+]]:fpr16 = CPYi16 [[COPY]], 4
212     ; CHECK: [[CPYi16_4:%[0-9]+]]:fpr16 = CPYi16 [[COPY]], 5
213     ; CHECK: [[CPYi16_5:%[0-9]+]]:fpr16 = CPYi16 [[COPY]], 6
214     ; CHECK: [[CPYi16_6:%[0-9]+]]:fpr16 = CPYi16 [[COPY]], 7
215     ; CHECK: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
216     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY1]], %subreg.hsub
217     ; CHECK: [[DEF1:%[0-9]+]]:fpr128 = IMPLICIT_DEF
218     ; CHECK: [[INSERT_SUBREG1:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF1]], [[CPYi16_]], %subreg.hsub
219     ; CHECK: [[INSvi16lane:%[0-9]+]]:fpr128 = INSvi16lane [[INSERT_SUBREG]], 1, [[INSERT_SUBREG1]], 0
220     ; CHECK: [[DEF2:%[0-9]+]]:fpr128 = IMPLICIT_DEF
221     ; CHECK: [[INSERT_SUBREG2:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF2]], [[CPYi16_1]], %subreg.hsub
222     ; CHECK: [[INSvi16lane1:%[0-9]+]]:fpr128 = INSvi16lane [[INSvi16lane]], 2, [[INSERT_SUBREG2]], 0
223     ; CHECK: [[DEF3:%[0-9]+]]:fpr128 = IMPLICIT_DEF
224     ; CHECK: [[INSERT_SUBREG3:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF3]], [[CPYi16_2]], %subreg.hsub
225     ; CHECK: [[INSvi16lane2:%[0-9]+]]:fpr128 = INSvi16lane [[INSvi16lane1]], 3, [[INSERT_SUBREG3]], 0
226     ; CHECK: [[DEF4:%[0-9]+]]:fpr128 = IMPLICIT_DEF
227     ; CHECK: [[INSERT_SUBREG4:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF4]], [[CPYi16_3]], %subreg.hsub
228     ; CHECK: [[INSvi16lane3:%[0-9]+]]:fpr128 = INSvi16lane [[INSvi16lane2]], 4, [[INSERT_SUBREG4]], 0
229     ; CHECK: [[DEF5:%[0-9]+]]:fpr128 = IMPLICIT_DEF
230     ; CHECK: [[INSERT_SUBREG5:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF5]], [[CPYi16_4]], %subreg.hsub
231     ; CHECK: [[INSvi16lane4:%[0-9]+]]:fpr128 = INSvi16lane [[INSvi16lane3]], 5, [[INSERT_SUBREG5]], 0
232     ; CHECK: [[DEF6:%[0-9]+]]:fpr128 = IMPLICIT_DEF
233     ; CHECK: [[INSERT_SUBREG6:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF6]], [[CPYi16_5]], %subreg.hsub
234     ; CHECK: [[INSvi16lane5:%[0-9]+]]:fpr128 = INSvi16lane [[INSvi16lane4]], 6, [[INSERT_SUBREG6]], 0
235     ; CHECK: [[DEF7:%[0-9]+]]:fpr128 = IMPLICIT_DEF
236     ; CHECK: [[INSERT_SUBREG7:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF7]], [[CPYi16_6]], %subreg.hsub
237     ; CHECK: [[INSvi16lane6:%[0-9]+]]:fpr128 = INSvi16lane [[INSvi16lane5]], 7, [[INSERT_SUBREG7]], 0
238     ; CHECK: $q0 = COPY [[INSvi16lane6]]
239     ; CHECK: RET_ReallyLR implicit $q0
240     %0:fpr(<8 x s16>) = COPY $q0
242     ; Since 8 * 16 = 128, we can just directly copy.
243     %2:fpr(s16), %3:fpr(s16), %4:fpr(s16), %5:fpr(s16), %6:fpr(s16), %7:fpr(s16), %8:fpr(s16), %9:fpr(s16) = G_UNMERGE_VALUES %0(<8 x s16>)
245     %1:fpr(<8 x s16>) = G_BUILD_VECTOR %2:fpr(s16), %3:fpr(s16), %4:fpr(s16), %5:fpr(s16), %6:fpr(s16), %7:fpr(s16), %8:fpr(s16), %9:fpr(s16)
246     $q0 = COPY %1(<8 x s16>)
247     RET_ReallyLR implicit $q0
250 name:            test_v8s8_unmerge
251 alignment:       4
252 legalized:       true
253 regBankSelected: true
254 tracksRegLiveness: true
255 body:             |
256   bb.1:
257     liveins: $q0
258     ; CHECK-LABEL: name: test_v8s8_unmerge
259     ; CHECK: liveins: $q0
260     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
261     ; CHECK: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
262     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.dsub
263     ; CHECK: [[DEF1:%[0-9]+]]:fpr128 = IMPLICIT_DEF
264     ; CHECK: [[INSERT_SUBREG1:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF1]], [[COPY]], %subreg.dsub
265     ; CHECK: [[DEF2:%[0-9]+]]:fpr128 = IMPLICIT_DEF
266     ; CHECK: [[INSERT_SUBREG2:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF2]], [[COPY]], %subreg.dsub
267     ; CHECK: [[DEF3:%[0-9]+]]:fpr128 = IMPLICIT_DEF
268     ; CHECK: [[INSERT_SUBREG3:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF3]], [[COPY]], %subreg.dsub
269     ; CHECK: [[DEF4:%[0-9]+]]:fpr128 = IMPLICIT_DEF
270     ; CHECK: [[INSERT_SUBREG4:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF4]], [[COPY]], %subreg.dsub
271     ; CHECK: [[DEF5:%[0-9]+]]:fpr128 = IMPLICIT_DEF
272     ; CHECK: [[INSERT_SUBREG5:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF5]], [[COPY]], %subreg.dsub
273     ; CHECK: [[DEF6:%[0-9]+]]:fpr128 = IMPLICIT_DEF
274     ; CHECK: [[INSERT_SUBREG6:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF6]], [[COPY]], %subreg.dsub
275     ; CHECK: [[COPY1:%[0-9]+]]:fpr8 = COPY [[INSERT_SUBREG]].bsub
276     ; CHECK: [[CPYi8_:%[0-9]+]]:fpr8 = CPYi8 [[INSERT_SUBREG]], 1
277     ; CHECK: [[CPYi8_1:%[0-9]+]]:fpr8 = CPYi8 [[INSERT_SUBREG1]], 2
278     ; CHECK: [[CPYi8_2:%[0-9]+]]:fpr8 = CPYi8 [[INSERT_SUBREG2]], 3
279     ; CHECK: [[CPYi8_3:%[0-9]+]]:fpr8 = CPYi8 [[INSERT_SUBREG3]], 4
280     ; CHECK: [[CPYi8_4:%[0-9]+]]:fpr8 = CPYi8 [[INSERT_SUBREG4]], 5
281     ; CHECK: [[CPYi8_5:%[0-9]+]]:fpr8 = CPYi8 [[INSERT_SUBREG5]], 6
282     ; CHECK: [[CPYi8_6:%[0-9]+]]:fpr8 = CPYi8 [[INSERT_SUBREG6]], 7
283     ; CHECK: $b0 = COPY [[COPY1]]
284     ; CHECK: $b1 = COPY [[CPYi8_]]
285     ; CHECK: $b2 = COPY [[CPYi8_1]]
286     ; CHECK: $b3 = COPY [[CPYi8_2]]
287     ; CHECK: $b4 = COPY [[CPYi8_3]]
288     ; CHECK: $b5 = COPY [[CPYi8_4]]
289     ; CHECK: $b6 = COPY [[CPYi8_5]]
290     ; CHECK: $b7 = COPY [[CPYi8_6]]
291     ; CHECK: RET_ReallyLR implicit $d0
292     %0:fpr(<8 x s8>) = COPY $d0
293     %2:fpr(s8), %3:fpr(s8), %4:fpr(s8), %5:fpr(s8), %6:fpr(s8), %7:fpr(s8), %8:fpr(s8), %9:fpr(s8) = G_UNMERGE_VALUES %0(<8 x s8>)
294     $b0 = COPY %2
295     $b1 = COPY %3
296     $b2 = COPY %4
297     $b3 = COPY %5
298     $b4 = COPY %6
299     $b5 = COPY %7
300     $b6 = COPY %8
301     $b7 = COPY %9
302     RET_ReallyLR implicit $d0
305 name:            test_vecsplit_2v2s32_v4s32
306 alignment:       4
307 legalized:       true
308 regBankSelected: true
309 tracksRegLiveness: true
310 body:             |
311   bb.1:
312     liveins: $q0
313     ; CHECK-LABEL: name: test_vecsplit_2v2s32_v4s32
314     ; CHECK: liveins: $q0
315     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
316     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY [[COPY]].dsub
317     ; CHECK: [[CPYi64_:%[0-9]+]]:fpr64 = CPYi64 [[COPY]], 1
318     ; CHECK: $d0 = COPY [[COPY1]]
319     ; CHECK: $d1 = COPY [[CPYi64_]]
320     ; CHECK: RET_ReallyLR implicit $d0
321     %0:fpr(<4 x s32>) = COPY $q0
322     %1:fpr(<2 x s32>), %2:fpr(<2 x s32>) = G_UNMERGE_VALUES %0(<4 x s32>)
323     $d0 = COPY %1(<2 x s32>)
324     $d1 = COPY %2(<2 x s32>)
325     RET_ReallyLR implicit $d0
328 name:            test_vecsplit_2v2s16_v4s16
329 alignment:       4
330 legalized:       true
331 regBankSelected: true
332 tracksRegLiveness: true
333 body:             |
334   bb.1:
335     liveins: $d0
336     ; CHECK-LABEL: name: test_vecsplit_2v2s16_v4s16
337     ; CHECK: liveins: $d0
338     ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0
339     ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY [[COPY]].ssub
340     ; CHECK: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF
341     ; CHECK: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.dsub
342     ; CHECK: [[CPYi32_:%[0-9]+]]:fpr32 = CPYi32 [[INSERT_SUBREG]], 1
343     ; CHECK: $s0 = COPY [[COPY1]]
344     ; CHECK: $s1 = COPY [[CPYi32_]]
345     ; CHECK: RET_ReallyLR implicit $s0
346     %0:fpr(<4 x s16>) = COPY $d0
347     %1:fpr(<2 x s16>), %2:fpr(<2 x s16>) = G_UNMERGE_VALUES %0(<4 x s16>)
348     $s0 = COPY %1(<2 x s16>)
349     $s1 = COPY %2(<2 x s16>)
350     RET_ReallyLR implicit $s0
353 name:            test_s128
354 alignment:       4
355 legalized:       true
356 regBankSelected: true
357 tracksRegLiveness: true
358 body:             |
359   bb.1:
360     liveins: $q0
361     ; CHECK-LABEL: name: test_s128
362     ; CHECK: liveins: $q0
363     ; CHECK: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
364     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY [[COPY]].dsub
365     ; CHECK: [[CPYi64_:%[0-9]+]]:fpr64 = CPYi64 [[COPY]], 1
366     ; CHECK: $d0 = COPY [[COPY1]]
367     ; CHECK: $d1 = COPY [[CPYi64_]]
368     ; CHECK: RET_ReallyLR implicit $d0, implicit $d1
369     %0:fpr(s128) = COPY $q0
370     %1:fpr(s64), %2:fpr(s64) = G_UNMERGE_VALUES %0(s128)
371     $d0 = COPY %1(s64)
372     $d1 = COPY %2(s64)
373     RET_ReallyLR implicit $d0, implicit $d1