@@ -6927,59 +6927,89 @@ uint32x2_t test_vqrshrun_n_s64(int64x2_t a) {
69276927// return vqrshrun_high_n_s64(a, b, 19);
69286928// }
69296929
6930- // NYI-LABEL: @test_vqshrn_n_s16(
6931- // NYI: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
6932- // NYI: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
6933- // NYI: [[VQSHRN_N1:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> [[VQSHRN_N]], i32 3)
6934- // NYI: ret <8 x i8> [[VQSHRN_N1]]
6935- // int8x8_t test_vqshrn_n_s16(int16x8_t a) {
6936- // return vqshrn_n_s16(a, 3);
6937- // }
6930+ int8x8_t test_vqshrn_n_s16(int16x8_t a) {
6931+ return vqshrn_n_s16(a, 3);
69386932
6939- // NYI-LABEL: @test_vqshrn_n_s32(
6940- // NYI: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
6941- // NYI: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
6942- // NYI: [[VQSHRN_N1:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> [[VQSHRN_N]], i32 19)
6943- // NYI: ret <4 x i16> [[VQSHRN_N1]]
6944- // int16x4_t test_vqshrn_n_s32(int32x4_t a) {
6945- // return vqshrn_n_s32(a, 9);
6946- // }
6933+ // CIR-LABEL: vqshrn_n_s16
6934+ // CIR: cir.llvm.intrinsic "aarch64.neon.sqshrn" {{%.*}}, {{%.*}} :
6935+ // CIR-SAME: (!cir.vector<!s16i x 8>, !s32i) -> !cir.vector<!s8i x 8>
69476936
6948- // NYI-LABEL: @test_vqshrn_n_s64(
6949- // NYI: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
6950- // NYI: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
6951- // NYI: [[VQSHRN_N1:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> [[VQSHRN_N]], i32 19)
6952- // NYI: ret <2 x i32> [[VQSHRN_N1]]
6953- // int32x2_t test_vqshrn_n_s64(int64x2_t a) {
6954- // return vqshrn_n_s64(a, 19);
6955- // }
6937+ // LLVM:{{.*}}test_vqshrn_n_s16(<8 x i16>{{.*}}[[A:%.*]])
6938+ // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>
6939+ // LLVM: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
6940+ // LLVM: [[VQSHRN_N1:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> [[VQSHRN_N]], i32 3)
6941+ // LLVM: ret <8 x i8> [[VQSHRN_N1]]
6942+ }
69566943
6957- // NYI-LABEL: @test_vqshrn_n_u16(
6958- // NYI: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
6959- // NYI: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
6960- // NYI: [[VQSHRN_N1:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> [[VQSHRN_N]], i32 3)
6961- // NYI: ret <8 x i8> [[VQSHRN_N1]]
6962- // uint8x8_t test_vqshrn_n_u16(uint16x8_t a) {
6963- // return vqshrn_n_u16(a, 3);
6964- // }
6944+ int16x4_t test_vqshrn_n_s32(int32x4_t a) {
6945+ return vqshrn_n_s32(a, 9);
69656946
6966- // NYI-LABEL: @test_vqshrn_n_u32(
6967- // NYI: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
6968- // NYI: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
6969- // NYI: [[VQSHRN_N1:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> [[VQSHRN_N]], i32 9)
6970- // NYI: ret <4 x i16> [[VQSHRN_N1]]
6971- // uint16x4_t test_vqshrn_n_u32(uint32x4_t a) {
6972- // return vqshrn_n_u32(a, 9);
6973- // }
6947+ // CIR-LABEL: vqshrn_n_s32
6948+ // CIR: cir.llvm.intrinsic "aarch64.neon.sqshrn" {{%.*}}, {{%.*}} :
6949+ // CIR-SAME: (!cir.vector<!s32i x 4>, !s32i) -> !cir.vector<!s16i x 4>
69746950
6975- // NYI-LABEL: @test_vqshrn_n_u64(
6976- // NYI: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
6977- // NYI: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
6978- // NYI: [[VQSHRN_N1:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> [[VQSHRN_N]], i32 19)
6979- // NYI: ret <2 x i32> [[VQSHRN_N1]]
6980- // uint32x2_t test_vqshrn_n_u64(uint64x2_t a) {
6981- // return vqshrn_n_u64(a, 19);
6982- // }
6951+ // LLVM:{{.*}}test_vqshrn_n_s32(<4 x i32>{{.*}}[[A:%.*]])
6952+ // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>
6953+ // LLVM: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
6954+ // LLVM: [[VQSHRN_N1:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> [[VQSHRN_N]], i32 9)
6955+ // LLVM: ret <4 x i16> [[VQSHRN_N1]]
6956+ }
6957+
6958+ int32x2_t test_vqshrn_n_s64(int64x2_t a) {
6959+ return vqshrn_n_s64(a, 19);
6960+
6961+ // CIR-LABEL: vqshrn_n_s64
6962+ // CIR: cir.llvm.intrinsic "aarch64.neon.sqshrn" {{%.*}}, {{%.*}} :
6963+ // CIR-SAME: (!cir.vector<!s64i x 2>, !s32i) -> !cir.vector<!s32i x 2>
6964+
6965+ // LLVM:{{.*}}test_vqshrn_n_s64(<2 x i64>{{.*}}[[A:%.*]])
6966+ // LLVM: [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>
6967+ // LLVM: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
6968+ // LLVM: [[VQSHRN_N1:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> [[VQSHRN_N]], i32 19)
6969+ // LLVM: ret <2 x i32> [[VQSHRN_N1]]
6970+ }
6971+
6972+ uint8x8_t test_vqshrn_n_u16(uint16x8_t a) {
6973+ return vqshrn_n_u16(a, 3);
6974+
6975+ // CIR-LABEL: vqshrn_n_u16
6976+ // CIR: cir.llvm.intrinsic "aarch64.neon.uqshrn" {{%.*}}, {{%.*}} :
6977+ // CIR-SAME: (!cir.vector<!u16i x 8>, !s32i) -> !cir.vector<!u8i x 8>
6978+
6979+ // LLVM:{{.*}}test_vqshrn_n_u16(<8 x i16>{{.*}}[[A:%.*]])
6980+ // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>
6981+ // LLVM: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
6982+ // LLVM: [[VQSHRN_N1:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> [[VQSHRN_N]], i32 3)
6983+ // LLVM: ret <8 x i8> [[VQSHRN_N1]]
6984+ }
6985+
6986+ uint16x4_t test_vqshrn_n_u32(uint32x4_t a) {
6987+ return vqshrn_n_u32(a, 9);
6988+
6989+ // CIR-LABEL: vqshrn_n_u32
6990+ // CIR: cir.llvm.intrinsic "aarch64.neon.uqshrn" {{%.*}}, {{%.*}} :
6991+ // CIR-SAME: (!cir.vector<!u32i x 4>, !s32i) -> !cir.vector<!u16i x 4>
6992+
6993+ // LLVM:{{.*}}test_vqshrn_n_u32(<4 x i32>{{.*}}[[A:%.*]])
6994+ // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>
6995+ // LLVM: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
6996+ // LLVM: [[VQSHRN_N1:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> [[VQSHRN_N]], i32 9)
6997+ // LLVM: ret <4 x i16> [[VQSHRN_N1]]
6998+ }
6999+
7000+ uint32x2_t test_vqshrn_n_u64(uint64x2_t a) {
7001+ return vqshrn_n_u64(a, 19);
7002+
7003+ // CIR-LABEL: vqshrn_n_u64
7004+ // CIR: cir.llvm.intrinsic "aarch64.neon.uqshrn" {{%.*}}, {{%.*}} :
7005+ // CIR-SAME: (!cir.vector<!u64i x 2>, !s32i) -> !cir.vector<!u32i x 2>
7006+
7007+ // LLVM:{{.*}}test_vqshrn_n_u64(<2 x i64>{{.*}}[[A:%.*]])
7008+ // LLVM: [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>
7009+ // LLVM: [[VQSHRN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
7010+ // LLVM: [[VQSHRN_N1:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> [[VQSHRN_N]], i32 19)
7011+ // LLVM: ret <2 x i32> [[VQSHRN_N1]]
7012+ }
69837013
69847014// NYI-LABEL: @test_vqshrn_high_n_s16(
69857015// NYI: [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8>
0 commit comments