================
@@ -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

Reply via email to