================
@@ -2786,9 +2855,28 @@ 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_vshrd_n_s64:
- case NEON::BI__builtin_neon_vshrd_n_u64:
+ case NEON::BI__builtin_neon_vshld_n_u64: {
+ cgm.errorNYI(expr->getSourceRange(),
+ std::string("unimplemented AArch64 builtin call: ") +
+ getContext().BuiltinInfo.getName(builtinID));
+ return mlir::Value{};
+ }
+ case NEON::BI__builtin_neon_vshrd_n_s64: {
+ std::optional<llvm::APSInt> amt =
+ expr->getArg(1)->getIntegerConstantExpr(getContext());
+ assert(amt && "Expected argument to be a constant");
+ uint64_t bits = std::min(static_cast<uint64_t>(63), amt->getZExtValue());
+ return builder.createShiftRight(loc, ops[0], bits);
+ }
+ case NEON::BI__builtin_neon_vshrd_n_u64: {
+ std::optional<llvm::APSInt> amt =
+ expr->getArg(1)->getIntegerConstantExpr(getContext());
+ assert(amt && "Expected argument to be a constant");
+ uint64_t shiftAmt = amt->getZExtValue();
+ if (shiftAmt == 64)
----------------
banach-space wrote:
```suggestion
// Right-shifting an unsigned value by its size yields 0.
if (shiftAmt == 64)
```
https://github.com/llvm/llvm-project/pull/186693
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits