================
@@ -2229,12 +2229,28 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned
builtinID, const CallExpr *expr,
case NEON::BI__builtin_neon_vqshld_n_s64:
case NEON::BI__builtin_neon_vrshrd_n_u64:
case NEON::BI__builtin_neon_vrshrd_n_s64:
- case NEON::BI__builtin_neon_vrsrad_n_u64:
- case NEON::BI__builtin_neon_vrsrad_n_s64:
cgm.errorNYI(expr->getSourceRange(),
std::string("unimplemented AArch64 builtin call: ") +
getContext().BuiltinInfo.getName(builtinID));
return mlir::Value{};
+ case NEON::BI__builtin_neon_vrsrad_n_u64:
+ case NEON::BI__builtin_neon_vrsrad_n_s64: {
+ cir::IntType IntType = builtinID == NEON::BI__builtin_neon_vrsrad_n_u64
+ ? builder.getUInt64Ty()
+ : builder.getSInt64Ty();
+ ops[1] = builder.createBitcast(ops[1], IntType);
+ ops[2] = builder.createNeg(ops[2]);
+ const StringRef Intrinsic = builtinID ==
NEON::BI__builtin_neon_vrsrad_n_u64
+ ? "aarch64.neon.urshl"
+ : "aarch64.neon.srshl";
+
+ llvm::SmallVector<mlir::Value, 2> args = {
+ ops[1], builder.createIntCast(ops[2], builder.getSInt64Ty())};
+ ops[1] = emitNeonCall(cgm, builder, {IntType, builder.getSInt64Ty()}, args,
+ Intrinsic, IntType, getLoc(expr->getExprLoc()));
+ return builder.createAdd(getLoc(expr->getExprLoc()), ops[0],
+ builder.createBitcast(ops[1], IntType));
----------------
banach-space wrote:
```suggestion
return builder.createAdd(loc, ops[0], builder.createBitcast(ops[1],
IntType));
```
https://github.com/llvm/llvm-project/pull/191129
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits