@@ -788,3 +788,75 @@ uint64x2_t test_vtstq_u64(uint64x2_t v1, uint64x2_t v2) {
788
788
// LLVM: [[VTST_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i64>
789
789
// LLVM: ret <2 x i64> [[VTST_I]]
790
790
}
791
+
792
+ int8x8_t test_vqmovn_s16 (int16x8_t a ) {
793
+ return vqmovn_s16 (a );
794
+
795
+ // CIR-LABEL: vqmovn_s16
796
+ // {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqxtn" {{%.*}} : (!cir.vector<!s16i x 8>) -> !cir.vector<!s8i x 8>
797
+
798
+ // LLVM: {{.*}}@test_vqmovn_s16(<8 x i16>{{.*}}[[A:%[a-z0-9]+]])
799
+ // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>
800
+ // LLVM: [[VQMOVN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtn.v8i8(<8 x i16> [[A]])
801
+ // LLVM: ret <8 x i8> [[VQMOVN_V1_I]]
802
+ }
803
+
804
+ int16x4_t test_vqmovn_s32 (int32x4_t a ) {
805
+ return vqmovn_s32 (a );
806
+
807
+ // CIR-LABEL: vqmovn_s32
808
+ // {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqxtn" {{%.*}} : (!cir.vector<!s32i x 4>) -> !cir.vector<!s16i x 4>
809
+
810
+ // LLVM: {{.*}}@test_vqmovn_s32(<4 x i32>{{.*}}[[A:%[a-z0-9]+]])
811
+ // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>
812
+ // LLVM: [[VQMOVN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtn.v4i16(<4 x i32> [[A]])
813
+ // LLVM: ret <4 x i16> [[VQMOVN_V1_I]]
814
+ }
815
+
816
+ int32x2_t test_vqmovn_s64 (int64x2_t a ) {
817
+ return vqmovn_s64 (a );
818
+
819
+ // CIR-LABEL: vqmovn_s64
820
+ // {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqxtn" {{%.*}} : (!cir.vector<!s64i x 2>) -> !cir.vector<!s32i x 2>
821
+
822
+ // LLVM: {{.*}}@test_vqmovn_s64(<2 x i64>{{.*}}[[A:%[a-z0-9]+]])
823
+ // LLVM: [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>
824
+ // LLVM: [[VQMOVN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqxtn.v2i32(<2 x i64> [[A]])
825
+ // LLVM: ret <2 x i32> [[VQMOVN_V1_I]]
826
+ }
827
+
828
+ uint8x8_t test_vqmovn_u16 (uint16x8_t a ) {
829
+ return vqmovn_u16 (a );
830
+
831
+ // CIR-LABEL: vqmovn_u16
832
+ // {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqxtn" {{%.*}} : (!cir.vector<!u16i x 8>) -> !cir.vector<!u8i x 8>
833
+
834
+ // LLVM: {{.*}}@test_vqmovn_u16(<8 x i16>{{.*}}[[A:%[a-z0-9]+]])
835
+ // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>
836
+ // LLVM: [[VQMOVN_V1_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqxtn.v8i8(<8 x i16> [[A]])
837
+ // LLVM: ret <8 x i8> [[VQMOVN_V1_I]]
838
+ }
839
+
840
+ uint16x4_t test_vqmovn_u32 (uint32x4_t a ) {
841
+ return vqmovn_u32 (a );
842
+
843
+ // CIR-LABEL: vqmovn_u32
844
+ // {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqxtn" {{%.*}} : (!cir.vector<!u32i x 4>) -> !cir.vector<!u16i x 4>
845
+
846
+ // LLVM: {{.*}}@test_vqmovn_u32(<4 x i32>{{.*}}[[A:%[a-z0-9]+]])
847
+ // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>
848
+ // LLVM: [[VQMOVN_V1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqxtn.v4i16(<4 x i32> [[A]])
849
+ // LLVM: ret <4 x i16> [[VQMOVN_V1_I]]
850
+ }
851
+
852
+ uint32x2_t test_vqmovn_u64 (uint64x2_t a ) {
853
+ return vqmovn_u64 (a );
854
+
855
+ // CIR-LABEL: vqmovn_u64
856
+ // {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqxtn" {{%.*}} : (!cir.vector<!u64i x 2>) -> !cir.vector<!u32i x 2>
857
+
858
+ // LLVM: {{.*}}@test_vqmovn_u64(<2 x i64>{{.*}}[[A:%[a-z0-9]+]])
859
+ // LLVM: [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>
860
+ // LLVM: [[VQMOVN_V1_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqxtn.v2i32(<2 x i64> [[A]])
861
+ // LLVM: ret <2 x i32> [[VQMOVN_V1_I]]
862
+ }
0 commit comments