https://github.com/albertbolt1 created https://github.com/llvm/llvm-project/pull/186406
[CIR][AArch64] Add support for NEON shift left builtins This PR adds CIR generation for the following AArch64 NEON builtins: __builtin_neon_vshld_n_s64 and __builtin_neon_vshld_n_u64 (constant shifts) extracted the constant value and use it directly for shift left added test cases in intrinsics.c by looking at the test cases present in https://github.com/llvm/llvm-project/blob/main/clang/test/CodeGen/AArch64/neon-shifts.c >From f8a37ee0140ed911706cd4084c022a9895da0181 Mon Sep 17 00:00:00 2001 From: albertbolt <[email protected]> Date: Fri, 13 Mar 2026 19:54:19 +0530 Subject: [PATCH 1/2] added scalar intrinsics and test cases --- .../lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp | 13 +++++++++++ clang/test/CodeGen/AArch64/neon/intrinsics.c | 22 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp index 5534e69b5f8bc..574959cfac900 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp @@ -2785,8 +2785,21 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned builtinID, const CallExpr *expr, case NEON::BI__builtin_neon_vrshrd_n_s64: case NEON::BI__builtin_neon_vrsrad_n_u64: case NEON::BI__builtin_neon_vrsrad_n_s64: + case NEON::BI__builtin_neon_vshld_s64: + case NEON::BI__builtin_neon_vshld_u64: + { + auto loc = getLoc(expr->getExprLoc()); + return builder.createShiftLeft(loc,ops[0],ops[1]); + } case NEON::BI__builtin_neon_vshld_n_s64: case NEON::BI__builtin_neon_vshld_n_u64: + { + auto loc = getLoc(expr->getExprLoc()); + std::optional<llvm::APSInt> amt = + expr->getArg(1)->getIntegerConstantExpr(getContext()); + assert(amt && "Expected argument to be a constant"); + return builder.createShiftLeft(loc, ops[0], amt->getZExtValue()); + } case NEON::BI__builtin_neon_vshrd_n_s64: case NEON::BI__builtin_neon_vshrd_n_u64: case NEON::BI__builtin_neon_vsrad_n_s64: diff --git a/clang/test/CodeGen/AArch64/neon/intrinsics.c b/clang/test/CodeGen/AArch64/neon/intrinsics.c index b740c3b5b2310..38fcb76ba9ce6 100644 --- a/clang/test/CodeGen/AArch64/neon/intrinsics.c +++ b/clang/test/CodeGen/AArch64/neon/intrinsics.c @@ -936,3 +936,25 @@ uint32x4_t test_vabaq_u32(uint32x4_t v1, uint32x4_t v2, uint32x4_t v3) { // LLVM-NEXT: ret <4 x i32> [[ADD_I]] return vabaq_u32(v1, v2, v3); } + +// LLVM-LABEL: @test_vshld_n_s64 +// CIR-LABEL: @test_vshld_n_s64 +int64_t test_vshld_n_s64(int64_t a) { + // CIR: cir.shift(left, {{.*}}) + + // LLVM-SAME: i64 noundef [[A:%.*]]) + // LLVM: [[SHL_N:%.*]] = shl i64 [[A]], 1 + // LLVM: ret i64 [[SHL_N]] + return (int64_t)vshld_n_s64(a, 1); +} + +// LLVM-LABEL: @test_vshld_n_u64 +// CIR-LABEL: @test_vshld_n_u64 +int64_t test_vshld_n_u64(int64_t a) { + // CIR: cir.shift(left, {{.*}}) + + // LLVM-SAME: i64 noundef [[A:%.*]]) + // LLVM: [[SHL_N:%.*]] = shl i64 [[A]], 1 + // LLVM: ret i64 [[SHL_N]] + return (int64_t)vshld_n_u64(a, 1); +} >From f32cbeaea2bfda6a1d41a440eaef352e6b968748 Mon Sep 17 00:00:00 2001 From: albertbolt <[email protected]> Date: Fri, 13 Mar 2026 20:04:55 +0530 Subject: [PATCH 2/2] removed unnecessary ones --- clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp index 574959cfac900..6bd95cf755869 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp @@ -2785,12 +2785,6 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned builtinID, const CallExpr *expr, case NEON::BI__builtin_neon_vrshrd_n_s64: case NEON::BI__builtin_neon_vrsrad_n_u64: case NEON::BI__builtin_neon_vrsrad_n_s64: - case NEON::BI__builtin_neon_vshld_s64: - case NEON::BI__builtin_neon_vshld_u64: - { - auto loc = getLoc(expr->getExprLoc()); - return builder.createShiftLeft(loc,ops[0],ops[1]); - } case NEON::BI__builtin_neon_vshld_n_s64: case NEON::BI__builtin_neon_vshld_n_u64: { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
