1 ; RUN: llc -mtriple armeb-eabi -mattr v7,neon -float-abi soft %s -o - | FileCheck %s -check-prefix CHECK -check-prefix SOFT
2 ; RUN: llc -mtriple armeb-eabi -mattr v7,neon -float-abi hard %s -o - | FileCheck %s -check-prefix CHECK -check-prefix HARD
4 ; CHECK-LABEL: test_i64_f64:
5 define i64 @test_i64_f64(double %p) {
6 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
7 ; SOFT: vadd.f64 [[REG]]
8 ; HARD: vadd.f64 d{{[0-9]+}}, d0
9 %1 = fadd double %p, %p
10 %2 = bitcast double %1 to i64
17 ; CHECK-LABEL: test_i64_v1i64:
18 define i64 @test_i64_v1i64(<1 x i64> %p) {
19 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
20 ; SOFT: vadd.i64 [[REG]]
21 ; HARD: vadd.i64 d{{[0-9]+}}, d0
22 %1 = add <1 x i64> %p, %p
23 %2 = bitcast <1 x i64> %1 to i64
30 ; CHECK-LABEL: test_i64_v2f32:
31 define i64 @test_i64_v2f32(<2 x float> %p) {
32 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
33 ; SOFT: vrev64.32 [[REG]]
34 ; HARD: vrev64.32 d{{[0-9]+}}, d0
35 %1 = fadd <2 x float> %p, %p
36 %2 = bitcast <2 x float> %1 to i64
43 ; CHECK-LABEL: test_i64_v2i32:
44 define i64 @test_i64_v2i32(<2 x i32> %p) {
45 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
46 ; SOFT: vrev64.32 [[REG]]
47 ; HARD: vrev64.32 d{{[0-9]+}}, d0
48 %1 = add <2 x i32> %p, %p
49 %2 = bitcast <2 x i32> %1 to i64
56 ; CHECK-LABEL: test_i64_v4i16:
57 define i64 @test_i64_v4i16(<4 x i16> %p) {
58 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
59 ; SOFT: vrev64.16 [[REG]]
60 ; HARD: vrev64.16 d{{[0-9]+}}, d0
61 %1 = add <4 x i16> %p, %p
62 %2 = bitcast <4 x i16> %1 to i64
69 ; CHECK-LABEL: test_i64_v8i8:
70 define i64 @test_i64_v8i8(<8 x i8> %p) {
71 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
72 ; SOFT: vrev64.8 [[REG]]
73 ; HARD: vrev64.8 d{{[0-9]+}}, d0
74 %1 = add <8 x i8> %p, %p
75 %2 = bitcast <8 x i8> %1 to i64
82 ; CHECK-LABEL: test_f64_i64:
83 define double @test_f64_i64(i64 %p) {
87 %2 = bitcast i64 %1 to double
88 %3 = fadd double %2, %2
90 ; SOFT: vadd.f64 [[REG:d[0-9]+]]
91 ; SOFT: vmov r1, r0, [[REG]]
95 ; CHECK-LABEL: test_f64_v1i64:
96 define double @test_f64_v1i64(<1 x i64> %p) {
97 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
98 ; SOFT: vadd.i64 [[REG]]
99 ; HARD: vadd.i64 d{{[0-9]+}}, d0
100 %1 = add <1 x i64> %p, %p
101 %2 = bitcast <1 x i64> %1 to double
102 %3 = fadd double %2, %2
104 ; SOFT: vadd.f64 [[REG:d[0-9]+]]
105 ; SOFT: vmov r1, r0, [[REG]]
109 ; CHECK-LABEL: test_f64_v2f32:
110 define double @test_f64_v2f32(<2 x float> %p) {
111 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
112 ; SOFT: vrev64.32 [[REG]]
113 ; HARD: vrev64.32 d{{[0-9]+}}, d0
114 %1 = fadd <2 x float> %p, %p
115 %2 = bitcast <2 x float> %1 to double
116 %3 = fadd double %2, %2
118 ; SOFT: vadd.f64 [[REG:d[0-9]+]]
119 ; SOFT: vmov r1, r0, [[REG]]
123 ; CHECK-LABEL: test_f64_v2i32:
124 define double @test_f64_v2i32(<2 x i32> %p) {
125 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
126 ; SOFT: vrev64.32 [[REG]]
127 ; HARD: vrev64.32 d{{[0-9]+}}, d0
128 %1 = add <2 x i32> %p, %p
129 %2 = bitcast <2 x i32> %1 to double
130 %3 = fadd double %2, %2
132 ; SOFT: vadd.f64 [[REG:d[0-9]+]]
133 ; SOFT: vmov r1, r0, [[REG]]
137 ; CHECK-LABEL: test_f64_v4i16:
138 define double @test_f64_v4i16(<4 x i16> %p) {
139 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
140 ; SOFT: vrev64.16 [[REG]]
141 ; HARD: vrev64.16 d{{[0-9]+}}, d0
142 %1 = add <4 x i16> %p, %p
143 %2 = bitcast <4 x i16> %1 to double
144 %3 = fadd double %2, %2
146 ; SOFT: vadd.f64 [[REG:d[0-9]+]]
147 ; SOFT: vmov r1, r0, [[REG]]
151 ; CHECK-LABEL: test_f64_v8i8:
152 define double @test_f64_v8i8(<8 x i8> %p) {
153 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
154 ; SOFT: vrev64.8 [[REG]]
155 ; HARD: vrev64.8 d{{[0-9]+}}, d0
156 %1 = add <8 x i8> %p, %p
157 %2 = bitcast <8 x i8> %1 to double
158 %3 = fadd double %2, %2
160 ; SOFT: vadd.f64 [[REG:d[0-9]+]]
161 ; SOFT: vmov r1, r0, [[REG]]
165 ; CHECK-LABEL: test_v1i64_i64:
166 define <1 x i64> @test_v1i64_i64(i64 %p) {
170 %2 = bitcast i64 %1 to <1 x i64>
171 %3 = add <1 x i64> %2, %2
173 ; SOFT: vadd.i64 [[REG:d[0-9]+]]
174 ; SOFT: vmov r1, r0, [[REG]]
178 ; CHECK-LABEL: test_v1i64_f64:
179 define <1 x i64> @test_v1i64_f64(double %p) {
180 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
181 ; SOFT: vadd.f64 [[REG]]
182 ; HARD: vadd.f64 d{{[0-9]+}}, d0
183 %1 = fadd double %p, %p
184 %2 = bitcast double %1 to <1 x i64>
185 %3 = add <1 x i64> %2, %2
187 ; SOFT: vadd.i64 [[REG:d[0-9]+]]
188 ; SOFT: vmov r1, r0, [[REG]]
192 ; CHECK-LABEL: test_v1i64_v2f32:
193 define <1 x i64> @test_v1i64_v2f32(<2 x float> %p) {
194 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
195 ; SOFT: vrev64.32 [[REG]]
196 ; HARD: vrev64.32 d{{[0-9]+}}, d0
197 %1 = fadd <2 x float> %p, %p
198 %2 = bitcast <2 x float> %1 to <1 x i64>
199 %3 = add <1 x i64> %2, %2
201 ; SOFT: vadd.i64 [[REG:d[0-9]+]]
202 ; SOFT: vmov r1, r0, [[REG]]
206 ; CHECK-LABEL: test_v1i64_v2i32:
207 define <1 x i64> @test_v1i64_v2i32(<2 x i32> %p) {
208 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
209 ; SOFT: vrev64.32 [[REG]]
210 ; HARD: vrev64.32 d{{[0-9]+}}, d0
211 %1 = add <2 x i32> %p, %p
212 %2 = bitcast <2 x i32> %1 to <1 x i64>
213 %3 = add <1 x i64> %2, %2
215 ; SOFT: vadd.i64 [[REG:d[0-9]+]]
216 ; SOFT: vmov r1, r0, [[REG]]
220 ; CHECK-LABEL: test_v1i64_v4i16:
221 define <1 x i64> @test_v1i64_v4i16(<4 x i16> %p) {
222 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
223 ; SOFT: vrev64.16 [[REG]]
224 ; HARD: vrev64.16 d{{[0-9]+}}, d0
225 %1 = add <4 x i16> %p, %p
226 %2 = bitcast <4 x i16> %1 to <1 x i64>
227 %3 = add <1 x i64> %2, %2
229 ; SOFT: vadd.i64 [[REG:d[0-9]+]]
230 ; SOFT: vmov r1, r0, [[REG]]
234 ; CHECK-LABEL: test_v1i64_v8i8:
235 define <1 x i64> @test_v1i64_v8i8(<8 x i8> %p) {
236 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
237 ; SOFT: vrev64.8 [[REG]]
238 ; HARD: vrev64.8 d{{[0-9]+}}, d0
239 %1 = add <8 x i8> %p, %p
240 %2 = bitcast <8 x i8> %1 to <1 x i64>
241 %3 = add <1 x i64> %2, %2
243 ; SOFT: vadd.i64 [[REG:d[0-9]+]]
244 ; SOFT: vmov r1, r0, [[REG]]
248 ; CHECK-LABEL: test_v2f32_i64:
249 define <2 x float> @test_v2f32_i64(i64 %p) {
253 %2 = bitcast i64 %1 to <2 x float>
254 %3 = fadd <2 x float> %2, %2
256 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
257 ; SOFT: vmov r1, r0, [[REG]]
261 ; CHECK-LABEL: test_v2f32_f64:
262 define <2 x float> @test_v2f32_f64(double %p) {
263 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
264 ; SOFT: vadd.f64 [[REG]]
265 ; HARD: vadd.f64 d{{[0-9]+}}, d0
266 %1 = fadd double %p, %p
267 %2 = bitcast double %1 to <2 x float>
268 %3 = fadd <2 x float> %2, %2
270 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
271 ; SOFT: vmov r1, r0, [[REG]]
275 ; CHECK-LABEL: test_v2f32_v1i64:
276 define <2 x float> @test_v2f32_v1i64(<1 x i64> %p) {
277 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
278 ; SOFT: vadd.i64 [[REG]]
279 ; HARD: vadd.i64 d{{[0-9]+}}, d0
280 %1 = add <1 x i64> %p, %p
281 %2 = bitcast <1 x i64> %1 to <2 x float>
282 %3 = fadd <2 x float> %2, %2
284 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
285 ; SOFT: vmov r1, r0, [[REG]]
289 ; CHECK-LABEL: test_v2f32_v2i32:
290 define <2 x float> @test_v2f32_v2i32(<2 x i32> %p) {
291 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
292 ; SOFT: vrev64.32 [[REG]]
293 ; HARD: vrev64.32 d{{[0-9]+}}, d0
294 %1 = add <2 x i32> %p, %p
295 %2 = bitcast <2 x i32> %1 to <2 x float>
296 %3 = fadd <2 x float> %2, %2
298 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
299 ; SOFT: vmov r1, r0, [[REG]]
303 ; CHECK-LABEL: test_v2f32_v4i16:
304 define <2 x float> @test_v2f32_v4i16(<4 x i16> %p) {
305 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
306 ; SOFT: vrev64.16 [[REG]]
307 ; HARD: vrev64.16 d{{[0-9]+}}, d0
308 %1 = add <4 x i16> %p, %p
309 %2 = bitcast <4 x i16> %1 to <2 x float>
310 %3 = fadd <2 x float> %2, %2
312 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
313 ; SOFT: vmov r1, r0, [[REG]]
317 ; CHECK-LABEL: test_v2f32_v8i8:
318 define <2 x float> @test_v2f32_v8i8(<8 x i8> %p) {
319 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
320 ; SOFT: vrev64.8 [[REG]]
321 ; HARD: vrev64.8 d{{[0-9]+}}, d0
322 %1 = add <8 x i8> %p, %p
323 %2 = bitcast <8 x i8> %1 to <2 x float>
324 %3 = fadd <2 x float> %2, %2
326 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
327 ; SOFT: vmov r1, r0, [[REG]]
331 ; CHECK-LABEL: test_v2i32_i64:
332 define <2 x i32> @test_v2i32_i64(i64 %p) {
336 %2 = bitcast i64 %1 to <2 x i32>
337 %3 = add <2 x i32> %2, %2
339 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
340 ; SOFT: vmov r1, r0, [[REG]]
344 ; CHECK-LABEL: test_v2i32_f64:
345 define <2 x i32> @test_v2i32_f64(double %p) {
346 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
347 ; SOFT: vadd.f64 [[REG]]
348 ; HARD: vadd.f64 d{{[0-9]+}}, d0
349 %1 = fadd double %p, %p
350 %2 = bitcast double %1 to <2 x i32>
351 %3 = add <2 x i32> %2, %2
353 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
354 ; SOFT: vmov r1, r0, [[REG]]
358 ; CHECK-LABEL: test_v2i32_v1i64:
359 define <2 x i32> @test_v2i32_v1i64(<1 x i64> %p) {
360 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
361 ; SOFT: vadd.i64 [[REG]]
362 ; HARD: vadd.i64 d{{[0-9]+}}, d0
363 %1 = add <1 x i64> %p, %p
364 %2 = bitcast <1 x i64> %1 to <2 x i32>
365 %3 = add <2 x i32> %2, %2
367 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
368 ; SOFT: vmov r1, r0, [[REG]]
372 ; CHECK-LABEL: test_v2i32_v2f32:
373 define <2 x i32> @test_v2i32_v2f32(<2 x float> %p) {
374 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
375 ; SOFT: vrev64.32 [[REG]]
376 ; HARD: vrev64.32 d{{[0-9]+}}, d0
377 %1 = fadd <2 x float> %p, %p
378 %2 = bitcast <2 x float> %1 to <2 x i32>
379 %3 = add <2 x i32> %2, %2
381 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
382 ; SOFT: vmov r1, r0, [[REG]]
386 ; CHECK-LABEL: test_v2i32_v4i16:
387 define <2 x i32> @test_v2i32_v4i16(<4 x i16> %p) {
388 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
389 ; SOFT: vrev64.16 [[REG]]
390 ; HARD: vrev64.16 d{{[0-9]+}}, d0
391 %1 = add <4 x i16> %p, %p
392 %2 = bitcast <4 x i16> %1 to <2 x i32>
393 %3 = add <2 x i32> %2, %2
395 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
396 ; SOFT: vmov r1, r0, [[REG]]
400 ; CHECK-LABEL: test_v2i32_v8i8:
401 define <2 x i32> @test_v2i32_v8i8(<8 x i8> %p) {
402 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
403 ; SOFT: vrev64.8 [[REG]]
404 ; HARD: vrev64.8 d{{[0-9]+}}, d0
405 %1 = add <8 x i8> %p, %p
406 %2 = bitcast <8 x i8> %1 to <2 x i32>
407 %3 = add <2 x i32> %2, %2
409 ; SOFT: vrev64.32 [[REG:d[0-9]+]]
410 ; SOFT: vmov r1, r0, [[REG]]
414 ; CHECK-LABEL: test_v4i16_i64:
415 define <4 x i16> @test_v4i16_i64(i64 %p) {
419 %2 = bitcast i64 %1 to <4 x i16>
420 %3 = add <4 x i16> %2, %2
422 ; SOFT: vrev64.16 [[REG:d[0-9]+]]
423 ; SOFT: vmov r1, r0, [[REG]]
427 ; CHECK-LABEL: test_v4i16_f64:
428 define <4 x i16> @test_v4i16_f64(double %p) {
429 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
430 ; SOFT: vadd.f64 [[REG]]
431 ; HARD: vadd.f64 d{{[0-9]+}}, d0
432 %1 = fadd double %p, %p
433 %2 = bitcast double %1 to <4 x i16>
434 %3 = add <4 x i16> %2, %2
436 ; SOFT: vrev64.16 [[REG:d[0-9]+]]
437 ; SOFT: vmov r1, r0, [[REG]]
441 ; CHECK-LABEL: test_v4i16_v1i64:
442 define <4 x i16> @test_v4i16_v1i64(<1 x i64> %p) {
443 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
444 ; SOFT: vadd.i64 [[REG]]
445 ; HARD: vadd.i64 d{{[0-9]+}}, d0
446 %1 = add <1 x i64> %p, %p
447 %2 = bitcast <1 x i64> %1 to <4 x i16>
448 %3 = add <4 x i16> %2, %2
450 ; SOFT: vrev64.16 [[REG:d[0-9]+]]
451 ; SOFT: vmov r1, r0, [[REG]]
455 ; CHECK-LABEL: test_v4i16_v2f32:
456 define <4 x i16> @test_v4i16_v2f32(<2 x float> %p) {
457 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
458 ; SOFT: vrev64.32 [[REG]]
459 ; HARD: vrev64.32 d{{[0-9]+}}, d0
460 %1 = fadd <2 x float> %p, %p
461 %2 = bitcast <2 x float> %1 to <4 x i16>
462 %3 = add <4 x i16> %2, %2
464 ; SOFT: vrev64.16 [[REG:d[0-9]+]]
465 ; SOFT: vmov r1, r0, [[REG]]
469 ; CHECK-LABEL: test_v4i16_v2i32:
470 define <4 x i16> @test_v4i16_v2i32(<2 x i32> %p) {
471 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
472 ; SOFT: vrev64.32 [[REG]]
473 ; HARD: vrev64.32 d{{[0-9]+}}, d0
474 %1 = add <2 x i32> %p, %p
475 %2 = bitcast <2 x i32> %1 to <4 x i16>
476 %3 = add <4 x i16> %2, %2
478 ; SOFT: vrev64.16 [[REG:d[0-9]+]]
479 ; SOFT: vmov r1, r0, [[REG]]
483 ; CHECK-LABEL: test_v4i16_v8i8:
484 define <4 x i16> @test_v4i16_v8i8(<8 x i8> %p) {
485 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
486 ; SOFT: vrev64.8 [[REG]]
487 ; HARD: vrev64.8 d{{[0-9]+}}, d0
488 %1 = add <8 x i8> %p, %p
489 %2 = bitcast <8 x i8> %1 to <4 x i16>
490 %3 = add <4 x i16> %2, %2
492 ; SOFT: vrev64.16 [[REG:d[0-9]+]]
493 ; SOFT: vmov r1, r0, [[REG]]
497 ; CHECK-LABEL: test_v8i8_i64:
498 define <8 x i8> @test_v8i8_i64(i64 %p) {
502 %2 = bitcast i64 %1 to <8 x i8>
503 %3 = add <8 x i8> %2, %2
505 ; SOFT: vrev64.8 [[REG:d[0-9]+]]
506 ; SOFT: vmov r1, r0, [[REG]]
510 ; CHECK-LABEL: test_v8i8_f64:
511 define <8 x i8> @test_v8i8_f64(double %p) {
512 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
513 ; SOFT: vadd.f64 [[REG]]
514 ; HARD: vadd.f64 d{{[0-9]+}}, d0
515 %1 = fadd double %p, %p
516 %2 = bitcast double %1 to <8 x i8>
517 %3 = add <8 x i8> %2, %2
519 ; SOFT: vrev64.8 [[REG:d[0-9]+]]
520 ; SOFT: vmov r1, r0, [[REG]]
524 ; CHECK-LABEL: test_v8i8_v1i64:
525 define <8 x i8> @test_v8i8_v1i64(<1 x i64> %p) {
526 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
527 ; SOFT: vadd.i64 [[REG]]
528 ; HARD: vadd.i64 d{{[0-9]+}}, d0
529 %1 = add <1 x i64> %p, %p
530 %2 = bitcast <1 x i64> %1 to <8 x i8>
531 %3 = add <8 x i8> %2, %2
533 ; SOFT: vrev64.8 [[REG:d[0-9]+]]
534 ; SOFT: vmov r1, r0, [[REG]]
538 ; CHECK-LABEL: test_v8i8_v2f32:
539 define <8 x i8> @test_v8i8_v2f32(<2 x float> %p) {
540 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
541 ; SOFT: vrev64.32 [[REG]]
542 ; HARD: vrev64.32 d{{[0-9]+}}, d0
543 %1 = fadd <2 x float> %p, %p
544 %2 = bitcast <2 x float> %1 to <8 x i8>
545 %3 = add <8 x i8> %2, %2
547 ; SOFT: vrev64.8 [[REG:d[0-9]+]]
548 ; SOFT: vmov r1, r0, [[REG]]
552 ; CHECK-LABEL: test_v8i8_v2i32:
553 define <8 x i8> @test_v8i8_v2i32(<2 x i32> %p) {
554 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
555 ; SOFT: vrev64.32 [[REG]]
556 ; HARD: vrev64.32 d{{[0-9]+}}, d0
557 %1 = add <2 x i32> %p, %p
558 %2 = bitcast <2 x i32> %1 to <8 x i8>
559 %3 = add <8 x i8> %2, %2
561 ; SOFT: vrev64.8 [[REG:d[0-9]+]]
562 ; SOFT: vmov r1, r0, [[REG]]
566 ; CHECK-LABEL: test_v8i8_v4i16:
567 define <8 x i8> @test_v8i8_v4i16(<4 x i16> %p) {
568 ; SOFT: vmov [[REG:d[0-9]+]], r1, r0
569 ; SOFT: vrev64.16 [[REG]]
570 ; HARD: vrev64.16 d{{[0-9]+}}, d0
571 %1 = add <4 x i16> %p, %p
572 %2 = bitcast <4 x i16> %1 to <8 x i8>
573 %3 = add <8 x i8> %2, %2
575 ; SOFT: vrev64.8 [[REG:d[0-9]+]]
576 ; SOFT: vmov r1, r0, [[REG]]
580 ; CHECK-LABEL: test_f128_v2f64:
581 define fp128 @test_f128_v2f64(<2 x double> %p) {
582 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
583 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
584 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG1]]
585 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG2]]
586 ; HARD: vadd.f64 d{{[0-9]+}}, d1
587 ; HARD: vadd.f64 d{{[0-9]+}}, d0
588 %1 = fadd <2 x double> %p, %p
589 %2 = bitcast <2 x double> %1 to fp128
590 %3 = fadd fp128 %2, %2
592 ; CHECK: vst1.32 {d{{[0-9]+}}[1]}, [{{[a-z0-9]+}}:32]
593 ; CHECK: vst1.32 {d{{[0-9]+}}[0]}, [{{[a-z0-9]+}}:32]
596 ; CHECK-LABEL: test_f128_v2i64:
597 define fp128 @test_f128_v2i64(<2 x i64> %p) {
598 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
599 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
600 ; HARD: vadd.i64 q{{[0-9]+}}, q0
601 %1 = add <2 x i64> %p, %p
602 %2 = bitcast <2 x i64> %1 to fp128
603 %3 = fadd fp128 %2, %2
605 ; CHECK: vst1.32 {d{{[0-9]+}}[1]}, [{{[a-z0-9]+}}:32]
606 ; CHECK: vst1.32 {d{{[0-9]+}}[0]}, [{{[a-z0-9]+}}:32]
609 ; CHECK-LABEL: test_f128_v4f32:
610 define fp128 @test_f128_v4f32(<4 x float> %p) {
611 ; HARD: vrev64.32 q{{[0-9]+}}, q0
612 %1 = fadd <4 x float> %p, %p
613 %2 = bitcast <4 x float> %1 to fp128
614 %3 = fadd fp128 %2, %2
616 ; CHECK: vst1.32 {d{{[0-9]+}}[1]}, [{{[a-z0-9]+}}:32]
617 ; CHECK: vst1.32 {d{{[0-9]+}}[0]}, [{{[a-z0-9]+}}:32]
620 ; CHECK-LABEL: test_f128_v4i32:
621 define fp128 @test_f128_v4i32(<4 x i32> %p) {
622 ; HARD: vrev64.32 q{{[0-9]+}}, q0
623 %1 = add <4 x i32> %p, %p
624 %2 = bitcast <4 x i32> %1 to fp128
625 %3 = fadd fp128 %2, %2
627 ; CHECK: vst1.32 {d{{[0-9]+}}[1]}, [{{[a-z0-9]+}}:32]
628 ; CHECK: vst1.32 {d{{[0-9]+}}[0]}, [{{[a-z0-9]+}}:32]
631 ; CHECK-LABEL: test_f128_v8i16:
632 define fp128 @test_f128_v8i16(<8 x i16> %p) {
633 ; HARD: vrev64.16 q{{[0-9]+}}, q0
634 %1 = add <8 x i16> %p, %p
635 %2 = bitcast <8 x i16> %1 to fp128
636 %3 = fadd fp128 %2, %2
638 ; CHECK: vst1.32 {d{{[0-9]+}}[1]}, [{{[a-z0-9]+}}:32]
639 ; CHECK: vst1.32 {d{{[0-9]+}}[0]}, [{{[a-z0-9]+}}:32]
642 ; CHECK-LABEL: test_f128_v16i8:
643 define fp128 @test_f128_v16i8(<16 x i8> %p) {
644 ; HARD: vrev64.8 q{{[0-9]+}}, q0
645 %1 = add <16 x i8> %p, %p
646 %2 = bitcast <16 x i8> %1 to fp128
647 %3 = fadd fp128 %2, %2
649 ; CHECK: vst1.32 {d{{[0-9]+}}[1]}, [{{[a-z0-9]+}}:32]
650 ; CHECK: vst1.32 {d{{[0-9]+}}[0]}, [{{[a-z0-9]+}}:32]
653 ; CHECK-LABEL: test_v2f64_f128:
654 define <2 x double> @test_v2f64_f128(fp128 %p) {
655 ; CHECK: vmov.32 [[REG2:d[0-9]+]][0], r2
656 ; CHECK: vmov.32 [[REG1:d[0-9]+]][0], r0
657 ; CHECK: vmov.32 [[REG2]][1], r3
658 ; CHECK: vmov.32 [[REG1]][1], r1
659 %1 = fadd fp128 %p, %p
660 %2 = bitcast fp128 %1 to <2 x double>
661 %3 = fadd <2 x double> %2, %2
663 ; SOFT: vadd.f64 [[REG1:d[0-9]+]]
664 ; SOFT: vadd.f64 [[REG2:d[0-9]+]]
665 ; SOFT: vmov r1, r0, [[REG2]]
666 ; SOFT: vmov r3, r2, [[REG1]]
671 ; CHECK-LABEL: test_v2f64_v2i64:
672 define <2 x double> @test_v2f64_v2i64(<2 x i64> %p) {
673 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
674 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
675 ; HARD: vadd.i64 q{{[0-9]+}}, q0
676 %1 = add <2 x i64> %p, %p
677 %2 = bitcast <2 x i64> %1 to <2 x double>
678 %3 = fadd <2 x double> %2, %2
680 ; SOFT: vadd.f64 [[REG1:d[0-9]+]]
681 ; SOFT: vadd.f64 [[REG2:d[0-9]+]]
682 ; SOFT: vmov r1, r0, [[REG2]]
683 ; SOFT: vmov r3, r2, [[REG1]]
688 ; CHECK-LABEL: test_v2f64_v4f32:
689 define <2 x double> @test_v2f64_v4f32(<4 x float> %p) {
690 ; HARD: vrev64.32 q{{[0-9]+}}, q0
691 %1 = fadd <4 x float> %p, %p
692 %2 = bitcast <4 x float> %1 to <2 x double>
693 %3 = fadd <2 x double> %2, %2
695 ; SOFT: vadd.f64 [[REG1:d[0-9]+]]
696 ; SOFT: vadd.f64 [[REG2:d[0-9]+]]
697 ; SOFT: vmov r1, r0, [[REG2]]
698 ; SOFT: vmov r3, r2, [[REG1]]
703 ; CHECK-LABEL: test_v2f64_v4i32:
704 define <2 x double> @test_v2f64_v4i32(<4 x i32> %p) {
705 ; HARD: vrev64.32 q{{[0-9]+}}, q0
706 %1 = add <4 x i32> %p, %p
707 %2 = bitcast <4 x i32> %1 to <2 x double>
708 %3 = fadd <2 x double> %2, %2
710 ; SOFT: vadd.f64 [[REG1:d[0-9]+]]
711 ; SOFT: vadd.f64 [[REG2:d[0-9]+]]
712 ; SOFT: vmov r1, r0, [[REG2]]
713 ; SOFT: vmov r3, r2, [[REG1]]
718 ; CHECK-LABEL: test_v2f64_v8i16:
719 define <2 x double> @test_v2f64_v8i16(<8 x i16> %p) {
720 ; HARD: vrev64.16 q{{[0-9]+}}, q0
721 %1 = add <8 x i16> %p, %p
722 %2 = bitcast <8 x i16> %1 to <2 x double>
723 %3 = fadd <2 x double> %2, %2
725 ; SOFT: vadd.f64 [[REG1:d[0-9]+]]
726 ; SOFT: vadd.f64 [[REG2:d[0-9]+]]
727 ; SOFT: vmov r1, r0, [[REG2]]
728 ; SOFT: vmov r3, r2, [[REG1]]
733 ; CHECK-LABEL: test_v2f64_v16i8:
734 define <2 x double> @test_v2f64_v16i8(<16 x i8> %p) {
735 ; HARD: vrev64.8 q{{[0-9]+}}, q0
736 %1 = add <16 x i8> %p, %p
737 %2 = bitcast <16 x i8> %1 to <2 x double>
738 %3 = fadd <2 x double> %2, %2
740 ; SOFT: vadd.f64 [[REG1:d[0-9]+]]
741 ; SOFT: vadd.f64 [[REG2:d[0-9]+]]
742 ; SOFT: vmov r1, r0, [[REG2]]
743 ; SOFT: vmov r3, r2, [[REG1]]
748 ; CHECK-LABEL: test_v2i64_f128:
749 define <2 x i64> @test_v2i64_f128(fp128 %p) {
750 ; CHECK: vmov.32 [[REG2:d[0-9]+]][0], r2
751 ; CHECK: vmov.32 [[REG1:d[0-9]+]][0], r0
752 ; CHECK: vmov.32 [[REG2]][1], r3
753 ; CHECK: vmov.32 [[REG1]][1], r1
754 %1 = fadd fp128 %p, %p
755 %2 = bitcast fp128 %1 to <2 x i64>
756 %3 = add <2 x i64> %2, %2
763 ; CHECK-LABEL: test_v2i64_v2f64:
764 define <2 x i64> @test_v2i64_v2f64(<2 x double> %p) {
765 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
766 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
767 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG1]]
768 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG2]]
769 ; HARD: vadd.f64 d{{[0-9]+}}, d1
770 ; HARD: vadd.f64 d{{[0-9]+}}, d0
771 %1 = fadd <2 x double> %p, %p
772 %2 = bitcast <2 x double> %1 to <2 x i64>
773 %3 = add <2 x i64> %2, %2
780 ; CHECK-LABEL: test_v2i64_v4f32:
781 define <2 x i64> @test_v2i64_v4f32(<4 x float> %p) {
782 ; HARD: vrev64.32 q{{[0-9]+}}, q0
783 %1 = fadd <4 x float> %p, %p
784 %2 = bitcast <4 x float> %1 to <2 x i64>
785 %3 = add <2 x i64> %2, %2
792 ; CHECK-LABEL: test_v2i64_v4i32:
793 define <2 x i64> @test_v2i64_v4i32(<4 x i32> %p) {
794 ; HARD: vrev64.32 q{{[0-9]+}}, q0
795 %1 = add <4 x i32> %p, %p
796 %2 = bitcast <4 x i32> %1 to <2 x i64>
797 %3 = add <2 x i64> %2, %2
804 ; CHECK-LABEL: test_v2i64_v8i16:
805 define <2 x i64> @test_v2i64_v8i16(<8 x i16> %p) {
806 ; HARD: vrev64.16 q{{[0-9]+}}, q0
807 %1 = add <8 x i16> %p, %p
808 %2 = bitcast <8 x i16> %1 to <2 x i64>
809 %3 = add <2 x i64> %2, %2
816 ; CHECK-LABEL: test_v2i64_v16i8:
817 define <2 x i64> @test_v2i64_v16i8(<16 x i8> %p) {
818 ; HARD: vrev64.8 q{{[0-9]+}}, q0
819 %1 = add <16 x i8> %p, %p
820 %2 = bitcast <16 x i8> %1 to <2 x i64>
821 %3 = add <2 x i64> %2, %2
828 ; CHECK-LABEL: test_v4f32_f128:
829 define <4 x float> @test_v4f32_f128(fp128 %p) {
830 ; CHECK: vmov.32 [[REG2:d[0-9]+]][0], r2
831 ; CHECK: vmov.32 [[REG1:d[0-9]+]][0], r0
832 ; CHECK: vmov.32 [[REG2]][1], r3
833 ; CHECK: vmov.32 [[REG1]][1], r1
834 %1 = fadd fp128 %p, %p
835 %2 = bitcast fp128 %1 to <4 x float>
836 %3 = fadd <4 x float> %2, %2
843 ; CHECK-LABEL: test_v4f32_v2f64:
844 define <4 x float> @test_v4f32_v2f64(<2 x double> %p) {
845 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
846 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
847 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG1]]
848 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG2]]
849 ; HARD: vadd.f64 d{{[0-9]+}}, d1
850 ; HARD: vadd.f64 d{{[0-9]+}}, d0
851 %1 = fadd <2 x double> %p, %p
852 %2 = bitcast <2 x double> %1 to <4 x float>
853 %3 = fadd <4 x float> %2, %2
860 ; CHECK-LABEL: test_v4f32_v2i64:
861 define <4 x float> @test_v4f32_v2i64(<2 x i64> %p) {
862 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
863 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
864 ; HARD: vadd.i64 q{{[0-9]+}}, q0
865 %1 = add <2 x i64> %p, %p
866 %2 = bitcast <2 x i64> %1 to <4 x float>
867 %3 = fadd <4 x float> %2, %2
874 ; CHECK-LABEL: test_v4f32_v4i32:
875 define <4 x float> @test_v4f32_v4i32(<4 x i32> %p) {
876 ; HARD: vrev64.32 q{{[0-9]+}}, q0
877 %1 = add <4 x i32> %p, %p
878 %2 = bitcast <4 x i32> %1 to <4 x float>
879 %3 = fadd <4 x float> %2, %2
886 ; CHECK-LABEL: test_v4f32_v8i16:
887 define <4 x float> @test_v4f32_v8i16(<8 x i16> %p) {
888 ; HARD: vrev64.16 q{{[0-9]+}}, q0
889 %1 = add <8 x i16> %p, %p
890 %2 = bitcast <8 x i16> %1 to <4 x float>
891 %3 = fadd <4 x float> %2, %2
898 ; CHECK-LABEL: test_v4f32_v16i8:
899 define <4 x float> @test_v4f32_v16i8(<16 x i8> %p) {
900 ; HARD: vrev64.8 q{{[0-9]+}}, q0
901 %1 = add <16 x i8> %p, %p
902 %2 = bitcast <16 x i8> %1 to <4 x float>
903 %3 = fadd <4 x float> %2, %2
910 ; CHECK-LABEL: test_v4i32_f128:
911 define <4 x i32> @test_v4i32_f128(fp128 %p) {
912 ; CHECK: vmov.32 [[REG2:d[0-9]+]][0], r2
913 ; CHECK: vmov.32 [[REG1:d[0-9]+]][0], r0
914 ; CHECK: vmov.32 [[REG2]][1], r3
915 ; CHECK: vmov.32 [[REG1]][1], r1
916 %1 = fadd fp128 %p, %p
917 %2 = bitcast fp128 %1 to <4 x i32>
918 %3 = add <4 x i32> %2, %2
925 ; CHECK-LABEL: test_v4i32_v2f64:
926 define <4 x i32> @test_v4i32_v2f64(<2 x double> %p) {
927 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
928 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
929 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG1]]
930 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG2]]
931 ; HARD: vadd.f64 d{{[0-9]+}}, d1
932 ; HARD: vadd.f64 d{{[0-9]+}}, d0
933 %1 = fadd <2 x double> %p, %p
934 %2 = bitcast <2 x double> %1 to <4 x i32>
935 %3 = add <4 x i32> %2, %2
942 ; CHECK-LABEL: test_v4i32_v2i64:
943 define <4 x i32> @test_v4i32_v2i64(<2 x i64> %p) {
944 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
945 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
946 ; HARD: vadd.i64 q{{[0-9]+}}, q0
947 %1 = add <2 x i64> %p, %p
948 %2 = bitcast <2 x i64> %1 to <4 x i32>
949 %3 = add <4 x i32> %2, %2
956 ; CHECK-LABEL: test_v4i32_v4f32:
957 define <4 x i32> @test_v4i32_v4f32(<4 x float> %p) {
958 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
959 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
960 ; HARD: vrev64.32 q{{[0-9]+}}, q0
961 %1 = fadd <4 x float> %p, %p
962 %2 = bitcast <4 x float> %1 to <4 x i32>
963 %3 = add <4 x i32> %2, %2
970 ; CHECK-LABEL: test_v4i32_v8i16:
971 define <4 x i32> @test_v4i32_v8i16(<8 x i16> %p) {
972 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
973 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
974 ; HARD: vrev64.16 q{{[0-9]+}}, q0
975 %1 = add <8 x i16> %p, %p
976 %2 = bitcast <8 x i16> %1 to <4 x i32>
977 %3 = add <4 x i32> %2, %2
984 ; CHECK-LABEL: test_v4i32_v16i8:
985 define <4 x i32> @test_v4i32_v16i8(<16 x i8> %p) {
986 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
987 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
988 ; HARD: vrev64.8 q{{[0-9]+}}, q0
989 %1 = add <16 x i8> %p, %p
990 %2 = bitcast <16 x i8> %1 to <4 x i32>
991 %3 = add <4 x i32> %2, %2
998 ; CHECK-LABEL: test_v8i16_f128:
999 define <8 x i16> @test_v8i16_f128(fp128 %p) {
1000 ; CHECK: vmov.32 [[REG2:d[0-9]+]][0], r2
1001 ; CHECK: vmov.32 [[REG1:d[0-9]+]][0], r0
1002 ; CHECK: vmov.32 [[REG2]][1], r3
1003 ; CHECK: vmov.32 [[REG1]][1], r1
1004 %1 = fadd fp128 %p, %p
1005 %2 = bitcast fp128 %1 to <8 x i16>
1006 %3 = add <8 x i16> %2, %2
1010 ; HARD: vrev64.16 q0
1013 ; CHECK-LABEL: test_v8i16_v2f64:
1014 define <8 x i16> @test_v8i16_v2f64(<2 x double> %p) {
1015 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1016 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1017 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG1]]
1018 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG2]]
1019 ; HARD: vadd.f64 d{{[0-9]+}}, d1
1020 ; HARD: vadd.f64 d{{[0-9]+}}, d0
1021 %1 = fadd <2 x double> %p, %p
1022 %2 = bitcast <2 x double> %1 to <8 x i16>
1023 %3 = add <8 x i16> %2, %2
1027 ; HARD: vrev64.16 q0
1030 ; CHECK-LABEL: test_v8i16_v2i64:
1031 define <8 x i16> @test_v8i16_v2i64(<2 x i64> %p) {
1032 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1033 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1034 ; HARD: vadd.i64 q{{[0-9]+}}, q0
1035 %1 = add <2 x i64> %p, %p
1036 %2 = bitcast <2 x i64> %1 to <8 x i16>
1037 %3 = add <8 x i16> %2, %2
1041 ; HARD: vrev64.16 q0
1044 ; CHECK-LABEL: test_v8i16_v4f32:
1045 define <8 x i16> @test_v8i16_v4f32(<4 x float> %p) {
1046 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1047 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1048 ; HARD: vrev64.32 q{{[0-9]+}}, q0
1049 %1 = fadd <4 x float> %p, %p
1050 %2 = bitcast <4 x float> %1 to <8 x i16>
1051 %3 = add <8 x i16> %2, %2
1055 ; HARD: vrev64.16 q0
1058 ; CHECK-LABEL: test_v8i16_v4i32:
1059 define <8 x i16> @test_v8i16_v4i32(<4 x i32> %p) {
1060 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1061 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1062 ; HARD: vrev64.32 q{{[0-9]+}}, q0
1063 %1 = add <4 x i32> %p, %p
1064 %2 = bitcast <4 x i32> %1 to <8 x i16>
1065 %3 = add <8 x i16> %2, %2
1069 ; HARD: vrev64.16 q0
1072 ; CHECK-LABEL: test_v8i16_v16i8:
1073 define <8 x i16> @test_v8i16_v16i8(<16 x i8> %p) {
1074 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1075 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1076 ; HARD: vrev64.8 q{{[0-9]+}}, q0
1077 %1 = add <16 x i8> %p, %p
1078 %2 = bitcast <16 x i8> %1 to <8 x i16>
1079 %3 = add <8 x i16> %2, %2
1083 ; HARD: vrev64.16 q0
1086 ; CHECK-LABEL: test_v16i8_f128:
1087 define <16 x i8> @test_v16i8_f128(fp128 %p) {
1088 ; CHECK: vmov.32 [[REG2:d[0-9]+]][0], r2
1089 ; CHECK: vmov.32 [[REG1:d[0-9]+]][0], r0
1090 ; CHECK: vmov.32 [[REG2]][1], r3
1091 ; CHECK: vmov.32 [[REG1]][1], r1
1092 %1 = fadd fp128 %p, %p
1093 %2 = bitcast fp128 %1 to <16 x i8>
1094 %3 = add <16 x i8> %2, %2
1101 ; CHECK-LABEL: test_v16i8_v2f64:
1102 define <16 x i8> @test_v16i8_v2f64(<2 x double> %p) {
1103 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1104 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1105 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG1]]
1106 ; SOFT: vadd.f64 d{{[0-9]+}}, [[REG2]]
1107 ; HARD: vadd.f64 d{{[0-9]+}}, d1
1108 ; HARD: vadd.f64 d{{[0-9]+}}, d0
1109 %1 = fadd <2 x double> %p, %p
1110 %2 = bitcast <2 x double> %1 to <16 x i8>
1111 %3 = add <16 x i8> %2, %2
1118 ; CHECK-LABEL: test_v16i8_v2i64:
1119 define <16 x i8> @test_v16i8_v2i64(<2 x i64> %p) {
1120 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1121 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1122 ; HARD: vadd.i64 q{{[0-9]+}}, q0
1123 %1 = add <2 x i64> %p, %p
1124 %2 = bitcast <2 x i64> %1 to <16 x i8>
1125 %3 = add <16 x i8> %2, %2
1132 ; CHECK-LABEL: test_v16i8_v4f32:
1133 define <16 x i8> @test_v16i8_v4f32(<4 x float> %p) {
1134 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1135 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1136 ; HARD: vrev64.32 q{{[0-9]+}}, q0
1137 %1 = fadd <4 x float> %p, %p
1138 %2 = bitcast <4 x float> %1 to <16 x i8>
1139 %3 = add <16 x i8> %2, %2
1146 ; CHECK-LABEL: test_v16i8_v4i32:
1147 define <16 x i8> @test_v16i8_v4i32(<4 x i32> %p) {
1148 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1149 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1150 ; HARD: vrev64.32 q{{[0-9]+}}, q0
1151 %1 = add <4 x i32> %p, %p
1152 %2 = bitcast <4 x i32> %1 to <16 x i8>
1153 %3 = add <16 x i8> %2, %2
1160 ; CHECK-LABEL: test_v16i8_v8i16:
1161 define <16 x i8> @test_v16i8_v8i16(<8 x i16> %p) {
1162 ; SOFT: vmov [[REG1:d[0-9]+]], r3, r2
1163 ; SOFT: vmov [[REG2:d[0-9]+]], r1, r0
1164 ; HARD: vrev64.16 q{{[0-9]+}}, q0
1165 %1 = add <8 x i16> %p, %p
1166 %2 = bitcast <8 x i16> %1 to <16 x i8>
1167 %3 = add <16 x i8> %2, %2