@@ -703,6 +703,233 @@ float32x4x2_t test_vuzpq_f32(float32x4_t a, float32x4_t b) {
703
703
// LLVM-NEXT: ret %struct.float32x4x2_t [[RET]]
704
704
}
705
705
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
+
706
933
uint8x8_t test_vqmovun_s16 (int16x8_t a ) {
707
934
return vqmovun_s16 (a );
708
935
0 commit comments