[clang] [CIR][AArch64] Lower NEON vslid intrinsics (PR #199415)

Andrzej WarzyƄski via cfe-commits cfe-commits at lists.llvm.org
Sun May 24 12:33:48 PDT 2026


================
@@ -354,24 +354,21 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
   case NEON::BI__builtin_neon_vrecpxh_f16:
   case NEON::BI__builtin_neon_vrsqrteh_f16:
   case NEON::BI__builtin_neon_vrsqrtsh_f16:
-  case NEON::BI__builtin_neon_vmaxv_s8:
-  case NEON::BI__builtin_neon_vmaxvq_s8:
-  case NEON::BI__builtin_neon_vmaxv_s16:
-  case NEON::BI__builtin_neon_vmaxvq_s16:
-  case NEON::BI__builtin_neon_vmaxv_s32:
-  case NEON::BI__builtin_neon_vmaxvq_s32:
-  case NEON::BI__builtin_neon_vmaxv_u8:
-  case NEON::BI__builtin_neon_vmaxvq_u8:
-  case NEON::BI__builtin_neon_vmaxv_u16:
-  case NEON::BI__builtin_neon_vmaxvq_u16:
-  case NEON::BI__builtin_neon_vmaxv_u32:
-  case NEON::BI__builtin_neon_vmaxvq_u32:
-  case NEON::BI__builtin_neon_vmaxv_f32:
-  case NEON::BI__builtin_neon_vmaxvq_f32:
-  case NEON::BI__builtin_neon_vmaxvq_f64:
     return emitNeonCall(cgf.cgm, cgf.getBuilder(),
                         {cgf.convertType(expr->getArg(0)->getType())}, ops,
                         llvmIntrName, cgf.convertType(expr->getType()), loc);
+  case NEON::BI__builtin_neon_vslid_n_s64:
+  case NEON::BI__builtin_neon_vslid_n_u64: {
+    // The LLVM intrinsic is aarch64.neon.vsli.v1i64, so wrap the i64 inputs
+    // in <1 x i64> and unwrap the result back to i64.
+    mlir::Type scalarTy = cgf.convertType(expr->getArg(0)->getType());
+    cir::VectorType vecTy = cir::VectorType::get(scalarTy, 1);
+    llvm::SmallVector<mlir::Type> argTypes = {vecTy, vecTy, ops[2].getType()};
+    mlir::Value result = emitNeonCall(cgf.cgm, cgf.getBuilder(), argTypes, ops,
+                                      llvmIntrName, vecTy, loc);
+    return cgf.getBuilder().createBitcast(result,
+                                          cgf.convertType(expr->getType()));
----------------
banach-space wrote:

This one should go via `emitCommonNeonSISDBuiltinExpr` ;-) See also clang/include/clang/Basic/AArch64CodeGenUtils.h (search for e.g. `vslid_n_u64)

https://github.com/llvm/llvm-project/pull/199415


More information about the cfe-commits mailing list