================
@@ -25,6 +25,266 @@
#include <arm_neon.h>
//===------------------------------------------------------===//
+// 2.1.3.2.7 Vector saturating rounding shift right and narrow
+//
+//===------------------------------------------------------===//
+
+// ALL-LABEL: @test_vqrshrun_n_s16(
+uint8x8_t test_vqrshrun_n_s16(int16x8_t a) {
+ // CIR: {{%.*}} = cir.call_llvm_intrinsic "aarch64.neon.sqrshrun" {{%.*}}
+
+ // LLVM-SAME: <8 x i16> noundef [[A:%.*]])
+ // LLVM: {{.*}} = bitcast <8 x i16> [[A]] to <16 x i8>
+ // LLVM: [[TMP:%.*]] = bitcast <16 x i8> {{.*}} to <8 x i16>
+ // LLVM: [[VQRSHRUN_N1:%.*]] = call <8 x i8>
@llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> [[TMP]], i32 3)
+ // LLVM: ret <8 x i8> [[VQRSHRUN_N1]]
+ return vqrshrun_n_s16(a, 3);
+}
+
+// ALL-LABEL: @test_vqrshrun_n_s32(
+uint16x4_t test_vqrshrun_n_s32(int32x4_t a) {
+ // CIR: {{%.*}} = cir.call_llvm_intrinsic "aarch64.neon.sqrshrun" {{%.*}}
+
+ // LLVM-SAME: <4 x i32> {{.*}}[[A:%.*]])
+ // LLVM: [[BC1:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>
+ // LLVM: [[BC2:%.*]] = bitcast <16 x i8> [[BC1]] to <4 x i32>
+ // LLVM: [[VQRSHRUN_N1:%.*]] = call <4 x i16>
@llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> [[BC2]], i32 9)
+ // LLVM: ret <4 x i16> [[VQRSHRUN_N1]]
+ return vqrshrun_n_s32(a, 9);
+}
+
+// ALL-LABEL: @test_vqrshrun_n_s64(
+uint32x2_t test_vqrshrun_n_s64(int64x2_t a) {
+ // CIR: {{%.*}} = cir.call_llvm_intrinsic "aarch64.neon.sqrshrun" {{%.*}}
+
+ // LLVM-SAME: <2 x i64> {{.*}}[[A:%.*]])
+ // LLVM: [[BC1:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>
+ // LLVM: [[BC2:%.*]] = bitcast <16 x i8> [[BC1]] to <2 x i64>
+ // LLVM: [[VQRSHRUN_N1:%.*]] = call <2 x i32>
@llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> [[BC2]], i32 19)
+ // LLVM: ret <2 x i32> [[VQRSHRUN_N1]]
+ return vqrshrun_n_s64(a, 19);
+}
+
+//ALL-LABEL: @test_vqrshrund_n_s64(
+uint32_t test_vqrshrund_n_s64(int64_t a) {
+ //CIR: {{%.*}} = cir.call_llvm_intrinsic "aarch64.neon.sqrshrun" {{%.*}}
+ //
+ //
+ // LLVM-SAME: i64 {{.*}}[[A:%.*]])
+ // LLVM: [[VQRSHRUND_N_S64:%.*]] = call i32
@llvm.aarch64.neon.sqrshrun.i32(i64 [[A]], i32 32)
+ // LLVM: ret i32 [[VQRSHRUND_N_S64]]
+ return (uint32_t)vqrshrund_n_s64(a, 32);
+}
+
+// ALL-LABEL: @test_vqrshrn_n_s16(
+int8x8_t test_vqrshrn_n_s16(int16x8_t a) {
+ // CIR: cir.call_llvm_intrinsic "aarch64.neon.sqrshrn" {{%.*}}
+
+ // LLVM-SAME: <8 x i16> {{.*}}[[A:%.*]])
+ // LLVM: [[BC1:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>
+ // LLVM: [[BC2:%.*]] = bitcast <16 x i8> [[BC1]] to <8 x i16>
+ // LLVM: [[VQRSHRN_N1:%.*]] = call <8 x i8>
@llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> [[BC2]], i32 3)
+ // LLVM: ret <8 x i8> [[VQRSHRN_N1]]
+ return vqrshrn_n_s16(a, 3);
+}
+
+// ALL-LABEL: @test_vqrshrn_n_s32(
+int16x4_t test_vqrshrn_n_s32(int32x4_t a) {
+ // CIR: cir.call_llvm_intrinsic "aarch64.neon.sqrshrn" {{%.*}}
+
+ // LLVM-SAME: <4 x i32> {{.*}}[[A:%.*]])
+ // LLVM: [[BC1:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>
+ // LLVM: [[BC2:%.*]] = bitcast <16 x i8> [[BC1]] to <4 x i32>
+ // LLVM: [[VQRSHRN_N1:%.*]] = call <4 x i16>
@llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> [[BC2]], i32 9)
+ // LLVM: ret <4 x i16> [[VQRSHRN_N1]]
+ return vqrshrn_n_s32(a, 9);
+}
+
+// ALL-LABEL: @test_vqrshrn_n_s64(
+int32x2_t test_vqrshrn_n_s64(int64x2_t a) {
+ // CIR: cir.call_llvm_intrinsic "aarch64.neon.sqrshrn" {{%.*}}
+
+ // LLVM-SAME: <2 x i64> {{.*}}[[A:%.*]])
+ // LLVM: [[BC1:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>
+ // LLVM: [[BC2:%.*]] = bitcast <16 x i8> [[BC1]] to <2 x i64>
+ // LLVM: [[VQRSHRN_N1:%.*]] = call <2 x i32>
@llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> [[BC2]], i32 19)
+ // LLVM: ret <2 x i32> [[VQRSHRN_N1]]
+ return vqrshrn_n_s64(a, 19);
+}
+
+// ALL-LABEL: @test_vqrshrun_high_n_s16(
+uint8x16_t test_vqrshrun_high_n_s16(uint8x8_t a, int16x8_t b) {
+ // CIR: cir.call_llvm_intrinsic "aarch64.neon.sqrshrun" {{%.*}}
+
+ // LLVM-SAME: <8 x i8> noundef [[A:%.*]], <8 x i16> noundef [[B:%.*]])
----------------
banach-space wrote:
Here and in other places - we don't match the attributes.
```suggestion
// LLVM-SAME: <8 x i8> {{.*}} [[A:%.*]], <8 x i16> {{.*}} [[B:%.*]])
```
https://github.com/llvm/llvm-project/pull/198947
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits