[clang] [Clang] Add `__builtin_reduce_[in|any]_order_fadd` for floating-point reductions (PR #176160)
Sander de Smalen via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 19 05:54:26 PST 2026
================
@@ -4197,6 +4197,29 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
case Builtin::BI__builtin_reduce_minimum:
return RValue::get(emitBuiltinWithOneOverloadedType<1>(
*this, E, Intrinsic::vector_reduce_fminimum, "rdx.minimum"));
+ case Builtin::BI__builtin_reduce_fadd:
+ case Builtin::BI__builtin_ordered_reduce_fadd: {
+ llvm::Value *Vector = EmitScalarExpr(E->getArg(0));
+ llvm::Type *ScalarTy = Vector->getType()->getScalarType();
+ llvm::Value *StartValue = nullptr;
+ if (E->getNumArgs() == 2)
----------------
sdesmalen-arm wrote:
My suggestion would be to always require a 'start' value for the in_order builtin, to discourage users writing something like:
```
float sum = 0.0f;
for(int i=0; i<n; ++i)
sum += __builtin_reduce_in_order_fadd(vec[i]);
```
where the scalar fadd is performed in a different order.
https://github.com/llvm/llvm-project/pull/176160
More information about the cfe-commits
mailing list