================
@@ -1053,8 +1054,17 @@ static mlir::Value emitCommonNeonBuiltinExpr(
   case NEON::BI__builtin_neon_vsha512h2q_u64:
   case NEON::BI__builtin_neon_vsha512su0q_u64:
   case NEON::BI__builtin_neon_vsha512su1q_u64:
+    cgf.cgm.errorNYI(expr->getSourceRange(),
+                     std::string("unimplemented AArch64 builtin call: ") +
+                         ctx.BuiltinInfo.getName(builtinID));
+    return mlir::Value{};
   case NEON::BI__builtin_neon_vshl_n_v:
-  case NEON::BI__builtin_neon_vshlq_n_v:
+  case NEON::BI__builtin_neon_vshlq_n_v: {
+    auto rhsScalar = cgf.getBuilder().createIntCast(ops[1], 
vTy.getElementType());
+    auto rhsVec = cir::VecSplatOp::create(cgf.getBuilder(),loc, vTy, 
rhsScalar);
+    auto lhsVec = cgf.getBuilder().createBitcast(ops[0], vTy);
+    return cgf.getBuilder().createShiftLeft(loc, lhsVec, rhsVec);
----------------
banach-space wrote:

It's obviously OK to diverge, especially when that improves the code, but 
please provide rationale in the summary. That will help reviewing :)

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

Reply via email to