[clang] [clang] Enable constexpr handling for __builtin_elementwise_fma (PR #152919)

Matt Arsenault via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 19 08:39:29 PDT 2025


================
@@ -11658,6 +11658,29 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
 
     return Success(APValue(ResultElements.data(), ResultElements.size()), E);
   }
+  case Builtin::BI__builtin_elementwise_fma: {
+    APValue SourceX, SourceY, SourceZ;
+    if (!EvaluateAsRValue(Info, E->getArg(0), SourceX) ||
+        !EvaluateAsRValue(Info, E->getArg(1), SourceY) ||
+        !EvaluateAsRValue(Info, E->getArg(2), SourceZ))
+      return false;
+
+    unsigned SourceLen = SourceX.getVectorLength();
+    SmallVector<APValue> ResultElements;
+    ResultElements.reserve(SourceLen);
+    llvm::RoundingMode RM = getActiveRoundingMode(getEvalInfo(), E);
+
+    for (unsigned EltNum = 0; EltNum < SourceLen; ++EltNum) {
+      APFloat X = SourceX.getVectorElt(EltNum).getFloat();
+      APFloat Y = SourceY.getVectorElt(EltNum).getFloat();
+      APFloat Z = SourceZ.getVectorElt(EltNum).getFloat();
----------------
arsenm wrote:

Can these be const&? 

https://github.com/llvm/llvm-project/pull/152919


More information about the cfe-commits mailing list