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
7 name: test_v2s64_unmerge
11 tracksRegLiveness: true
13 - { id: 0, class: fpr }
14 - { id: 1, class: fpr }
15 - { id: 2, class: fpr }
16 - { id: 3, class: fpr }
20 ; CHECK-LABEL: name: test_v2s64_unmerge
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
42 name: test_v4s32_unmerge
46 tracksRegLiveness: true
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 }
57 ; CHECK-LABEL: name: test_v4s32_unmerge
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
87 name: test_v2s16_unmerge
90 tracksRegLiveness: true
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 }
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
134 regBankSelected: true
135 tracksRegLiveness: true
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 }
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
188 regBankSelected: true
189 tracksRegLiveness: true
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 }
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
253 regBankSelected: true
254 tracksRegLiveness: true
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>)
302 RET_ReallyLR implicit $d0
305 name: test_vecsplit_2v2s32_v4s32
308 regBankSelected: true
309 tracksRegLiveness: true
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
331 regBankSelected: true
332 tracksRegLiveness: true
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
356 regBankSelected: true
357 tracksRegLiveness: true
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)
373 RET_ReallyLR implicit $d0, implicit $d1