Skip to content

Commit 50c66e5

Browse files
committed
[AArch64] Add tests for concat(extract-high, extract-high). NFC
1 parent f8ce2e4 commit 50c66e5

File tree

1 file changed

+207
-0
lines changed

1 file changed

+207
-0
lines changed

llvm/test/CodeGen/AArch64/concat-vector.ll

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,3 +334,210 @@ define <4 x i16> @concat_undef_first_use_undef(ptr %p1, ptr %p2) {
334334
%t = shufflevector <8 x i16> %ext1, <8 x i16> %ext2, <4 x i32> <i32 poison, i32 poison, i32 2, i32 3>
335335
ret <4 x i16> %t
336336
}
337+
338+
define <8 x i16> @concat_low_low_v8i16(<8 x i16> %a_vec, <8 x i16> %b_vec) {
339+
; CHECK-LABEL: concat_low_low_v8i16:
340+
; CHECK: // %bb.0: // %entry
341+
; CHECK-NEXT: mov v0.d[1], v1.d[0]
342+
; CHECK-NEXT: ret
343+
entry:
344+
%shuffle.i3 = shufflevector <8 x i16> %a_vec, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
345+
%shuffle.i = shufflevector <8 x i16> %b_vec, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
346+
%shuffle.i4 = shufflevector <4 x i16> %shuffle.i3, <4 x i16> %shuffle.i, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
347+
ret <8 x i16> %shuffle.i4
348+
}
349+
350+
define <8 x i16> @concat_high_low_v8i16(<8 x i16> %a_vec, <8 x i16> %b_vec) {
351+
; CHECK-SD-LABEL: concat_high_low_v8i16:
352+
; CHECK-SD: // %bb.0: // %entry
353+
; CHECK-SD-NEXT: ext v0.16b, v0.16b, v1.16b, #8
354+
; CHECK-SD-NEXT: ret
355+
;
356+
; CHECK-GI-LABEL: concat_high_low_v8i16:
357+
; CHECK-GI: // %bb.0: // %entry
358+
; CHECK-GI-NEXT: mov d0, v0.d[1]
359+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
360+
; CHECK-GI-NEXT: ret
361+
entry:
362+
%shuffle.i3 = shufflevector <8 x i16> %a_vec, <8 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
363+
%shuffle.i = shufflevector <8 x i16> %b_vec, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
364+
%shuffle.i4 = shufflevector <4 x i16> %shuffle.i3, <4 x i16> %shuffle.i, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
365+
ret <8 x i16> %shuffle.i4
366+
}
367+
368+
define <8 x i16> @concat_low_high_v8i16(<8 x i16> %a_vec, <8 x i16> %b_vec) {
369+
; CHECK-SD-LABEL: concat_low_high_v8i16:
370+
; CHECK-SD: // %bb.0: // %entry
371+
; CHECK-SD-NEXT: ext v1.16b, v1.16b, v1.16b, #8
372+
; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
373+
; CHECK-SD-NEXT: ret
374+
;
375+
; CHECK-GI-LABEL: concat_low_high_v8i16:
376+
; CHECK-GI: // %bb.0: // %entry
377+
; CHECK-GI-NEXT: mov d1, v1.d[1]
378+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
379+
; CHECK-GI-NEXT: ret
380+
entry:
381+
%shuffle.i3 = shufflevector <8 x i16> %a_vec, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
382+
%shuffle.i = shufflevector <8 x i16> %b_vec, <8 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
383+
%shuffle.i4 = shufflevector <4 x i16> %shuffle.i3, <4 x i16> %shuffle.i, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
384+
ret <8 x i16> %shuffle.i4
385+
}
386+
387+
define <8 x i16> @concat_high_high_v8i16(<8 x i16> %a_vec, <8 x i16> %b_vec) {
388+
; CHECK-SD-LABEL: concat_high_high_v8i16:
389+
; CHECK-SD: // %bb.0: // %entry
390+
; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
391+
; CHECK-SD-NEXT: ext v1.16b, v1.16b, v1.16b, #8
392+
; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
393+
; CHECK-SD-NEXT: ret
394+
;
395+
; CHECK-GI-LABEL: concat_high_high_v8i16:
396+
; CHECK-GI: // %bb.0: // %entry
397+
; CHECK-GI-NEXT: mov d0, v0.d[1]
398+
; CHECK-GI-NEXT: mov d1, v1.d[1]
399+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
400+
; CHECK-GI-NEXT: ret
401+
entry:
402+
%shuffle.i3 = shufflevector <8 x i16> %a_vec, <8 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
403+
%shuffle.i = shufflevector <8 x i16> %b_vec, <8 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
404+
%shuffle.i4 = shufflevector <4 x i16> %shuffle.i3, <4 x i16> %shuffle.i, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
405+
ret <8 x i16> %shuffle.i4
406+
}
407+
408+
define <8 x half> @concat_high_high_v8f16(<8 x half> %a_vec, <8 x half> %b_vec) {
409+
; CHECK-SD-LABEL: concat_high_high_v8f16:
410+
; CHECK-SD: // %bb.0: // %entry
411+
; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
412+
; CHECK-SD-NEXT: ext v1.16b, v1.16b, v1.16b, #8
413+
; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
414+
; CHECK-SD-NEXT: ret
415+
;
416+
; CHECK-GI-LABEL: concat_high_high_v8f16:
417+
; CHECK-GI: // %bb.0: // %entry
418+
; CHECK-GI-NEXT: mov d0, v0.d[1]
419+
; CHECK-GI-NEXT: mov d1, v1.d[1]
420+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
421+
; CHECK-GI-NEXT: ret
422+
entry:
423+
%shuffle.i3 = shufflevector <8 x half> %a_vec, <8 x half> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
424+
%shuffle.i = shufflevector <8 x half> %b_vec, <8 x half> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
425+
%shuffle.i4 = shufflevector <4 x half> %shuffle.i3, <4 x half> %shuffle.i, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
426+
ret <8 x half> %shuffle.i4
427+
}
428+
429+
define <8 x bfloat> @concat_high_high_v8bf16(<8 x bfloat> %a_vec, <8 x bfloat> %b_vec) {
430+
; CHECK-SD-LABEL: concat_high_high_v8bf16:
431+
; CHECK-SD: // %bb.0: // %entry
432+
; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
433+
; CHECK-SD-NEXT: ext v1.16b, v1.16b, v1.16b, #8
434+
; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
435+
; CHECK-SD-NEXT: ret
436+
;
437+
; CHECK-GI-LABEL: concat_high_high_v8bf16:
438+
; CHECK-GI: // %bb.0: // %entry
439+
; CHECK-GI-NEXT: mov d0, v0.d[1]
440+
; CHECK-GI-NEXT: mov d1, v1.d[1]
441+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
442+
; CHECK-GI-NEXT: ret
443+
entry:
444+
%shuffle.i3 = shufflevector <8 x bfloat> %a_vec, <8 x bfloat> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
445+
%shuffle.i = shufflevector <8 x bfloat> %b_vec, <8 x bfloat> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
446+
%shuffle.i4 = shufflevector <4 x bfloat> %shuffle.i3, <4 x bfloat> %shuffle.i, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
447+
ret <8 x bfloat> %shuffle.i4
448+
}
449+
450+
define <4 x i32> @concat_high_high_v4i32(<4 x i32> %a_vec, <4 x i32> %b_vec) {
451+
; CHECK-SD-LABEL: concat_high_high_v4i32:
452+
; CHECK-SD: // %bb.0: // %entry
453+
; CHECK-SD-NEXT: zip2 v0.2d, v0.2d, v1.2d
454+
; CHECK-SD-NEXT: ret
455+
;
456+
; CHECK-GI-LABEL: concat_high_high_v4i32:
457+
; CHECK-GI: // %bb.0: // %entry
458+
; CHECK-GI-NEXT: mov d0, v0.d[1]
459+
; CHECK-GI-NEXT: mov d1, v1.d[1]
460+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
461+
; CHECK-GI-NEXT: ret
462+
entry:
463+
%shuffle.i3 = shufflevector <4 x i32> %a_vec, <4 x i32> poison, <2 x i32> <i32 2, i32 3>
464+
%shuffle.i = shufflevector <4 x i32> %b_vec, <4 x i32> poison, <2 x i32> <i32 2, i32 3>
465+
%shuffle.i4 = shufflevector <2 x i32> %shuffle.i3, <2 x i32> %shuffle.i, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
466+
ret <4 x i32> %shuffle.i4
467+
}
468+
469+
define <4 x float> @concat_high_high_v4f32(<4 x float> %a_vec, <4 x float> %b_vec) {
470+
; CHECK-SD-LABEL: concat_high_high_v4f32:
471+
; CHECK-SD: // %bb.0: // %entry
472+
; CHECK-SD-NEXT: zip2 v0.2d, v0.2d, v1.2d
473+
; CHECK-SD-NEXT: ret
474+
;
475+
; CHECK-GI-LABEL: concat_high_high_v4f32:
476+
; CHECK-GI: // %bb.0: // %entry
477+
; CHECK-GI-NEXT: mov d0, v0.d[1]
478+
; CHECK-GI-NEXT: mov d1, v1.d[1]
479+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
480+
; CHECK-GI-NEXT: ret
481+
entry:
482+
%shuffle.i3 = shufflevector <4 x float> %a_vec, <4 x float> poison, <2 x i32> <i32 2, i32 3>
483+
%shuffle.i = shufflevector <4 x float> %b_vec, <4 x float> poison, <2 x i32> <i32 2, i32 3>
484+
%shuffle.i4 = shufflevector <2 x float> %shuffle.i3, <2 x float> %shuffle.i, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
485+
ret <4 x float> %shuffle.i4
486+
}
487+
488+
define <16 x i8> @concat_high_high_v16i8(<16 x i8> %a_vec, <16 x i8> %b_vec) {
489+
; CHECK-SD-LABEL: concat_high_high_v16i8:
490+
; CHECK-SD: // %bb.0: // %entry
491+
; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
492+
; CHECK-SD-NEXT: ext v1.16b, v1.16b, v1.16b, #8
493+
; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
494+
; CHECK-SD-NEXT: ret
495+
;
496+
; CHECK-GI-LABEL: concat_high_high_v16i8:
497+
; CHECK-GI: // %bb.0: // %entry
498+
; CHECK-GI-NEXT: mov d0, v0.d[1]
499+
; CHECK-GI-NEXT: mov d1, v1.d[1]
500+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
501+
; CHECK-GI-NEXT: ret
502+
entry:
503+
%shuffle.i3 = shufflevector <16 x i8> %a_vec, <16 x i8> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
504+
%shuffle.i = shufflevector <16 x i8> %b_vec, <16 x i8> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
505+
%shuffle.i4 = shufflevector <8 x i8> %shuffle.i3, <8 x i8> %shuffle.i, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
506+
ret <16 x i8> %shuffle.i4
507+
}
508+
509+
define <2 x i64> @concat_high_high_v2i64(<2 x i64> %a_vec, <2 x i64> %b_vec) {
510+
; CHECK-SD-LABEL: concat_high_high_v2i64:
511+
; CHECK-SD: // %bb.0: // %entry
512+
; CHECK-SD-NEXT: zip2 v0.2d, v0.2d, v1.2d
513+
; CHECK-SD-NEXT: ret
514+
;
515+
; CHECK-GI-LABEL: concat_high_high_v2i64:
516+
; CHECK-GI: // %bb.0: // %entry
517+
; CHECK-GI-NEXT: mov v0.d[0], v0.d[1]
518+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[1]
519+
; CHECK-GI-NEXT: ret
520+
entry:
521+
%shuffle.i3 = shufflevector <2 x i64> %a_vec, <2 x i64> poison, <1 x i32> <i32 1>
522+
%shuffle.i = shufflevector <2 x i64> %b_vec, <2 x i64> poison, <1 x i32> <i32 1>
523+
%shuffle.i4 = shufflevector <1 x i64> %shuffle.i3, <1 x i64> %shuffle.i, <2 x i32> <i32 0, i32 1>
524+
ret <2 x i64> %shuffle.i4
525+
}
526+
527+
define <2 x double> @concat_high_high_v2f64(<2 x double> %a_vec, <2 x double> %b_vec) {
528+
; CHECK-SD-LABEL: concat_high_high_v2f64:
529+
; CHECK-SD: // %bb.0: // %entry
530+
; CHECK-SD-NEXT: zip2 v0.2d, v0.2d, v1.2d
531+
; CHECK-SD-NEXT: ret
532+
;
533+
; CHECK-GI-LABEL: concat_high_high_v2f64:
534+
; CHECK-GI: // %bb.0: // %entry
535+
; CHECK-GI-NEXT: mov v0.d[0], v0.d[1]
536+
; CHECK-GI-NEXT: mov v0.d[1], v1.d[1]
537+
; CHECK-GI-NEXT: ret
538+
entry:
539+
%shuffle.i3 = shufflevector <2 x double> %a_vec, <2 x double> poison, <1 x i32> <i32 1>
540+
%shuffle.i = shufflevector <2 x double> %b_vec, <2 x double> poison, <1 x i32> <i32 1>
541+
%shuffle.i4 = shufflevector <1 x double> %shuffle.i3, <1 x double> %shuffle.i, <2 x i32> <i32 0, i32 1>
542+
ret <2 x double> %shuffle.i4
543+
}

0 commit comments

Comments
 (0)