================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits