From f3954537c9c648874108efb8487aee5a6a19cfb0 Mon Sep 17 00:00:00 2001 From: Guojin Date: Mon, 11 Nov 2024 16:00:26 -0500 Subject: [PATCH] [CIR][CIRGen][Builtin][Neon] Lower neon_vhsub_v, neon_vhsubq_v (#1103) --- .../lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp | 7 +- clang/test/CIR/CodeGen/AArch64/neon.c | 564 ++++++++++-------- 2 files changed, 318 insertions(+), 253 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp index d7eb4701c84b..c6e27dfe31af 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp @@ -2518,7 +2518,12 @@ mlir::Value CIRGenFunction::emitCommonNeonBuiltinExpr( : "aarch64.neon.shadd"; break; } - + case NEON::BI__builtin_neon_vhsub_v: + case NEON::BI__builtin_neon_vhsubq_v: { + intrincsName = (intrinicId != altLLVMIntrinsic) ? "aarch64.neon.uhsub" + : "aarch64.neon.shsub"; + break; + } case NEON::BI__builtin_neon_vqmovn_v: { intrincsName = (intrinicId != altLLVMIntrinsic) ? "aarch64.neon.uqxtn" : "aarch64.neon.sqxtn"; diff --git a/clang/test/CIR/CodeGen/AArch64/neon.c b/clang/test/CIR/CodeGen/AArch64/neon.c index 597734052608..b789c2a840c5 100644 --- a/clang/test/CIR/CodeGen/AArch64/neon.c +++ b/clang/test/CIR/CodeGen/AArch64/neon.c @@ -858,7 +858,7 @@ int16x4_t test_vabd_s16(int16x4_t v1, int16x4_t v2) { return vabd_s16(v1, v2); // CIR-LABEL: vabd_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sabd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sabd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) // LLVM: {{.*}}test_vabd_s16(<4 x i16>{{.*}}[[V1:%.*]], <4 x i16>{{.*}}[[V2:%.*]]) @@ -870,7 +870,7 @@ int32x2_t test_vabd_s32(int32x2_t v1, int32x2_t v2) { return vabd_s32(v1, v2); // CIR-LABEL: vabd_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sabd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sabd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) // LLVM: {{.*}}test_vabd_s32(<2 x i32>{{.*}}[[V1:%.*]], <2 x i32>{{.*}}[[V2:%.*]]) @@ -882,7 +882,7 @@ uint8x8_t test_vabd_u8(uint8x8_t v1, uint8x8_t v2) { return vabd_u8(v1, v2); // CIR-LABEL: vabd_u8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uabd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uabd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) // LLVM: {{.*}}test_vabd_u8(<8 x i8>{{.*}}[[V1:%.*]], <8 x i8>{{.*}}[[V2:%.*]]) @@ -894,7 +894,7 @@ uint16x4_t test_vabd_u16(uint16x4_t v1, uint16x4_t v2) { return vabd_u16(v1, v2); // CIR-LABEL: vabd_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uabd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uabd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) // LLVM: {{.*}}test_vabd_u16(<4 x i16>{{.*}}[[V1:%.*]], <4 x i16>{{.*}}[[V2:%.*]]) @@ -906,7 +906,7 @@ uint32x2_t test_vabd_u32(uint32x2_t v1, uint32x2_t v2) { return vabd_u32(v1, v2); // CIR-LABEL: vabd_u32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uabd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uabd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) // LLVM: {{.*}}test_vabd_u32(<2 x i32>{{.*}}[[V1:%.*]], <2 x i32>{{.*}}[[V2:%.*]]) @@ -918,7 +918,7 @@ float32x2_t test_vabd_f32(float32x2_t v1, float32x2_t v2) { return vabd_f32(v1, v2); // CIR-LABEL: vabd_f32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.fabd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.fabd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) // LLVM: {{.*}}test_vabd_f32(<2 x float>{{.*}}[[V1:%.*]], <2 x float>{{.*}}[[V2:%.*]]) @@ -980,7 +980,7 @@ uint16x8_t test_vabdq_u16(uint16x8_t v1, uint16x8_t v2) { // CIR-LABEL: vabdq_u16 // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uabd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) - + // LLVM: {{.*}}test_vabdq_u16(<8 x i16>{{.*}}[[V1:%.*]], <8 x i16>{{.*}}[[V2:%.*]]) // LLVM: [[VABD_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uabd.v8i16(<8 x i16> [[V1]], <8 x i16> [[V2]]) // LLVM: ret <8 x i16> [[VABD_I]] @@ -2572,7 +2572,7 @@ int8x8_t test_vhadd_s8(int8x8_t v1, int8x8_t v2) { return vhadd_s8(v1, v2); // CIR-LABEL: vhadd_s8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhadd_s8(<8 x i8>{{.*}}[[V1:%.*]], <8 x i8>{{.*}}[[V2:%.*]]) @@ -2584,7 +2584,7 @@ int16x4_t test_vhadd_s16(int16x4_t v1, int16x4_t v2) { return vhadd_s16(v1, v2); // CIR-LABEL: vhadd_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhadd_s16(<4 x i16>{{.*}}[[V1:%.*]], <4 x i16>{{.*}}[[V2:%.*]]) @@ -2599,7 +2599,7 @@ int32x2_t test_vhadd_s32(int32x2_t v1, int32x2_t v2) { return vhadd_s32(v1, v2); // CIR-LABEL: vhadd_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhadd_s32(<2 x i32>{{.*}}[[V1:%.*]], <2 x i32>{{.*}}[[V2:%.*]]) @@ -2614,7 +2614,7 @@ uint8x8_t test_vhadd_u8(uint8x8_t v1, uint8x8_t v2) { return vhadd_u8(v1, v2); // CIR-LABEL: vhadd_u8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhadd_u8(<8 x i8>{{.*}}[[V1:%.*]], <8 x i8>{{.*}}[[V2:%.*]]) @@ -2626,7 +2626,7 @@ uint16x4_t test_vhadd_u16(uint16x4_t v1, uint16x4_t v2) { return vhadd_u16(v1, v2); // CIR-LABEL: vhadd_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhadd_u16(<4 x i16>{{.*}}[[V1:%.*]], <4 x i16>{{.*}}[[V2:%.*]]) @@ -2641,7 +2641,7 @@ uint32x2_t test_vhadd_u32(uint32x2_t v1, uint32x2_t v2) { return vhadd_u32(v1, v2); // CIR-LABEL: vhadd_u32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhadd_u32(<2 x i32>{{.*}}[[V1:%.*]], <2 x i32>{{.*}}[[V2:%.*]]) @@ -2656,7 +2656,7 @@ int8x16_t test_vhaddq_s8(int8x16_t v1, int8x16_t v2) { return vhaddq_s8(v1, v2); // CIR-LABEL: vhaddq_s8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhaddq_s8(<16 x i8>{{.*}}[[V1:%.*]], <16 x i8>{{.*}}[[V2:%.*]]) @@ -2668,7 +2668,7 @@ int16x8_t test_vhaddq_s16(int16x8_t v1, int16x8_t v2) { return vhaddq_s16(v1, v2); // CIR-LABEL: vhaddq_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhaddq_s16(<8 x i16>{{.*}}[[V1:%.*]], <8 x i16>{{.*}}[[V2:%.*]]) @@ -2683,7 +2683,7 @@ int32x4_t test_vhaddq_s32(int32x4_t v1, int32x4_t v2) { return vhaddq_s32(v1, v2); // CIR-LABEL: vhaddq_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhaddq_s32(<4 x i32>{{.*}}[[V1:%.*]], <4 x i32>{{.*}}[[V2:%.*]]) @@ -2698,7 +2698,7 @@ uint8x16_t test_vhaddq_u8(uint8x16_t v1, uint8x16_t v2) { return vhaddq_u8(v1, v2); // CIR-LABEL: vhaddq_u8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhaddq_u8(<16 x i8>{{.*}}[[V1:%.*]], <16 x i8>{{.*}}[[V2:%.*]]) @@ -2710,7 +2710,7 @@ uint16x8_t test_vhaddq_u16(uint16x8_t v1, uint16x8_t v2) { return vhaddq_u16(v1, v2); // CIR-LABEL: vhaddq_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhaddq_u16(<8 x i16>{{.*}}[[V1:%.*]], <8 x i16>{{.*}}[[V2:%.*]]) @@ -2725,7 +2725,7 @@ uint32x4_t test_vhaddq_u32(uint32x4_t v1, uint32x4_t v2) { return vhaddq_u32(v1, v2); // CIR-LABEL: vhaddq_u32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vhaddq_u32(<4 x i32>{{.*}}[[V1:%.*]], <4 x i32>{{.*}}[[V2:%.*]]) @@ -2736,119 +2736,179 @@ uint32x4_t test_vhaddq_u32(uint32x4_t v1, uint32x4_t v2) { // LLVM: ret <4 x i32> [[VHADD_V2_I]] } -// NYI-LABEL: @test_vhsub_s8( -// NYI: [[VHSUB_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.shsub.v8i8(<8 x i8> %v1, <8 x i8> %v2) -// NYI: ret <8 x i8> [[VHSUB_V_I]] -// int8x8_t test_vhsub_s8(int8x8_t v1, int8x8_t v2) { -// return vhsub_s8(v1, v2); -// } +int8x8_t test_vhsub_s8(int8x8_t v1, int8x8_t v2) { + return vhsub_s8(v1, v2); -// NYI-LABEL: @test_vhsub_s16( -// NYI: [[TMP0:%.*]] = bitcast <4 x i16> %v1 to <8 x i8> -// NYI: [[TMP1:%.*]] = bitcast <4 x i16> %v2 to <8 x i8> -// NYI: [[VHSUB_V2_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.shsub.v4i16(<4 x i16> %v1, <4 x i16> %v2) -// NYI: [[VHSUB_V3_I:%.*]] = bitcast <4 x i16> [[VHSUB_V2_I]] to <8 x i8> -// NYI: ret <4 x i16> [[VHSUB_V2_I]] -// int16x4_t test_vhsub_s16(int16x4_t v1, int16x4_t v2) { -// return vhsub_s16(v1, v2); -// } + // CIR-LABEL: vhsub_s8 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector -// NYI-LABEL: @test_vhsub_s32( -// NYI: [[TMP0:%.*]] = bitcast <2 x i32> %v1 to <8 x i8> -// NYI: [[TMP1:%.*]] = bitcast <2 x i32> %v2 to <8 x i8> -// NYI: [[VHSUB_V2_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.shsub.v2i32(<2 x i32> %v1, <2 x i32> %v2) -// NYI: [[VHSUB_V3_I:%.*]] = bitcast <2 x i32> [[VHSUB_V2_I]] to <8 x i8> -// NYI: ret <2 x i32> [[VHSUB_V2_I]] -// int32x2_t test_vhsub_s32(int32x2_t v1, int32x2_t v2) { -// return vhsub_s32(v1, v2); -// } + // LLVM: {{.*}}@test_vhsub_s8(<8 x i8>{{.*}}[[v1:%.*]], <8 x i8>{{.*}}[[v2:%.*]]) + // LLVM: [[VHSUB_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.shsub.v8i8(<8 x i8> [[v1]], <8 x i8> [[v2]]) + // LLVM: ret <8 x i8> [[VHSUB_V_I]] +} -// NYI-LABEL: @test_vhsub_u8( -// NYI: [[VHSUB_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uhsub.v8i8(<8 x i8> %v1, <8 x i8> %v2) -// NYI: ret <8 x i8> [[VHSUB_V_I]] -// uint8x8_t test_vhsub_u8(uint8x8_t v1, uint8x8_t v2) { -// return vhsub_u8(v1, v2); -// } +int16x4_t test_vhsub_s16(int16x4_t v1, int16x4_t v2) { + return vhsub_s16(v1, v2); -// NYI-LABEL: @test_vhsub_u16( -// NYI: [[TMP0:%.*]] = bitcast <4 x i16> %v1 to <8 x i8> -// NYI: [[TMP1:%.*]] = bitcast <4 x i16> %v2 to <8 x i8> -// NYI: [[VHSUB_V2_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uhsub.v4i16(<4 x i16> %v1, <4 x i16> %v2) -// NYI: [[VHSUB_V3_I:%.*]] = bitcast <4 x i16> [[VHSUB_V2_I]] to <8 x i8> -// NYI: ret <4 x i16> [[VHSUB_V2_I]] -// uint16x4_t test_vhsub_u16(uint16x4_t v1, uint16x4_t v2) { -// return vhsub_u16(v1, v2); -// } + // CIR-LABEL: vhsub_s16 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector -// NYI-LABEL: @test_vhsub_u32( -// NYI: [[TMP0:%.*]] = bitcast <2 x i32> %v1 to <8 x i8> -// NYI: [[TMP1:%.*]] = bitcast <2 x i32> %v2 to <8 x i8> -// NYI: [[VHSUB_V2_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uhsub.v2i32(<2 x i32> %v1, <2 x i32> %v2) -// NYI: [[VHSUB_V3_I:%.*]] = bitcast <2 x i32> [[VHSUB_V2_I]] to <8 x i8> -// NYI: ret <2 x i32> [[VHSUB_V2_I]] -// uint32x2_t test_vhsub_u32(uint32x2_t v1, uint32x2_t v2) { -// return vhsub_u32(v1, v2); -// } + // LLVM: {{.*}}@test_vhsub_s16(<4 x i16>{{.*}}[[v1:%.*]], <4 x i16>{{.*}}[[v2:%.*]]) + // LLVM: [[TMP0:%.*]] = bitcast <4 x i16> [[v1]] to <8 x i8> + // LLVM: [[TMP1:%.*]] = bitcast <4 x i16> [[v2]] to <8 x i8> + // LLVM: [[VHSUB_V2_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.shsub.v4i16(<4 x i16> [[v1]], <4 x i16> [[v2]]) + // LLVM: [[VHSUB_V3_I:%.*]] = bitcast <4 x i16> [[VHSUB_V2_I]] to <8 x i8> + // LLVM: ret <4 x i16> [[VHSUB_V2_I]] +} -// NYI-LABEL: @test_vhsubq_s8( -// NYI: [[VHSUBQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.shsub.v16i8(<16 x i8> %v1, <16 x i8> %v2) -// NYI: ret <16 x i8> [[VHSUBQ_V_I]] -// int8x16_t test_vhsubq_s8(int8x16_t v1, int8x16_t v2) { -// return vhsubq_s8(v1, v2); -// } +int32x2_t test_vhsub_s32(int32x2_t v1, int32x2_t v2) { + return vhsub_s32(v1, v2); -// NYI-LABEL: @test_vhsubq_s16( -// NYI: [[TMP0:%.*]] = bitcast <8 x i16> %v1 to <16 x i8> -// NYI: [[TMP1:%.*]] = bitcast <8 x i16> %v2 to <16 x i8> -// NYI: [[VHSUBQ_V2_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.shsub.v8i16(<8 x i16> %v1, <8 x i16> %v2) -// NYI: [[VHSUBQ_V3_I:%.*]] = bitcast <8 x i16> [[VHSUBQ_V2_I]] to <16 x i8> -// NYI: ret <8 x i16> [[VHSUBQ_V2_I]] -// int16x8_t test_vhsubq_s16(int16x8_t v1, int16x8_t v2) { -// return vhsubq_s16(v1, v2); -// } + // CIR-LABEL: vhsub_s32 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector -// NYI-LABEL: @test_vhsubq_s32( -// NYI: [[TMP0:%.*]] = bitcast <4 x i32> %v1 to <16 x i8> -// NYI: [[TMP1:%.*]] = bitcast <4 x i32> %v2 to <16 x i8> -// NYI: [[VHSUBQ_V2_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.shsub.v4i32(<4 x i32> %v1, <4 x i32> %v2) -// NYI: [[VHSUBQ_V3_I:%.*]] = bitcast <4 x i32> [[VHSUBQ_V2_I]] to <16 x i8> -// NYI: ret <4 x i32> [[VHSUBQ_V2_I]] -// int32x4_t test_vhsubq_s32(int32x4_t v1, int32x4_t v2) { -// return vhsubq_s32(v1, v2); -// } + // LLVM: {{.*}}@test_vhsub_s32(<2 x i32>{{.*}}[[v1:%.*]], <2 x i32>{{.*}}[[v2:%.*]]) + // LLVM: [[TMP0:%.*]] = bitcast <2 x i32> [[v1]] to <8 x i8> + // LLVM: [[TMP1:%.*]] = bitcast <2 x i32> [[v2]] to <8 x i8> + // LLVM: [[VHSUB_V2_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.shsub.v2i32(<2 x i32> [[v1]], <2 x i32> [[v2]]) + // LLVM: [[VHSUB_V3_I:%.*]] = bitcast <2 x i32> [[VHSUB_V2_I]] to <8 x i8> + // LLVM: ret <2 x i32> [[VHSUB_V2_I]] +} -// NYI-LABEL: @test_vhsubq_u8( -// NYI: [[VHSUBQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.uhsub.v16i8(<16 x i8> %v1, <16 x i8> %v2) -// NYI: ret <16 x i8> [[VHSUBQ_V_I]] -// uint8x16_t test_vhsubq_u8(uint8x16_t v1, uint8x16_t v2) { -// return vhsubq_u8(v1, v2); -// } +uint8x8_t test_vhsub_u8(uint8x8_t v1, uint8x8_t v2) { + return vhsub_u8(v1, v2); -// NYI-LABEL: @test_vhsubq_u16( -// NYI: [[TMP0:%.*]] = bitcast <8 x i16> %v1 to <16 x i8> -// NYI: [[TMP1:%.*]] = bitcast <8 x i16> %v2 to <16 x i8> -// NYI: [[VHSUBQ_V2_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uhsub.v8i16(<8 x i16> %v1, <8 x i16> %v2) -// NYI: [[VHSUBQ_V3_I:%.*]] = bitcast <8 x i16> [[VHSUBQ_V2_I]] to <16 x i8> -// NYI: ret <8 x i16> [[VHSUBQ_V2_I]] -// uint16x8_t test_vhsubq_u16(uint16x8_t v1, uint16x8_t v2) { -// return vhsubq_u16(v1, v2); -// } + // CIR-LABEL: vhsub_u8 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector -// NYI-LABEL: @test_vhsubq_u32( -// NYI: [[TMP0:%.*]] = bitcast <4 x i32> %v1 to <16 x i8> -// NYI: [[TMP1:%.*]] = bitcast <4 x i32> %v2 to <16 x i8> -// NYI: [[VHSUBQ_V2_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.uhsub.v4i32(<4 x i32> %v1, <4 x i32> %v2) -// NYI: [[VHSUBQ_V3_I:%.*]] = bitcast <4 x i32> [[VHSUBQ_V2_I]] to <16 x i8> -// NYI: ret <4 x i32> [[VHSUBQ_V2_I]] -// uint32x4_t test_vhsubq_u32(uint32x4_t v1, uint32x4_t v2) { -// return vhsubq_u32(v1, v2); -// } + // LLVM: {{.*}}@test_vhsub_u8(<8 x i8>{{.*}}[[v1:%.*]], <8 x i8>{{.*}}[[v2:%.*]]) + // LLVM: [[VHSUB_V_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.uhsub.v8i8(<8 x i8> [[v1]], <8 x i8> [[v2]]) + // LLVM: ret <8 x i8> [[VHSUB_V_I]] +} + +uint16x4_t test_vhsub_u16(uint16x4_t v1, uint16x4_t v2) { + return vhsub_u16(v1, v2); + + // CIR-LABEL: vhsub_u16 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector + + // LLVM: {{.*}}@test_vhsub_u16(<4 x i16>{{.*}}[[v1:%.*]], <4 x i16>{{.*}}[[v2:%.*]]) + // LLVM: [[TMP0:%.*]] = bitcast <4 x i16> [[v1]] to <8 x i8> + // LLVM: [[TMP1:%.*]] = bitcast <4 x i16> [[v2]] to <8 x i8> + // LLVM: [[VHSUB_V2_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.uhsub.v4i16(<4 x i16> [[v1]], <4 x i16> [[v2]]) + // LLVM: [[VHSUB_V3_I:%.*]] = bitcast <4 x i16> [[VHSUB_V2_I]] to <8 x i8> + // LLVM: ret <4 x i16> [[VHSUB_V2_I]] +} + +uint32x2_t test_vhsub_u32(uint32x2_t v1, uint32x2_t v2) { + return vhsub_u32(v1, v2); + + // CIR-LABEL: vhsub_u32 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector + + // LLVM: {{.*}}@test_vhsub_u32(<2 x i32>{{.*}}[[v1:%.*]], <2 x i32>{{.*}}[[v2:%.*]]) + // LLVM: [[TMP0:%.*]] = bitcast <2 x i32> [[v1]] to <8 x i8> + // LLVM: [[TMP1:%.*]] = bitcast <2 x i32> [[v2]] to <8 x i8> + // LLVM: [[VHSUB_V2_I:%.*]] = call <2 x i32> @llvm.aarch64.neon.uhsub.v2i32(<2 x i32> [[v1]], <2 x i32> [[v2]]) + // LLVM: [[VHSUB_V3_I:%.*]] = bitcast <2 x i32> [[VHSUB_V2_I]] to <8 x i8> + // LLVM: ret <2 x i32> [[VHSUB_V2_I]] +} + +int8x16_t test_vhsubq_s8(int8x16_t v1, int8x16_t v2) { + return vhsubq_s8(v1, v2); + + // CIR-LABEL: vhsubq_s8 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector + + // LLVM: {{.*}}@test_vhsubq_s8(<16 x i8>{{.*}}[[v1:%.*]], <16 x i8>{{.*}}[[v2:%.*]]) + // LLVM: [[VHSUBQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.shsub.v16i8(<16 x i8> [[v1]], <16 x i8> [[v2]]) + // LLVM: ret <16 x i8> [[VHSUBQ_V_I]] +} + +int16x8_t test_vhsubq_s16(int16x8_t v1, int16x8_t v2) { + return vhsubq_s16(v1, v2); + + // CIR-LABEL: vhsubq_s16 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector + + // LLVM: {{.*}}@test_vhsubq_s16(<8 x i16>{{.*}}[[v1:%.*]], <8 x i16>{{.*}}[[v2:%.*]]) + // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[v1]] to <16 x i8> + // LLVM: [[TMP1:%.*]] = bitcast <8 x i16> [[v2]] to <16 x i8> + // LLVM: [[VHSUBQ_V2_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.shsub.v8i16(<8 x i16> [[v1]], <8 x i16> [[v2]]) + // LLVM: [[VHSUBQ_V3_I:%.*]] = bitcast <8 x i16> [[VHSUBQ_V2_I]] to <16 x i8> + // LLVM: ret <8 x i16> [[VHSUBQ_V2_I]] +} + +int32x4_t test_vhsubq_s32(int32x4_t v1, int32x4_t v2) { + return vhsubq_s32(v1, v2); + + // CIR-LABEL: vhsubq_s32 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.shsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector + + // LLVM: {{.*}}@test_vhsubq_s32(<4 x i32>{{.*}}[[v1:%.*]], <4 x i32>{{.*}}[[v2:%.*]]) + // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[v1]] to <16 x i8> + // LLVM: [[TMP1:%.*]] = bitcast <4 x i32> [[v2]] to <16 x i8> + // LLVM: [[VHSUBQ_V2_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.shsub.v4i32(<4 x i32> [[v1]], <4 x i32> [[v2]]) + // LLVM: [[VHSUBQ_V3_I:%.*]] = bitcast <4 x i32> [[VHSUBQ_V2_I]] to <16 x i8> + // LLVM: ret <4 x i32> [[VHSUBQ_V2_I]] +} + +uint8x16_t test_vhsubq_u8(uint8x16_t v1, uint8x16_t v2) { + return vhsubq_u8(v1, v2); + + // CIR-LABEL: vhsubq_u8 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector + + // LLVM: {{.*}}@test_vhsubq_u8(<16 x i8>{{.*}}[[v1:%.*]], <16 x i8>{{.*}}[[v2:%.*]]) + // LLVM: [[VHSUBQ_V_I:%.*]] = call <16 x i8> @llvm.aarch64.neon.uhsub.v16i8(<16 x i8> [[v1]], <16 x i8> [[v2]]) + // LLVM: ret <16 x i8> [[VHSUBQ_V_I]] +} + +uint16x8_t test_vhsubq_u16(uint16x8_t v1, uint16x8_t v2) { + return vhsubq_u16(v1, v2); + + // CIR-LABEL: vhsubq_u16 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector + + // LLVM: {{.*}}@test_vhsubq_u16(<8 x i16>{{.*}}[[v1:%.*]], <8 x i16>{{.*}}[[v2:%.*]]) + // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[v1]] to <16 x i8> + // LLVM: [[TMP1:%.*]] = bitcast <8 x i16> [[v2]] to <16 x i8> + // LLVM: [[VHSUBQ_V2_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.uhsub.v8i16(<8 x i16> [[v1]], <8 x i16> [[v2]]) + // LLVM: [[VHSUBQ_V3_I:%.*]] = bitcast <8 x i16> [[VHSUBQ_V2_I]] to <16 x i8> + // LLVM: ret <8 x i16> [[VHSUBQ_V2_I]] +} + +uint32x4_t test_vhsubq_u32(uint32x4_t v1, uint32x4_t v2) { + return vhsubq_u32(v1, v2); + + // CIR-LABEL: vhsubq_u32 + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uhsub" {{%.*}}, {{%.*}} : + // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector + + // LLVM: {{.*}}@test_vhsubq_u32(<4 x i32>{{.*}}[[v1:%.*]], <4 x i32>{{.*}}[[v2:%.*]]) + // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[v1]] to <16 x i8> + // LLVM: [[TMP1:%.*]] = bitcast <4 x i32> [[v2]] to <16 x i8> + // LLVM: [[VHSUBQ_V2_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.uhsub.v4i32(<4 x i32> [[v1]], <4 x i32> [[v2]]) + // LLVM: [[VHSUBQ_V3_I:%.*]] = bitcast <4 x i32> [[VHSUBQ_V2_I]] to <16 x i8> + // LLVM: ret <4 x i32> [[VHSUBQ_V2_I]] +} int8x8_t test_vrhadd_s8(int8x8_t v1, int8x8_t v2) { return vrhadd_s8(v1, v2); // CIR-LABEL: vrhadd_s8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhadd_s8(<8 x i8>{{.*}}[[V1:%.*]], <8 x i8>{{.*}}[[V2:%.*]]) @@ -2860,7 +2920,7 @@ int16x4_t test_vrhadd_s16(int16x4_t v1, int16x4_t v2) { return vrhadd_s16(v1, v2); // CIR-LABEL: vrhadd_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhadd_s16(<4 x i16>{{.*}}[[V1:%.*]], <4 x i16>{{.*}}[[V2:%.*]]) @@ -2875,7 +2935,7 @@ int32x2_t test_vrhadd_s32(int32x2_t v1, int32x2_t v2) { return vrhadd_s32(v1, v2); // CIR-LABEL: vrhadd_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhadd_s32(<2 x i32>{{.*}}[[V1:%.*]], <2 x i32>{{.*}}[[V2:%.*]]) @@ -2890,7 +2950,7 @@ uint8x8_t test_vrhadd_u8(uint8x8_t v1, uint8x8_t v2) { return vrhadd_u8(v1, v2); // CIR-LABEL: vrhadd_u8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhadd_u8(<8 x i8>{{.*}}[[V1:%.*]], <8 x i8>{{.*}}[[V2:%.*]]) @@ -2902,7 +2962,7 @@ uint16x4_t test_vrhadd_u16(uint16x4_t v1, uint16x4_t v2) { return vrhadd_u16(v1, v2); // CIR-LABEL: vrhadd_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhadd_u16(<4 x i16>{{.*}}[[V1:%.*]], <4 x i16>{{.*}}[[V2:%.*]]) @@ -2917,7 +2977,7 @@ uint32x2_t test_vrhadd_u32(uint32x2_t v1, uint32x2_t v2) { return vrhadd_u32(v1, v2); // CIR-LABEL: vrhadd_u32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhadd_u32(<2 x i32>{{.*}}[[V1:%.*]], <2 x i32>{{.*}}[[V2:%.*]]) @@ -2932,7 +2992,7 @@ int8x16_t test_vrhaddq_s8(int8x16_t v1, int8x16_t v2) { return vrhaddq_s8(v1, v2); // CIR-LABEL: vrhaddq_s8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhaddq_s8(<16 x i8>{{.*}}[[V1:%.*]], <16 x i8>{{.*}}[[V2:%.*]]) @@ -2944,7 +3004,7 @@ int16x8_t test_vrhaddq_s16(int16x8_t v1, int16x8_t v2) { return vrhaddq_s16(v1, v2); // CIR-LABEL: vrhaddq_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhaddq_s16(<8 x i16>{{.*}}[[V1:%.*]], <8 x i16>{{.*}}[[V2:%.*]]) @@ -2959,7 +3019,7 @@ int32x4_t test_vrhaddq_s32(int32x4_t v1, int32x4_t v2) { return vrhaddq_s32(v1, v2); // CIR-LABEL: vrhaddq_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhaddq_s32(<4 x i32>{{.*}}[[V1:%.*]], <4 x i32>{{.*}}[[V2:%.*]]) @@ -2974,7 +3034,7 @@ uint8x16_t test_vrhaddq_u8(uint8x16_t v1, uint8x16_t v2) { return vrhaddq_u8(v1, v2); // CIR-LABEL: vrhaddq_u8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhaddq_u8(<16 x i8>{{.*}}[[V1:%.*]], <16 x i8>{{.*}}[[V2:%.*]]) @@ -2986,7 +3046,7 @@ uint16x8_t test_vrhaddq_u16(uint16x8_t v1, uint16x8_t v2) { return vrhaddq_u16(v1, v2); // CIR-LABEL: vrhaddq_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhaddq_u16(<8 x i16>{{.*}}[[V1:%.*]], <8 x i16>{{.*}}[[V2:%.*]]) @@ -3001,7 +3061,7 @@ uint32x4_t test_vrhaddq_u32(uint32x4_t v1, uint32x4_t v2) { return vrhaddq_u32(v1, v2); // CIR-LABEL: vrhaddq_u32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urhadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrhaddq_u32(<4 x i32>{{.*}}[[V1:%.*]], <4 x i32>{{.*}}[[V2:%.*]]) @@ -3015,7 +3075,7 @@ uint32x4_t test_vrhaddq_u32(uint32x4_t v1, uint32x4_t v2) { int8x8_t test_vqadd_s8(int8x8_t a, int8x8_t b) { return vqadd_s8(a, b); // CIR-LABEL: vqadd_s8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM-LABEL: @test_vqadd_s8( @@ -3026,7 +3086,7 @@ int8x8_t test_vqadd_s8(int8x8_t a, int8x8_t b) { int16x4_t test_vqadd_s16(int16x4_t a, int16x4_t b) { return vqadd_s16(a, b); // CIR-LABEL: vqadd_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM-LABEL: @test_vqadd_s16( @@ -3040,7 +3100,7 @@ int8x8_t test_vqadd_s8(int8x8_t a, int8x8_t b) { int32x2_t test_vqadd_s32(int32x2_t a, int32x2_t b) { return vqadd_s32(a, b); // CIR-LABEL: vqadd_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM-LABEL: @test_vqadd_s32( @@ -3054,7 +3114,7 @@ int8x8_t test_vqadd_s8(int8x8_t a, int8x8_t b) { int64x1_t test_vqadd_s64(int64x1_t a, int64x1_t b) { return vqadd_s64(a, b); // CIR-LABEL: vqadd_s64 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM-LABEL: @test_vqadd_s64( @@ -3063,12 +3123,12 @@ int8x8_t test_vqadd_s8(int8x8_t a, int8x8_t b) { // LLVM: [[VQADD_V2_I:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqadd.v1i64(<1 x i64> %0, <1 x i64> %1) // LLVM: [[VQADD_V3_I:%.*]] = bitcast <1 x i64> [[VQADD_V2_I]] to <8 x i8> // LLVM: ret <1 x i64> [[VQADD_V2_I]] - } + } uint8x8_t test_vqadd_u8(uint8x8_t a, uint8x8_t b) { return vqadd_u8(a, b); // CIR-LABEL: vqadd_u8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM-LABEL: @test_vqadd_u8( @@ -3079,7 +3139,7 @@ int8x8_t test_vqadd_s8(int8x8_t a, int8x8_t b) { uint16x4_t test_vqadd_u16(uint16x4_t a, uint16x4_t b) { return vqadd_u16(a, b); // CIR-LABEL: vqadd_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM-LABEL: @test_vqadd_u16( @@ -3090,7 +3150,7 @@ int8x8_t test_vqadd_s8(int8x8_t a, int8x8_t b) { uint32x2_t test_vqadd_u32(uint32x2_t a, uint32x2_t b) { return vqadd_u32(a, b); // CIR-LABEL: vqadd_u32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM-LABEL: @test_vqadd_u32( @@ -3101,7 +3161,7 @@ int8x8_t test_vqadd_s8(int8x8_t a, int8x8_t b) { uint64x1_t test_vqadd_u64(uint64x1_t a, uint64x1_t b) { return vqadd_u64(a, b); // CIR-LABEL: vqadd_u64 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqadd" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.uqadd" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM-LABEL: @test_vqadd_u64( @@ -3409,7 +3469,7 @@ int8x16_t test_vshlq_s8(int8x16_t a, int8x16_t b) { return vshlq_s8(a, b); // CIR-LABEL: vshlq_s8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sshl" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sshl" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vshlq_s8(<16 x i8>{{.*}}[[A:%.*]], <16 x i8>{{.*}}[[B:%.*]]) @@ -3421,7 +3481,7 @@ int16x8_t test_vshlq_s16(int16x8_t a, int16x8_t b) { return vshlq_s16(a, b); // CIR-LABEL: vshlq_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sshl" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sshl" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vshlq_s16(<8 x i16>{{.*}}[[A:%.*]], <8 x i16>{{.*}}[[B:%.*]]) @@ -3436,7 +3496,7 @@ int32x4_t test_vshlq_s32(int32x4_t a, int32x4_t b) { return vshlq_s32(a, b); // CIR-LABEL: vshlq_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sshl" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sshl" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vshlq_s32(<4 x i32>{{.*}}[[A:%.*]], <4 x i32>{{.*}}[[B:%.*]]) @@ -3451,7 +3511,7 @@ int64x2_t test_vshlq_s64(int64x2_t a, int64x2_t b) { return vshlq_s64(a, b); // CIR-LABEL: vshlq_s64 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sshl" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sshl" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vshlq_s64(<2 x i64>{{.*}}[[A:%.*]], <2 x i64>{{.*}}[[B:%.*]]) @@ -3466,7 +3526,7 @@ uint8x16_t test_vshlq_u8(uint8x16_t a, int8x16_t b) { return vshlq_u8(a, b); // CIR-LABEL: vshlq_u8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.ushl" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.ushl" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vshlq_u8(<16 x i8>{{.*}}[[A:%.*]], <16 x i8>{{.*}}[[B:%.*]]) @@ -3478,7 +3538,7 @@ uint16x8_t test_vshlq_u16(uint16x8_t a, int16x8_t b) { return vshlq_u16(a, b); // CIR-LABEL: vshlq_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.ushl" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.ushl" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vshlq_u16(<8 x i16>{{.*}}[[A:%.*]], <8 x i16>{{.*}}[[B:%.*]]) @@ -3508,7 +3568,7 @@ uint64x2_t test_vshlq_u64(uint64x2_t a, int64x2_t b) { return vshlq_u64(a, b); // CIR-LABEL: vshlq_u64 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.ushl" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.ushl" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vshlq_u64(<2 x i64>{{.*}}[[A:%.*]], <2 x i64>{{.*}}[[B:%.*]]) @@ -4118,7 +4178,7 @@ int8x8_t test_vmin_s8(int8x8_t a, int8x8_t b) { // CIR-LABEL: vmin_s8 // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.smin" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector - + // LLVM: {{.*}}@test_vmin_s8(<8 x i8>{{.*}}[[A:%.*]], <8 x i8>{{.*}}[[B:%.*]]) // LLVM: [[VMIN_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.smin.v8i8(<8 x i8> [[A]], <8 x i8> [[B]]) // LLVM: ret <8 x i8> [[VMIN_I]] @@ -4818,7 +4878,7 @@ int16x4_t test_vqdmulh_s16(int16x4_t a, int16x4_t b) { return vqdmulh_s16(a, b); // CIR-LABEL: vqdmulh_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqdmulh" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqdmulh" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vqdmulh_s16(<4 x i16>{{.*}}[[A:%.*]], <4 x i16>{{.*}}[[B:%.*]]) @@ -4833,7 +4893,7 @@ int32x2_t test_vqdmulh_s32(int32x2_t a, int32x2_t b) { return vqdmulh_s32(a, b); // CIR-LABEL: vqdmulh_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqdmulh" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqdmulh" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vqdmulh_s32(<2 x i32>{{.*}}[[A:%.*]], <2 x i32>{{.*}}[[B:%.*]]) @@ -4848,7 +4908,7 @@ int16x8_t test_vqdmulhq_s16(int16x8_t a, int16x8_t b) { return vqdmulhq_s16(a, b); // CIR-LABEL: vqdmulhq_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqdmulh" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqdmulh" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vqdmulhq_s16(<8 x i16>{{.*}}[[A:%.*]], <8 x i16>{{.*}}[[B:%.*]]) @@ -4908,7 +4968,7 @@ int16x8_t test_vqrdmulhq_s16(int16x8_t a, int16x8_t b) { return vqrdmulhq_s16(a, b); // CIR-LABEL: vqrdmulhq_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqrdmulh" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqrdmulh" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vqrdmulhq_s16(<8 x i16>{{.*}}[[A:%.*]], <8 x i16>{{.*}}[[B:%.*]]) @@ -4966,9 +5026,9 @@ int8x8_t test_vshl_n_s8(int8x8_t a) { return vshl_n_s8(a, 3); // CIR-LABEL: @test_vshl_n_s8 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, // CIR-SAME: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i]> - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshl_n_s8(<8 x i8>{{.*}}[[A:%.*]]) // LLVM: [[VSHL_N:%.*]] = shl <8 x i8> [[A]], @@ -4980,15 +5040,15 @@ int16x4_t test_vshl_n_s16(int16x4_t a) { return vshl_n_s16(a, 3); // CIR-LABEL: @test_vshl_n_s16 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, // CIR-SAME: #cir.int<3> : !s16i]> - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshl_n_s16(<4 x i16>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8> // LLVM: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16> // LLVM: [[VSHL_N:%.*]] = shl <4 x i16> [[TMP1]], - // LLVM: ret <4 x i16> [[VSHL_N]] + // LLVM: ret <4 x i16> [[VSHL_N]] } int32x2_t test_vshl_n_s32(int32x2_t a) { @@ -4996,7 +5056,7 @@ int32x2_t test_vshl_n_s32(int32x2_t a) { // CIR-LABEL: @test_vshl_n_s32 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s32i, #cir.int<3> : !s32i]> - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshl_n_s32(<2 x i32>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8> @@ -5010,9 +5070,9 @@ int32x2_t test_vshl_n_s32(int32x2_t a) { // NYI: ret <16 x i8> [[VSHL_N]] int8x16_t test_vshlq_n_s8(int8x16_t a) { return vshlq_n_s8(a, 3); - + // CIR-LABEL: @test_vshlq_n_s8 - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshlq_n_s8(<16 x i8>{{.*}}[[A:%.*]]) // LLVM: [[VSHL_N:%.*]] = shl <16 x i8> [[A]], @@ -5023,7 +5083,7 @@ int16x8_t test_vshlq_n_s16(int16x8_t a) { return vshlq_n_s16(a, 3); // CIR-LABEL: @test_vshlq_n_s16 - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshlq_n_s16(<8 x i16>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8> @@ -5037,10 +5097,10 @@ int32x4_t test_vshlq_n_s32(int32x4_t a) { return vshlq_n_s32(a, 3); // CIR-LABEL: @test_vshlq_n_s32 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s32i, #cir.int<3> : + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s32i, #cir.int<3> : // CIR-SAME: !s32i, #cir.int<3> : !s32i, #cir.int<3> : !s32i]> - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : - // CIR-SAME: !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : + // CIR-SAME: !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshlq_n_s32(<4 x i32>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8> @@ -5054,7 +5114,7 @@ int64x2_t test_vshlq_n_s64(int64x2_t a) { // CIR-LABEL: @test_vshlq_n_s64 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s64i, #cir.int<3> : !s64i]> - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, [[AMT]] : // CIR-SAME: !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshlq_n_s64(<2 x i64>{{.*}}[[A:%.*]]) @@ -5068,8 +5128,8 @@ uint8x8_t test_vshl_n_u8(uint8x8_t a) { return vshl_n_u8(a, 3); // CIR-LABEL: @test_vshl_n_u8 - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : - // CIR-SAME: !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : + // CIR-SAME: !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshl_n_u8(<8 x i8>{{.*}}[[A:%.*]]) // LLVM: [[VSHL_N:%.*]] = shl <8 x i8> [[A]], @@ -5080,8 +5140,8 @@ uint16x4_t test_vshl_n_u16(uint16x4_t a) { return vshl_n_u16(a, 3); // CIR-LABEL: @test_vshl_n_u16 - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : - // CIR-SAME: !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : + // CIR-SAME: !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshl_n_u16(<4 x i16>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8> @@ -5094,9 +5154,9 @@ uint32x2_t test_vshl_n_u32(uint32x2_t a) { return vshl_n_u32(a, 3); // CIR-LABEL: @test_vshl_n_u32 - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : - // CIR-SAME: !cir.vector) -> !cir.vector - + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : + // CIR-SAME: !cir.vector) -> !cir.vector + // LLVM: {{.*}}@test_vshl_n_u32(<2 x i32>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8> // LLVM: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] @@ -5108,8 +5168,8 @@ uint8x16_t test_vshlq_n_u8(uint8x16_t a) { return vshlq_n_u8(a, 3); // CIR-LABEL: @test_vshlq_n_u8 - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : - // CIR-SAME: !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : + // CIR-SAME: !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshlq_n_u8(<16 x i8>{{.*}}[[A:%.*]]) // LLVM: [[VSHL_N:%.*]] = shl <16 x i8> [[A]], , {{.*}} : - // CIR-SAME: !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : + // CIR-SAME: !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshlq_n_u16(<8 x i16>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8> @@ -5135,8 +5195,8 @@ uint32x4_t test_vshlq_n_u32(uint32x4_t a) { return vshlq_n_u32(a, 3); // CIR-LABEL: @test_vshlq_n_u32 - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : - // CIR-SAME: !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : + // CIR-SAME: !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshlq_n_u32(<4 x i32>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8> @@ -5149,8 +5209,8 @@ uint64x2_t test_vshlq_n_u64(uint64x2_t a) { return vshlq_n_u64(a, 3); // CIR-LABEL: @test_vshlq_n_u64 - // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : - // CIR-SAME: !cir.vector) -> !cir.vector + // CIR: {{.*}} = cir.shift(left, {{.*}} : !cir.vector, {{.*}} : + // CIR-SAME: !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshlq_n_u64(<2 x i64>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8> @@ -5263,7 +5323,7 @@ int32x4_t test_vshrq_n_s32(int32x4_t a) { } // Vector lashr/ashr are undefined when the shift amount is equal to the vector -// element size. Thus in code gen, for singed input, we make the shift amount +// element size. Thus in code gen, for singed input, we make the shift amount // one less than the vector element size. int32x4_t test_vshrq_n_s32_32(int32x4_t a) { return vshrq_n_s32(a, 32); @@ -5328,8 +5388,8 @@ uint16x4_t test_vshr_n_u16_16(uint16x4_t a) { return vshr_n_u16(a, 16); // CIR-LABEL: vshr_n_u16 - // CIR: {{%.*}} = cir.const #cir.int<16> : !s32i - // CIR: {{%.*}} = cir.const #cir.zero : !cir.vector + // CIR: {{%.*}} = cir.const #cir.int<16> : !s32i + // CIR: {{%.*}} = cir.const #cir.zero : !cir.vector // CIR-NOT: cir.shift // LLVM: {{.*}}test_vshr_n_u16_16(<4 x i16>{{.*}}[[A:%.*]]) @@ -5583,7 +5643,7 @@ int8x8_t test_vrshr_n_s8(int8x8_t a) { // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s8i, #cir.int<-3> : !s8i, // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshr_n_s8(<8 x i8>{{.*}}[[A:%.*]]) @@ -5598,7 +5658,7 @@ uint8x8_t test_vrshr_n_u8(uint8x8_t a) { // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s8i, #cir.int<-3> : !s8i, // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshr_n_u8(<8 x i8>{{.*}}[[A:%.*]]) @@ -5612,7 +5672,7 @@ int16x4_t test_vrshr_n_s16(int16x4_t a) { // CIR-LABEL: vrshr_n_s16 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s16i, #cir.int<-3> : !s16i, // CIR-SAME: #cir.int<-3> : !s16i, #cir.int<-3> : !s16i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshr_n_s16(<4 x i16>{{.*}}[[A:%.*]]) @@ -5628,7 +5688,7 @@ uint16x4_t test_vrshr_n_u16(uint16x4_t a) { // CIR-LABEL: vrshr_n_u16 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s16i, #cir.int<-3> : !s16i, // CIR-SAME: #cir.int<-3> : !s16i, #cir.int<-3> : !s16i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshr_n_u16(<4 x i16>{{.*}}[[A:%.*]]) @@ -5643,7 +5703,7 @@ int32x2_t test_vrshr_n_s32(int32x2_t a) { // CIR-LABEL: vrshr_n_s32 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s32i, #cir.int<-3> : !s32i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshr_n_s32(<2 x i32>{{.*}}[[A:%.*]]) @@ -5658,7 +5718,7 @@ uint32x2_t test_vrshr_n_u32(uint32x2_t a) { // CIR-LABEL: vrshr_n_u32 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s32i, #cir.int<-3> : !s32i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshr_n_u32(<2 x i32>{{.*}}[[A:%.*]]) @@ -5673,7 +5733,7 @@ int64x1_t test_vrshr_n_s64(int64x1_t a) { // CIR-LABEL: vrshr_n_s64 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s64i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshr_n_s64(<1 x i64>{{.*}}[[A:%.*]]) @@ -5688,7 +5748,7 @@ uint64x1_t test_vrshr_n_u64(uint64x1_t a) { // CIR-LABEL: vrshr_n_u64 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s64i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshr_n_u64(<1 x i64>{{.*}}[[A:%.*]]) @@ -5706,11 +5766,11 @@ int8x16_t test_vrshrq_n_s8(int8x16_t a) { // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshrq_n_s8(<16 x i8>{{.*}}[[A:%.*]]) - // LLVM: [[VRSHR_N:%.*]] = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> [[A]], + // LLVM: [[VRSHR_N:%.*]] = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> [[A]], // LLVM-SAME: <16 x i8> ) // LLVM: ret <16 x i8> [[VRSHR_N]] } @@ -5723,11 +5783,11 @@ uint8x16_t test_vrshrq_n_u8(uint8x16_t a) { // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, // CIR-SAME: #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i, #cir.int<-3> : !s8i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshrq_n_u8(<16 x i8>{{.*}}[[A:%.*]]) - // LLVM: [[VRSHR_N:%.*]] = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> [[A]], + // LLVM: [[VRSHR_N:%.*]] = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> [[A]], // LLVM-SAME: <16 x i8> ) // LLVM: ret <16 x i8> [[VRSHR_N]] } @@ -5738,7 +5798,7 @@ int16x8_t test_vrshrq_n_s16(int16x8_t a) { // CIR-LABEL: vrshrq_n_s16 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s16i, #cir.int<-3> : !s16i, #cir.int<-3> : !s16i, #cir.int<-3> : !s16i, // CIR-SAME: #cir.int<-3> : !s16i, #cir.int<-3> : !s16i, #cir.int<-3> : !s16i, #cir.int<-3> : !s16i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshrq_n_s16(<8 x i16>{{.*}}[[A:%.*]]) @@ -5754,7 +5814,7 @@ uint16x8_t test_vrshrq_n_u16(uint16x8_t a) { // CIR-LABEL: vrshrq_n_u16 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s16i, #cir.int<-3> : !s16i, #cir.int<-3> : !s16i, #cir.int<-3> : !s16i, // CIR-SAME: #cir.int<-3> : !s16i, #cir.int<-3> : !s16i, #cir.int<-3> : !s16i, #cir.int<-3> : !s16i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshrq_n_u16(<8 x i16>{{.*}}[[A:%.*]]) @@ -5769,7 +5829,7 @@ int32x4_t test_vrshrq_n_s32(int32x4_t a) { // CIR-LABEL: vrshrq_n_s32 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s32i, #cir.int<-3> : !s32i, #cir.int<-3> : !s32i, #cir.int<-3> : !s32i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshrq_n_s32(<4 x i32>{{.*}}[[A:%.*]]) @@ -5783,9 +5843,9 @@ uint32x4_t test_vrshrq_n_u32(uint32x4_t a) { return vrshrq_n_u32(a, 3); // CIR-LABEL: vrshrq_n_u32 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s32i, #cir.int<-3> : !s32i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s32i, #cir.int<-3> : !s32i, // CIR-SAME: #cir.int<-3> : !s32i, #cir.int<-3> : !s32i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshrq_n_u32(<4 x i32>{{.*}}[[A:%.*]]) @@ -5800,7 +5860,7 @@ int64x2_t test_vrshrq_n_s64(int64x2_t a) { // CIR-LABEL: vrshrq_n_s64 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s64i, #cir.int<-3> : !s64i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.srshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshrq_n_s64(<2 x i64>{{.*}}[[A:%.*]]) @@ -5815,7 +5875,7 @@ uint64x2_t test_vrshrq_n_u64(uint64x2_t a) { // CIR-LABEL: vrshrq_n_u64 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<-3> : !s64i, #cir.int<-3> : !s64i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.urshl" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vrshrq_n_u64(<2 x i64>{{.*}}[[A:%.*]]) @@ -6329,9 +6389,9 @@ uint8x8_t test_vqshlu_n_s8(int8x8_t a) { return vqshlu_n_s8(a, 3); // CIR-LABEL: vqshlu_n_s8 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, // CIR: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vqshlu_n_s8(<8 x i8>{{.*}}[[A:%.*]]) @@ -6343,9 +6403,9 @@ uint16x4_t test_vqshlu_n_s16(int16x4_t a) { return vqshlu_n_s16(a, 3); // CIR-LABEL: vqshlu_n_s16 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, // CIR-SAME:#cir.int<3> : !s16i, #cir.int<3> : !s16i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vqshlu_n_s16(<4 x i16>{{.*}}[[A:%.*]]) @@ -6360,7 +6420,7 @@ uint32x2_t test_vqshlu_n_s32(int32x2_t a) { // CIR-LABEL: vqshlu_n_s32 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s32i, #cir.int<3> : !s32i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vqshlu_n_s32(<2 x i32>{{.*}}[[A:%.*]]) @@ -6373,15 +6433,15 @@ uint8x16_t test_vqshluq_n_s8(int8x16_t a) { return vqshluq_n_s8(a, 3); // CIR-LABEL: vqshluq_n_s8 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, - // CIR-SAME: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, + // CIR-SAME: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, // CIR-SAME: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, // CIR-SAME: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vqshluq_n_s8(<16 x i8>{{.*}}[[A:%.*]]) - // LLVM: [[VQSHLUQ_N:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8> [[A]], + // LLVM: [[VQSHLUQ_N:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8> [[A]], // LLVM-SAME: <16 x i8> ) // LLVM: ret <16 x i8> [[VQSHLUQ_N]] } @@ -6390,16 +6450,16 @@ uint16x8_t test_vqshluq_n_s16(int16x8_t a) { return vqshluq_n_s16(a, 3); // CIR-LABEL: vqshluq_n_s16 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, - // CIR-SAME: #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, + // CIR-SAME: #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, // CIR-SAME: #cir.int<3> : !s16i, #cir.int<3> : !s16i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vqshluq_n_s16(<8 x i16>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8> // LLVM: [[VQSHLUQ_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16> - // LLVM: [[VQSHLUQ_N1:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16> [[VQSHLUQ_N]], + // LLVM: [[VQSHLUQ_N1:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16> [[VQSHLUQ_N]], // LLVM-SAME: <8 x i16> ) // LLVM: ret <8 x i16> [[VQSHLUQ_N1]] } @@ -6408,15 +6468,15 @@ uint32x4_t test_vqshluq_n_s32(int32x4_t a) { return vqshluq_n_s32(a, 3); // CIR-LABEL: vqshluq_n_s32 - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s32i, #cir.int<3> : !s32i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s32i, #cir.int<3> : !s32i, // CIR-SAME: #cir.int<3> : !s32i, #cir.int<3> : !s32i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vqshluq_n_s32(<4 x i32>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8> // LLVM: [[VQSHLUQ_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32> - // LLVM: [[VQSHLUQ_N1:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32> [[VQSHLUQ_N]], + // LLVM: [[VQSHLUQ_N1:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32> [[VQSHLUQ_N]], // LLVM-SAME: <4 x i32> ) // LLVM: ret <4 x i32> [[VQSHLUQ_N1]] } @@ -6426,13 +6486,13 @@ uint64x2_t test_vqshluq_n_s64(int64x2_t a) { // CIR-LABEL: vqshluq_n_s64 // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s64i, #cir.int<3> : !s64i]> : !cir.vector - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqshlu" {{%.*}}, [[AMT]] : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vqshluq_n_s64(<2 x i64>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8> // LLVM: [[VQSHLUQ_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64> - // LLVM: [[VQSHLUQ_N1:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> [[VQSHLUQ_N]], + // LLVM: [[VQSHLUQ_N1:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> [[VQSHLUQ_N]], // LLVM-SAME: <2 x i64> ) // LLVM: ret <2 x i64> [[VQSHLUQ_N1]] } @@ -6442,7 +6502,7 @@ int8x8_t test_vshrn_n_s16(int16x8_t a) { // CIR-LABEL: vshrn_n_s16 // CIR: [[TGT:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, // CIR-SAME: #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i]> : !cir.vector // CIR: [[RES:%.*]] = cir.shift(right, [[TGT]] : !cir.vector, [[AMT]] : !cir.vector) -> !cir.vector // CIR: {{%.*}} = cir.cast(integral, [[RES]] : !cir.vector), !cir.vector @@ -6495,7 +6555,7 @@ uint8x8_t test_vshrn_n_u16(uint16x8_t a) { // CIR-LABEL: vshrn_n_u16 // CIR: [[TGT:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector - // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !u16i, #cir.int<3> : !u16i, #cir.int<3> : !u16i, + // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !u16i, #cir.int<3> : !u16i, #cir.int<3> : !u16i, // CIR-SAME: #cir.int<3> : !u16i, #cir.int<3> : !u16i, #cir.int<3> : !u16i, #cir.int<3> : !u16i, #cir.int<3> : !u16i]> : !cir.vector // CIR: [[RES:%.*]] = cir.shift(right, [[TGT]] : !cir.vector, [[AMT]] : !cir.vector) -> !cir.vector // CIR: {{%.*}} = cir.cast(integral, [[RES]] : !cir.vector), !cir.vector @@ -6687,7 +6747,7 @@ int32x2_t test_vrshrn_n_s64(int64x2_t a) { return vrshrn_n_s64(a, 19); // CIR-LABEL: vrshrn_n_s64 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.rshrn" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.rshrn" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !s32i) -> !cir.vector // LLVM: {{.*}}test_vrshrn_n_s64(<2 x i64>{{.*}}[[A:%.*]]) @@ -6701,7 +6761,7 @@ uint8x8_t test_vrshrn_n_u16(uint16x8_t a) { return vrshrn_n_u16(a, 3); // CIR-LABEL: vrshrn_n_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.rshrn" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.rshrn" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !s32i) -> !cir.vector // LLVM: {{.*}}test_vrshrn_n_u16(<8 x i16>{{.*}}[[A:%.*]]) @@ -6715,7 +6775,7 @@ uint16x4_t test_vrshrn_n_u32(uint32x4_t a) { return vrshrn_n_u32(a, 9); // CIR-LABEL: vrshrn_n_u32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.rshrn" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.rshrn" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !s32i) -> !cir.vector // LLVM: {{.*}}vrshrn_n_u32(<4 x i32>{{.*}}[[A:%.*]]) @@ -6729,7 +6789,7 @@ uint32x2_t test_vrshrn_n_u64(uint64x2_t a) { return vrshrn_n_u64(a, 19); // CIR-LABEL: vrshrn_n_u64 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.rshrn" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.rshrn" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !s32i) -> !cir.vector // LLVM: {{.*}}test_vrshrn_n_u64(<2 x i64>{{.*}}[[A:%.*]]) @@ -6804,10 +6864,10 @@ uint8x8_t test_vqrshrun_n_s16(int16x8_t a) { return vqrshrun_n_s16(a, 3); // CIR-LABEL: test_vqrshrun_n_s16 // CIR: [[INTRN_ARG1:%.*]] = cir.const #cir.int<3> : !s32i - // CIR: [[INTRN_ARG0:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector + // CIR: [[INTRN_ARG0:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqrshrun" [[INTRN_ARG0]], [[INTRN_ARG1]] : // CIR-SAME: (!cir.vector, !s32i) -> !cir.vector - + // LLVM-LABEL: @test_vqrshrun_n_s16( // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> {{%.*}} to <16 x i8> // LLVM: [[VQRSHRUN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16> @@ -6819,10 +6879,10 @@ uint16x4_t test_vqrshrun_n_s32(int32x4_t a) { return vqrshrun_n_s32(a, 9); // CIR-LABEL: test_vqrshrun_n_s32 // CIR: [[INTRN_ARG1:%.*]] = cir.const #cir.int<9> : !s32i - // CIR: [[INTRN_ARG0:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector + // CIR: [[INTRN_ARG0:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqrshrun" [[INTRN_ARG0]], [[INTRN_ARG1]] : // CIR-SAME: (!cir.vector, !s32i) -> !cir.vector - + // LLVM-LABEL: @test_vqrshrun_n_s32( // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> {{%.*}} to <16 x i8> // LLVM: [[VQRSHRUN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32> @@ -6834,10 +6894,10 @@ uint32x2_t test_vqrshrun_n_s64(int64x2_t a) { return vqrshrun_n_s64(a, 19); // CIR-LABEL: test_vqrshrun_n_s64 // CIR: [[INTRN_ARG1:%.*]] = cir.const #cir.int<19> : !s32i - // CIR: [[INTRN_ARG0:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector + // CIR: [[INTRN_ARG0:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.sqrshrun" [[INTRN_ARG0]], [[INTRN_ARG1]] : // CIR-SAME: (!cir.vector, !s32i) -> !cir.vector - + // LLVM-LABEL: @test_vqrshrun_n_s64( // LLVM: [[TMP0:%.*]] = bitcast <2 x i64> {{%.*}} to <16 x i8> // LLVM: [[VQRSHRUN_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64> @@ -7110,8 +7170,8 @@ int16x8_t test_vshll_n_s8(int8x8_t a) { // CIR: [[SHIFT_TGT:%.*]] = cir.cast(integral, {{%.*}} : !cir.vector), !cir.vector // CIR: [[SHIFT_AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, // CIR-SAME: #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i]> : !cir.vector - // CIR: {{%.*}} = cir.shift(left, [[SHIFT_TGT]] : !cir.vector, [[SHIFT_AMT]] : !cir.vector) -> !cir.vector - + // CIR: {{%.*}} = cir.shift(left, [[SHIFT_TGT]] : !cir.vector, [[SHIFT_AMT]] : !cir.vector) -> !cir.vector + // LLVM: {{.*}}@test_vshll_n_s8(<8 x i8>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = sext <8 x i8> [[A]] to <8 x i16> // LLVM: [[VSHLL_N:%.*]] = shl <8 x i16> [[TMP0]], @@ -7123,9 +7183,9 @@ int32x4_t test_vshll_n_s16(int16x4_t a) { // CIR-LABEL: vshll_n_s16 // CIR: [[SHIFT_TGT:%.*]] = cir.cast(integral, {{%.*}} : !cir.vector), !cir.vector - // CIR: [[SHIFT_AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<9> : !s32i, #cir.int<9> : !s32i, #cir.int<9> : + // CIR: [[SHIFT_AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<9> : !s32i, #cir.int<9> : !s32i, #cir.int<9> : // CIR-SAME: !s32i, #cir.int<9> : !s32i]> : !cir.vector - // CIR: {{%.*}} = cir.shift(left, [[SHIFT_TGT]] : !cir.vector, [[SHIFT_AMT]] : !cir.vector) -> !cir.vector + // CIR: {{%.*}} = cir.shift(left, [[SHIFT_TGT]] : !cir.vector, [[SHIFT_AMT]] : !cir.vector) -> !cir.vector // LLVM: {{.*}}@test_vshll_n_s16(<4 x i16>{{.*}}[[A:%.*]]) // LLVM: [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8> @@ -7170,7 +7230,7 @@ uint32x4_t test_vshll_n_u16(uint16x4_t a) { // CIR-LABEL: vshll_n_u16 // CIR: [[SHIFT_TGT:%.*]] = cir.cast(integral, {{%.*}} : !cir.vector), !cir.vector - // CIR: [[SHIFT_AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<9> : !u32i, #cir.int<9> : !u32i, + // CIR: [[SHIFT_AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<9> : !u32i, #cir.int<9> : !u32i, // CIR-SAME: #cir.int<9> : !u32i, #cir.int<9> : !u32i]> : !cir.vector // LLVM: {{.*}}@test_vshll_n_u16(<4 x i16>{{.*}}[[A:%.*]]) @@ -8777,7 +8837,7 @@ int16x8_t test_vmull_s8(int8x8_t a, int8x8_t b) { return vmull_s8(a, b); // CIR-LABEL: vmull_s8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.smull" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.smull" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vmull_s8(<8 x i8>{{.*}}[[A:%.*]], <8 x i8>{{.*}}[[B:%.*]]) @@ -8789,7 +8849,7 @@ int32x4_t test_vmull_s16(int16x4_t a, int16x4_t b) { return vmull_s16(a, b); // CIR-LABEL: vmull_s16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.smull" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.smull" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vmull_s16(<4 x i16>{{.*}}[[A:%.*]], <4 x i16>{{.*}}[[B:%.*]]) @@ -8803,7 +8863,7 @@ int64x2_t test_vmull_s32(int32x2_t a, int32x2_t b) { return vmull_s32(a, b); // CIR-LABEL: vmull_s32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.smull" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.smull" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vmull_s32(<2 x i32>{{.*}}[[A:%.*]], <2 x i32>{{.*}}[[B:%.*]]) @@ -8817,7 +8877,7 @@ uint16x8_t test_vmull_u8(uint8x8_t a, uint8x8_t b) { return vmull_u8(a, b); // CIR-LABEL: vmull_u8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.umull" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.umull" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vmull_u8(<8 x i8>{{.*}}[[A:%.*]], <8 x i8>{{.*}}[[B:%.*]]) @@ -8829,7 +8889,7 @@ uint32x4_t test_vmull_u16(uint16x4_t a, uint16x4_t b) { return vmull_u16(a, b); // CIR-LABEL: vmull_u16 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.umull" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.umull" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vmull_u16(<4 x i16>{{.*}}[[A:%.*]], <4 x i16>{{.*}}[[B:%.*]]) @@ -8843,7 +8903,7 @@ uint64x2_t test_vmull_u32(uint32x2_t a, uint32x2_t b) { return vmull_u32(a, b); // CIR-LABEL: vmull_u32 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.umull" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.umull" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vmull_u32(<2 x i32>{{.*}}[[A:%.*]], <2 x i32>{{.*}}[[B:%.*]]) @@ -9307,7 +9367,7 @@ poly16x8_t test_vmull_p8(poly8x8_t a, poly8x8_t b) { return vmull_p8(a, b); // CIR-LABEL: vmull_p8 - // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.pmull" {{%.*}}, {{%.*}} : + // CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.pmull" {{%.*}}, {{%.*}} : // CIR-SAME: (!cir.vector, !cir.vector) -> !cir.vector // LLVM: {{.*}}test_vmull_p8(<8 x i8>{{.*}}[[A:%.*]], <8 x i8>{{.*}}[[B:%.*]]) @@ -18380,8 +18440,8 @@ uint8x8_t test_vmovn_u16(uint16x8_t a) { return vmovn_u16(a); // CIR-LABEL: vmovn_u16 // CIR: [[ARG:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector - // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector - + // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector + // LLVM: {{.*}}@test_vmovn_u16(<8 x i16>{{.*}}[[A:%.*]]) // LLVM: [[VMOVN_1:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8> // LLVM: [[VMOVN_I:%.*]] = trunc <8 x i16> [[A]] to <8 x i8> @@ -18392,8 +18452,8 @@ uint16x4_t test_vmovn_u32(uint32x4_t a) { return vmovn_u32(a); // CIR-LABEL: vmovn_u32 // CIR: [[ARG:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector - // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector - + // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector + // LLVM: {{.*}}@test_vmovn_u32(<4 x i32>{{.*}}[[A:%.*]]) // LLVM: [[VMOVN_1:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8> // LLVM: [[VMOVN_I:%.*]] = trunc <4 x i32> [[A]] to <4 x i16> @@ -18404,8 +18464,8 @@ uint32x2_t test_vmovn_u64(uint64x2_t a) { return vmovn_u64(a); // CIR-LABEL: vmovn_u64 // CIR: [[ARG:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector - // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector - + // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector + // LLVM: {{.*}}@test_vmovn_u64(<2 x i64>{{.*}}[[A:%.*]]) // LLVM: [[VMOVN_1:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8> // LLVM: [[VMOVN_I:%.*]] = trunc <2 x i64> [[A]] to <2 x i32> @@ -18416,8 +18476,8 @@ int8x8_t test_vmovn_s16(int16x8_t a) { return vmovn_s16(a); // CIR-LABEL: vmovn_s16 // CIR: [[ARG:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector - // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector - + // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector + // LLVM: {{.*}}@test_vmovn_s16(<8 x i16>{{.*}}[[A:%.*]]) // LLVM: [[VMOVN_1:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8> // LLVM: [[VMOVN_I:%.*]] = trunc <8 x i16> [[A]] to <8 x i8> @@ -18428,8 +18488,8 @@ int16x4_t test_vmovn_s32(int32x4_t a) { return vmovn_s32(a); // CIR-LABEL: vmovn_s32 // CIR: [[ARG:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector - // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector - + // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector + // LLVM: {{.*}}@test_vmovn_s32(<4 x i32>{{.*}}[[A:%.*]]) // LLVM: [[VMOVN_1:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8> // LLVM: [[VMOVN_I:%.*]] = trunc <4 x i32> [[A]] to <4 x i16> @@ -18440,8 +18500,8 @@ int32x2_t test_vmovn_s64(int64x2_t a) { return vmovn_s64(a); // CIR-LABEL: vmovn_s64 // CIR: [[ARG:%.*]] = cir.cast(bitcast, {{%.*}} : !cir.vector), !cir.vector - // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector - + // CIR: {{%.*}} = cir.cast(integral, [[ARG]] : !cir.vector), !cir.vector + // LLVM: {{.*}}@test_vmovn_s64(<2 x i64>{{.*}}[[A:%.*]]) // LLVM: [[VMOVN_1:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8> // LLVM: [[VMOVN_I:%.*]] = trunc <2 x i64> [[A]] to <2 x i32>