@@ -704,6 +704,233 @@ float32x4x2_t test_vuzpq_f32(float32x4_t a, float32x4_t b) {
704704 // LLVM-NEXT: ret %struct.float32x4x2_t [[RET]]
705705}
706706
707+ uint8x8x2_t test_vzip_u8 (uint8x8_t a , uint8x8_t b ) {
708+ return vzip_u8 (a , b );
709+
710+ // CIR-LABEL:vzip_u8
711+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!u8i x 8>>
712+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
713+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u8i x 8>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!u8i x 8>>
714+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!u8i x 8>)
715+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<8> : !s32i, #cir.int<1> : !s32i, #cir.int<9> : !s32i,
716+ // CIR-SAME: #cir.int<2> : !s32i, #cir.int<10> : !s32i, #cir.int<3> : !s32i,
717+ // CIR-SAME: #cir.int<11> : !s32i] : !cir.vector<!u8i x 8>
718+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!u8i x 8>, !cir.ptr<!cir.vector<!u8i x 8>>
719+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
720+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u8i x 8>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!u8i x 8>>
721+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!u8i x 8>)
722+ // CIR-SAME: [#cir.int<4> : !s32i, #cir.int<12> : !s32i, #cir.int<5> : !s32i, #cir.int<13> : !s32i,
723+ // CIR-SAME: #cir.int<6> : !s32i, #cir.int<14> : !s32i, #cir.int<7> : !s32i,
724+ // CIR-SAME: #cir.int<15> : !s32i] : !cir.vector<!u8i x 8>
725+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!u8i x 8>, !cir.ptr<!cir.vector<!u8i x 8>>
726+
727+ // LLVM: {{.*}}test_vzip_u8(<8 x i8>{{.*}}[[A:%.*]], <8 x i8>{{.*}}[[B:%.*]])
728+ // LLVM: [[VTRN:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[B]],
729+ // LLVM-SAME: <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
730+ // LLVM: store <8 x i8> [[VTRN]], ptr [[RES:%.*]], align 8
731+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<8 x i8>, ptr [[RES]], i64 1
732+ // LLVM: [[VTRN1:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> [[B]], <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
733+ // LLVM: store <8 x i8> [[VTRN1]], ptr [[RES1]], align 8
734+ // LLVM-NEXT: [[RET:%.*]] = load %struct.uint8x8x2_t, ptr {{.*}}
735+ // LLVM-NEXT: ret %struct.uint8x8x2_t [[RET]]
736+ }
737+
738+ uint16x4x2_t test_vzip_u16 (uint16x4_t a , uint16x4_t b ) {
739+ return vzip_u16 (a , b );
740+
741+ // CIR-LABEL: vzip_u16
742+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!u16i x 4>>
743+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
744+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u16i x 4>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!u16i x 4>>
745+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!u16i x 4>)
746+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<4> : !s32i, #cir.int<1> : !s32i, #cir.int<5> : !s32i] : !cir.vector<!u16i x 4>
747+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!u16i x 4>, !cir.ptr<!cir.vector<!u16i x 4>>
748+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
749+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u16i x 4>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!u16i x 4>>
750+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!u16i x 4>)
751+ // CIR-SAME: [#cir.int<2> : !s32i, #cir.int<6> : !s32i, #cir.int<3> : !s32i, #cir.int<7> : !s32i] :
752+ // CIR-SAME: !cir.vector<!u16i x 4>
753+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!u16i x 4>, !cir.ptr<!cir.vector<!u16i x 4>>
754+
755+ // LLVM: {{.*}}test_vzip_u16(<4 x i16>{{.*}}[[A:%.*]], <4 x i16>{{.*}}[[B:%.*]])
756+ // LLVM: [[vzip:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[B]],
757+ // LLVM-SAME: <4 x i32> <i32 0, i32 4, i32 1, i32 5>
758+ // LLVM: store <4 x i16> [[vzip]], ptr [[RES:%.*]], align 8
759+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<4 x i16>, ptr [[RES]], i64 1
760+ // LLVM: [[vzip1:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> [[B]],
761+ // LLVM-SAME: <4 x i32> <i32 2, i32 6, i32 3, i32 7>
762+ // LLVM: store <4 x i16> [[vzip1]], ptr [[RES1]], align 8
763+ // LLVM-NEXT: [[RET:%.*]] = load %struct.uint16x4x2_t, ptr {{.*}}
764+ // LLVM-NEXT: ret %struct.uint16x4x2_t [[RET]]
765+ }
766+
767+ int32x2x2_t test_vzip_s32 (int32x2_t a , int32x2_t b ) {
768+ return vzip_s32 (a , b );
769+
770+ // CIR-LABEL: vzip_s32
771+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!s32i x 2>>
772+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
773+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!s32i x 2>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!s32i x 2>>
774+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!s32i x 2>)
775+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i] : !cir.vector<!s32i x 2>
776+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!s32i x 2>, !cir.ptr<!cir.vector<!s32i x 2>>
777+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
778+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!s32i x 2>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!s32i x 2>>
779+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!s32i x 2>)
780+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i] :
781+ // CIR-SAME: !cir.vector<!s32i x 2>
782+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!s32i x 2>, !cir.ptr<!cir.vector<!s32i x 2>>
783+
784+ // LLVM: {{.*}}test_vzip_s32(<2 x i32>{{.*}}[[A:%.*]], <2 x i32>{{.*}}[[B:%.*]])
785+ // LLVM: [[vzip:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[B]],
786+ // LLVM-SAME: <2 x i32> <i32 0, i32 2>
787+ // LLVM: store <2 x i32> [[vzip]], ptr [[RES:%.*]], align 8
788+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<2 x i32>, ptr [[RES]], i64 1
789+ // LLVM: [[vzip1:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> [[B]],
790+ // LLVM-SAME: <2 x i32> <i32 1, i32 3>
791+ // LLVM: store <2 x i32> [[vzip1]], ptr [[RES1]], align 8
792+ // LLVM-NEXT: [[RET:%.*]] = load %struct.int32x2x2_t, ptr {{.*}}
793+ // LLVM-NEXT: ret %struct.int32x2x2_t [[RET]]
794+ }
795+
796+ float32x2x2_t test_vzip_f32 (float32x2_t a , float32x2_t b ) {
797+ return vzip_f32 (a , b );
798+
799+ // CIR-LABEL: vzip_f32
800+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!cir.float x 2>>
801+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
802+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!cir.float x 2>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!cir.float x 2>>
803+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!cir.float x 2>)
804+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<2> : !s32i] : !cir.vector<!cir.float x 2>
805+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!cir.float x 2>, !cir.ptr<!cir.vector<!cir.float x 2>>
806+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
807+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!cir.float x 2>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!cir.float x 2>>
808+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!cir.float x 2>)
809+ // CIR-SAME: [#cir.int<1> : !s32i, #cir.int<3> : !s32i] :
810+ // CIR-SAME: !cir.vector<!cir.float x 2>
811+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!cir.float x 2>, !cir.ptr<!cir.vector<!cir.float x 2>>
812+
813+ // LLVM: {{.*}}test_vzip_f32(<2 x float>{{.*}}[[A:%.*]], <2 x float>{{.*}}[[B:%.*]])
814+ // LLVM: [[vzip:%.*]] = shufflevector <2 x float> [[A]], <2 x float> [[B]],
815+ // LLVM-SAME: <2 x i32> <i32 0, i32 2>
816+ // LLVM: store <2 x float> [[vzip]], ptr [[RES:%.*]], align 8
817+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<2 x float>, ptr [[RES]], i64 1
818+ // LLVM: [[vzip1:%.*]] = shufflevector <2 x float> [[A]], <2 x float> [[B]],
819+ // LLVM-SAME: <2 x i32> <i32 1, i32 3>
820+ // LLVM: store <2 x float> [[vzip1]], ptr [[RES1]], align 8
821+ // LLVM-NEXT: [[RET:%.*]] = load %struct.float32x2x2_t, ptr {{.*}}
822+ // LLVM-NEXT: ret %struct.float32x2x2_t [[RET]]
823+ }
824+
825+ uint8x16x2_t test_vzipq_u8 (uint8x16_t a , uint8x16_t b ) {
826+ return vzipq_u8 (a , b );
827+
828+ // CIR-LABEL: vzipq_u8
829+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!u8i x 16>>
830+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
831+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u8i x 16>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!u8i x 16>>
832+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!u8i x 16>)
833+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<16> : !s32i, #cir.int<1> : !s32i, #cir.int<17> : !s32i,
834+ // CIR-SAME: #cir.int<2> : !s32i, #cir.int<18> : !s32i, #cir.int<3> : !s32i, #cir.int<19> : !s32i,
835+ // CIR-SAME: #cir.int<4> : !s32i, #cir.int<20> : !s32i, #cir.int<5> : !s32i, #cir.int<21> : !s32i,
836+ // CIR-SAME: #cir.int<6> : !s32i, #cir.int<22> : !s32i, #cir.int<7> : !s32i, #cir.int<23> : !s32i] : !cir.vector<!u8i x 16>
837+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!u8i x 16>, !cir.ptr<!cir.vector<!u8i x 16>>
838+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
839+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u8i x 16>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!u8i x 16>>
840+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!u8i x 16>)
841+ // CIR-SAME: [#cir.int<8> : !s32i, #cir.int<24> : !s32i, #cir.int<9> : !s32i, #cir.int<25> : !s32i,
842+ // CIR-SAME: #cir.int<10> : !s32i, #cir.int<26> : !s32i, #cir.int<11> : !s32i, #cir.int<27> : !s32i,
843+ // CIR-SAME: #cir.int<12> : !s32i, #cir.int<28> : !s32i, #cir.int<13> : !s32i, #cir.int<29> : !s32i,
844+ // CIR-SAME: #cir.int<14> : !s32i, #cir.int<30> : !s32i, #cir.int<15> : !s32i, #cir.int<31> : !s32i] : !cir.vector<!u8i x 16>
845+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!u8i x 16>, !cir.ptr<!cir.vector<!u8i x 16>>
846+
847+ // LLVM: {{.*}}test_vzipq_u8(<16 x i8>{{.*}}[[A:%.*]], <16 x i8>{{.*}}[[B:%.*]])
848+ // LLVM: [[vzip:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[B]],
849+ // LLVM-SAME: <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19,
850+ // LLVM-SAME: i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
851+ // LLVM: store <16 x i8> [[vzip]], ptr [[RES:%.*]], align 16
852+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<16 x i8>, ptr [[RES]], i64 1
853+ // LLVM: [[vzip1:%.*]] = shufflevector <16 x i8> [[A]], <16 x i8> [[B]],
854+ // LLVM-SAME: <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27,
855+ // LLVM-SAME: i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
856+ // LLVM: store <16 x i8> [[vzip1]], ptr [[RES1]], align 16
857+ // LLVM-NEXT: [[RET:%.*]] = load %struct.uint8x16x2_t, ptr {{.*}}
858+ // LLVM-NEXT: ret %struct.uint8x16x2_t [[RET]]
859+ }
860+
861+ int16x8x2_t test_vzipq_s16 (int16x8_t a , int16x8_t b ) {
862+ return vzipq_s16 (a , b );
863+
864+ // CIR-LABEL: vzipq_s16
865+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!s16i x 8>>
866+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
867+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!s16i x 8>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!s16i x 8>>
868+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!s16i x 8>)
869+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<8> : !s32i, #cir.int<1> : !s32i, #cir.int<9> : !s32i,
870+ // CIR-SAME: #cir.int<2> : !s32i, #cir.int<10> : !s32i, #cir.int<3> : !s32i,
871+ // CIR-SAME: #cir.int<11> : !s32i] : !cir.vector<!s16i x 8>
872+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!s16i x 8>, !cir.ptr<!cir.vector<!s16i x 8>>
873+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
874+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!s16i x 8>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!s16i x 8>>
875+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!s16i x 8>)
876+ // CIR-SAME: [#cir.int<4> : !s32i, #cir.int<12> : !s32i, #cir.int<5> : !s32i, #cir.int<13> : !s32i,
877+ // CIR-SAME: #cir.int<6> : !s32i, #cir.int<14> : !s32i, #cir.int<7> : !s32i,
878+ // CIR-SAME: #cir.int<15> : !s32i] : !cir.vector<!s16i x 8>
879+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!s16i x 8>, !cir.ptr<!cir.vector<!s16i x 8>>
880+
881+ // LLVM: {{.*}}test_vzipq_s16(<8 x i16>{{.*}}[[A:%.*]], <8 x i16>{{.*}}[[B:%.*]])
882+ // LLVM: [[vzip:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[B]],
883+ // LLVM-SAME: <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
884+ // LLVM: store <8 x i16> [[vzip]], ptr [[RES:%.*]], align 16
885+ // LLVM: [[RES1:%.*]] = getelementptr {{.*}}<8 x i16>, ptr [[RES]], i64 1
886+ // LLVM: [[vzip1:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> [[B]], <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
887+ // LLVM: store <8 x i16> [[vzip1]], ptr [[RES1]], align 16
888+ // LLVM-NEXT: [[RET:%.*]] = load %struct.int16x8x2_t, ptr {{.*}}
889+ // LLVM-NEXT: ret %struct.int16x8x2_t [[RET]]
890+ }
891+
892+ uint32x4x2_t test_vzipq_u32 (uint32x4_t a , uint32x4_t b ) {
893+ return vzipq_u32 (a , b );
894+
895+ // CIR-LABEL: vzipq_u32
896+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!u32i x 4>>
897+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
898+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u32i x 4>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!u32i x 4>>
899+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!u32i x 4>)
900+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<4> : !s32i, #cir.int<1> : !s32i, #cir.int<5> : !s32i] :
901+ // CIR-SAME: !cir.vector<!u32i x 4>
902+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!u32i x 4>, !cir.ptr<!cir.vector<!u32i x 4>>
903+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
904+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!u32i x 4>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!u32i x 4>>
905+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!u32i x 4>)
906+ // CIR-SAME: [#cir.int<2> : !s32i, #cir.int<6> : !s32i, #cir.int<3> : !s32i, #cir.int<7> : !s32i] :
907+ // CIR-SAME: !cir.vector<!u32i x 4>
908+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!u32i x 4>, !cir.ptr<!cir.vector<!u32i x 4>>
909+ // LLVM: [[RET:%.*]] = load %struct.uint32x4x2_t, ptr {{.*}}
910+ // LLVM: ret %struct.uint32x4x2_t [[RET]]
911+ }
912+
913+ float32x4x2_t test_vzipq_f32 (float32x4_t a , float32x4_t b ) {
914+ return vzipq_f32 (a , b );
915+
916+ // CIR-LABEL: vzipq_f32
917+ // CIR: [[PTR:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.ptr<!void>), !cir.ptr<!cir.vector<!cir.float x 4>>
918+ // CIR: [[ZERO:%.*]] = cir.const #cir.int<0> : !s32i
919+ // CIR: [[ADDR:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!cir.float x 4>>, [[ZERO]] : !s32i), !cir.ptr<!cir.vector<!cir.float x 4>>
920+ // CIR: [[RES:%.*]] = cir.vec.shuffle([[INP1:%.*]], [[INP2:%.*]] : !cir.vector<!cir.float x 4>)
921+ // CIR-SAME: [#cir.int<0> : !s32i, #cir.int<4> : !s32i, #cir.int<1> : !s32i, #cir.int<5> : !s32i] :
922+ // CIR-SAME: !cir.vector<!cir.float x 4>
923+ // CIR: cir.store [[RES]], [[ADDR]] : !cir.vector<!cir.float x 4>, !cir.ptr<!cir.vector<!cir.float x 4>>
924+ // CIR: [[ONE:%.*]] = cir.const #cir.int<1> : !s32i
925+ // CIR: [[ADDR1:%.*]] = cir.ptr_stride([[PTR]] : !cir.ptr<!cir.vector<!cir.float x 4>>, [[ONE]] : !s32i), !cir.ptr<!cir.vector<!cir.float x 4>>
926+ // CIR: [[RES1:%.*]] = cir.vec.shuffle([[INP1]], [[INP2]] : !cir.vector<!cir.float x 4>)
927+ // CIR-SAME: [#cir.int<2> : !s32i, #cir.int<6> : !s32i, #cir.int<3> : !s32i, #cir.int<7> : !s32i] :
928+ // CIR-SAME: !cir.vector<!cir.float x 4>
929+ // CIR: cir.store [[RES1]], [[ADDR1]] : !cir.vector<!cir.float x 4>, !cir.ptr<!cir.vector<!cir.float x 4>>
930+ // LLVM: [[RET:%.*]] = load %struct.float32x4x2_t, ptr {{.*}}
931+ // LLVM: ret %struct.float32x4x2_t [[RET]]
932+ }
933+
707934uint8x8_t test_vqmovun_s16 (int16x8_t a ) {
708935 return vqmovun_s16 (a );
709936
0 commit comments