https://github.com/albertbolt1 updated 
https://github.com/llvm/llvm-project/pull/186406

>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/3] 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/3] 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:
   {

>From c4762db90d79c1232c51d96c430e1e5d7681e25d Mon Sep 17 00:00:00 2001
From: albertbolt <[email protected]>
Date: Fri, 13 Mar 2026 21:11:07 +0530
Subject: [PATCH 3/3] cleaned

---
 clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp 
b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp
index 6bd95cf755869..affa2597a54bd 100644
--- a/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp
@@ -2786,8 +2786,7 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned 
builtinID, const CallExpr *expr,
   case NEON::BI__builtin_neon_vrsrad_n_u64:
   case NEON::BI__builtin_neon_vrsrad_n_s64:
   case NEON::BI__builtin_neon_vshld_n_s64:
-  case NEON::BI__builtin_neon_vshld_n_u64:
-  {
+  case NEON::BI__builtin_neon_vshld_n_u64:{
     auto loc = getLoc(expr->getExprLoc());
     std::optional<llvm::APSInt> amt =
         expr->getArg(1)->getIntegerConstantExpr(getContext());

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to