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