@@ -476,6 +476,233 @@ uint32x4x2_t test_vtrnq_u32(uint32x4_t a, uint32x4_t b) {
476476 // LLVM: ret %struct.uint32x4x2_t {{.*}}
477477}
478478
479+ uint8x8x2_t test_vuzp_u8 (uint8x8_t a , uint8x8_t b ) {
480+ return vuzp_u8 (a , b );
481+
482+ // CIR-LABEL:vuzp_u8
483+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!u8i x 8>>
484+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
485+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u8i x 8>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!u8i x 8>>
486+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!u8i x 8>)
487+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i,
488+ // CIR-SAME: #cir.int<8> : !s32i, #cir.int<10> : !s32i, #cir.int<12> : !s32i,
489+ // CIR-SAME: #cir.int<14> : !s32i] : !cir.vector<!u8i x 8>
490+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!u8i x 8>, !cir.ptr<!cir.vector<!u8i x 8>>
491+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
492+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u8i x 8>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!u8i x 8>>
493+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!u8i x 8>)
494+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i,
495+ // CIR-SAME: #cir.int<9> : !s32i, #cir.int<11> : !s32i, #cir.int<13> : !s32i, #cir.int<15> : !s32i] :
496+ // CIR-SAME: !cir.vector<!u8i x 8>
497+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!u8i x 8>, !cir.ptr<!cir.vector<!u8i x 8>>
498+
499+ // LLVM: {{.*}}test_vuzp_u8(<8 x i8>{{.*}}[[A:%.*]], <8 x i8>{{.*}}[[B:%.*]])
500+ // LLVM: [[VTRN:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[B]],
501+ // LLVM-SAME: <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
502+ // LLVM: store <8 x i8> [[VTRN]], ptr [[RES:%.*]], align 8
503+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<8 x i8>, ptr [[RES]], i64 1
504+ // LLVM: [[VTRN1:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[B]], <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
505+ // LLVM: store <8 x i8> [[VTRN1]], ptr [[RES1]], align 8
506+ // LLVM-NEXT: [[RET:%.*]] = load %struct.uint8x8x2_t, ptr {{.*}}
507+ // LLVM-NEXT: ret %struct.uint8x8x2_t [[RET]]
508+ }
509+
510+ uint16x4x2_t test_vuzp_u16 (uint16x4_t a , uint16x4_t b ) {
511+ return vuzp_u16 (a , b );
512+
513+ // CIR-LABEL: vuzp_u16
514+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!u16i x 4>>
515+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
516+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u16i x 4>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!u16i x 4>>
517+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!u16i x 4>)
518+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i] : !cir.vector<!u16i x 4>
519+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!u16i x 4>, !cir.ptr<!cir.vector<!u16i x 4>>
520+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
521+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u16i x 4>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!u16i x 4>>
522+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!u16i x 4>)
523+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i] :
524+ // CIR-SAME: !cir.vector<!u16i x 4>
525+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!u16i x 4>, !cir.ptr<!cir.vector<!u16i x 4>>
526+
527+ // LLVM: {{.*}}test_vuzp_u16(<4 x i16>{{.*}}[[A:%.*]], <4 x i16>{{.*}}[[B:%.*]])
528+ // LLVM: [[vuzp:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[B]],
529+ // LLVM-SAME: <4 x i32> <i32 0, i32 2, i32 4, i32 6>
530+ // LLVM: store <4 x i16> [[vuzp]], ptr [[RES:%.*]], align 8
531+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<4 x i16>, ptr [[RES]], i64 1
532+ // LLVM: [[vuzp1:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[B]],
533+ // LLVM-SAME: <4 x i32> <i32 1, i32 3, i32 5, i32 7>
534+ // LLVM: store <4 x i16> [[vuzp1]], ptr [[RES1]], align 8
535+ // LLVM-NEXT: [[RET:%.*]] = load %struct.uint16x4x2_t, ptr {{.*}}
536+ // LLVM-NEXT: ret %struct.uint16x4x2_t [[RET]]
537+ }
538+
539+ int32x2x2_t test_vuzp_s32 (int32x2_t a , int32x2_t b ) {
540+ return vuzp_s32 (a , b );
541+
542+ // CIR-LABEL: vuzp_s32
543+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!s32i x 2>>
544+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
545+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!s32i x 2>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!s32i x 2>>
546+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!s32i x 2>)
547+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i] : !cir.vector<!s32i x 2>
548+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!s32i x 2>, !cir.ptr<!cir.vector<!s32i x 2>>
549+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
550+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!s32i x 2>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!s32i x 2>>
551+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!s32i x 2>)
552+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i] :
553+ // CIR-SAME: !cir.vector<!s32i x 2>
554+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!s32i x 2>, !cir.ptr<!cir.vector<!s32i x 2>>
555+
556+ // LLVM: {{.*}}test_vuzp_s32(<2 x i32>{{.*}}[[A:%.*]], <2 x i32>{{.*}}[[B:%.*]])
557+ // LLVM: [[vuzp:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[B]],
558+ // LLVM-SAME: <2 x i32> <i32 0, i32 2>
559+ // LLVM: store <2 x i32> [[vuzp]], ptr [[RES:%.*]], align 8
560+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<2 x i32>, ptr [[RES]], i64 1
561+ // LLVM: [[vuzp1:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[B]],
562+ // LLVM-SAME: <2 x i32> <i32 1, i32 3>
563+ // LLVM: store <2 x i32> [[vuzp1]], ptr [[RES1]], align 8
564+ // LLVM-NEXT: [[RET:%.*]] = load %struct.int32x2x2_t, ptr {{.*}}
565+ // LLVM-NEXT: ret %struct.int32x2x2_t [[RET]]
566+ }
567+
568+ float32x2x2_t test_vuzp_f32 (float32x2_t a , float32x2_t b ) {
569+ return vuzp_f32 (a , b );
570+
571+ // CIR-LABEL: vuzp_f32
572+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!cir.float x 2>>
573+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
574+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!cir.float x 2>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!cir.float x 2>>
575+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!cir.float x 2>)
576+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i] : !cir.vector<!cir.float x 2>
577+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!cir.float x 2>, !cir.ptr<!cir.vector<!cir.float x 2>>
578+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
579+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!cir.float x 2>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!cir.float x 2>>
580+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!cir.float x 2>)
581+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i] :
582+ // CIR-SAME: !cir.vector<!cir.float x 2>
583+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!cir.float x 2>, !cir.ptr<!cir.vector<!cir.float x 2>>
584+
585+ // LLVM: {{.*}}test_vuzp_f32(<2 x float>{{.*}}[[A:%.*]], <2 x float>{{.*}}[[B:%.*]])
586+ // LLVM: [[vuzp:%.*]] = shufflevector <2 x float> [[A]], <2 x float> [[B]],
587+ // LLVM-SAME: <2 x i32> <i32 0, i32 2>
588+ // LLVM: store <2 x float> [[vuzp]], ptr [[RES:%.*]], align 8
589+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<2 x float>, ptr [[RES]], i64 1
590+ // LLVM: [[vuzp1:%.*]] = shufflevector <2 x float> [[A]], <2 x float> [[B]],
591+ // LLVM-SAME: <2 x i32> <i32 1, i32 3>
592+ // LLVM: store <2 x float> [[vuzp1]], ptr [[RES1]], align 8
593+ // LLVM-NEXT: [[RET:%.*]] = load %struct.float32x2x2_t, ptr {{.*}}
594+ // LLVM-NEXT: ret %struct.float32x2x2_t [[RET]]
595+ }
596+
597+ uint8x16x2_t test_vuzpq_u8 (uint8x16_t a , uint8x16_t b ) {
598+ return vuzpq_u8 (a , b );
599+
600+ // CIR-LABEL: vuzpq_u8
601+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!u8i x 16>>
602+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
603+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u8i x 16>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!u8i x 16>>
604+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!u8i x 16>)
605+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i,
606+ // CIR-SAME: #cir.int<8> : !s32i, #cir.int<10> : !s32i, #cir.int<12> : !s32i, #cir.int<14> : !s32i,
607+ // CIR-SAME: #cir.int<16> : !s32i, #cir.int<18> : !s32i, #cir.int<20> : !s32i, #cir.int<22> : !s32i,
608+ // CIR-SAME: #cir.int<24> : !s32i, #cir.int<26> : !s32i, #cir.int<28> : !s32i, #cir.int<30> : !s32i] : !cir.vector<!u8i x 16>
609+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!u8i x 16>, !cir.ptr<!cir.vector<!u8i x 16>>
610+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
611+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u8i x 16>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!u8i x 16>>
612+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!u8i x 16>)
613+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i,
614+ // CIR-SAME: #cir.int<9> : !s32i, #cir.int<11> : !s32i, #cir.int<13> : !s32i, #cir.int<15> : !s32i,
615+ // CIR-SAME: #cir.int<17> : !s32i, #cir.int<19> : !s32i, #cir.int<21> : !s32i, #cir.int<23> : !s32i,
616+ // CIR-SAME: #cir.int<25> : !s32i, #cir.int<27> : !s32i, #cir.int<29> : !s32i, #cir.int<31> : !s32i] : !cir.vector<!u8i x 16>
617+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!u8i x 16>, !cir.ptr<!cir.vector<!u8i x 16>>
618+
619+ // LLVM: {{.*}}test_vuzpq_u8(<16 x i8>{{.*}}[[A:%.*]], <16 x i8>{{.*}}[[B:%.*]])
620+ // LLVM: [[vuzp:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[B]],
621+ // LLVM-SAME: <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14,
622+ // LLVM-SAME: i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
623+ // LLVM: store <16 x i8> [[vuzp]], ptr [[RES:%.*]], align 16
624+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<16 x i8>, ptr [[RES]], i64 1
625+ // LLVM: [[vuzp1:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[B]],
626+ // LLVM-SAME: <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15,
627+ // LLVM-SAME: i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
628+ // LLVM: store <16 x i8> [[vuzp1]], ptr [[RES1]], align 16
629+ // LLVM-NEXT: [[RET:%.*]] = load %struct.uint8x16x2_t, ptr {{.*}}
630+ // LLVM-NEXT: ret %struct.uint8x16x2_t [[RET]]
631+ }
632+
633+ int16x8x2_t test_vuzpq_s16 (int16x8_t a , int16x8_t b ) {
634+ return vuzpq_s16 (a , b );
635+
636+ // CIR-LABEL: vuzpq_s16
637+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!s16i x 8>>
638+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
639+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!s16i x 8>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!s16i x 8>>
640+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!s16i x 8>)
641+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i,
642+ // CIR-SAME: #cir.int<8> : !s32i, #cir.int<10> : !s32i, #cir.int<12> : !s32i,
643+ // CIR-SAME: #cir.int<14> : !s32i] : !cir.vector<!s16i x 8>
644+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!s16i x 8>, !cir.ptr<!cir.vector<!s16i x 8>>
645+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
646+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!s16i x 8>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!s16i x 8>>
647+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!s16i x 8>)
648+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i,
649+ // CIR-SAME: #cir.int<9> : !s32i, #cir.int<11> : !s32i, #cir.int<13> : !s32i,
650+ // CIR-SAME: #cir.int<15> : !s32i] : !cir.vector<!s16i x 8>
651+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!s16i x 8>, !cir.ptr<!cir.vector<!s16i x 8>>
652+
653+ // LLVM: {{.*}}test_vuzpq_s16(<8 x i16>{{.*}}[[A:%.*]], <8 x i16>{{.*}}[[B:%.*]])
654+ // LLVM: [[vuzp:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[B]],
655+ // LLVM-SAME: <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
656+ // LLVM: store <8 x i16> [[vuzp]], ptr [[RES:%.*]], align 16
657+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<8 x i16>, ptr [[RES]], i64 1
658+ // LLVM: [[vuzp1:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[B]], <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
659+ // LLVM: store <8 x i16> [[vuzp1]], ptr [[RES1]], align 16
660+ // LLVM: [[RET:%.*]] = load %struct.int16x8x2_t, ptr {{.*}}
661+ // LLVM-NEXT: ret %struct.int16x8x2_t [[RET]]
662+ }
663+
664+ uint32x4x2_t test_vuzpq_u32 (uint32x4_t a , uint32x4_t b ) {
665+ return vuzpq_u32 (a , b );
666+
667+ // CIR-LABEL: vuzpq_u32
668+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!u32i x 4>>
669+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
670+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u32i x 4>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!u32i x 4>>
671+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!u32i x 4>)
672+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i] :
673+ // CIR-SAME: !cir.vector<!u32i x 4>
674+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!u32i x 4>, !cir.ptr<!cir.vector<!u32i x 4>>
675+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
676+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u32i x 4>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!u32i x 4>>
677+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!u32i x 4>)
678+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i] :
679+ // CIR-SAME: !cir.vector<!u32i x 4>
680+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!u32i x 4>, !cir.ptr<!cir.vector<!u32i x 4>>
681+ // LLVM: [[RET:%.*]] = load %struct.uint32x4x2_t, ptr {{.*}}
682+ // LLVM-NEXT: ret %struct.uint32x4x2_t [[RET]]
683+ }
684+
685+ float32x4x2_t test_vuzpq_f32 (float32x4_t a , float32x4_t b ) {
686+ return vuzpq_f32 (a , b );
687+
688+ // CIR-LABEL: vuzpq_f32
689+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!cir.float x 4>>
690+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
691+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!cir.float x 4>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!cir.float x 4>>
692+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!cir.float x 4>)
693+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<6> : !s32i] :
694+ // CIR-SAME: !cir.vector<!cir.float x 4>
695+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!cir.float x 4>, !cir.ptr<!cir.vector<!cir.float x 4>>
696+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
697+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!cir.float x 4>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!cir.float x 4>>
698+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!cir.float x 4>)
699+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i, #cir.int<5> : !s32i, #cir.int<7> : !s32i] :
700+ // CIR-SAME: !cir.vector<!cir.float x 4>
701+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!cir.float x 4>, !cir.ptr<!cir.vector<!cir.float x 4>>
702+ // LLVM: [[RET:%.*]] = load %struct.float32x4x2_t, ptr {{.*}}
703+ // LLVM-NEXT: ret %struct.float32x4x2_t [[RET]]
704+ }
705+
479706uint8x8_t test_vqmovun_s16 (int16x8_t a ) {
480707 return vqmovun_s16 (a );
481708
0 commit comments