[clang] [llvm] [hlsl][dxil][spirv] Add `fma` function (PR #185304)

Farzon Lotfi via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 9 21:54:12 PDT 2026


================
@@ -1028,6 +979,22 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID,
         retType, CGM.getHLSLRuntime().getIsNaNIntrinsic(),
         ArrayRef<Value *>{Op0}, nullptr, "hlsl.isnan");
   }
+  case Builtin::BI__builtin_hlsl_elementwise_fma: {
+    Value *M = EmitScalarExpr(E->getArg(0));
+    Value *A = EmitScalarExpr(E->getArg(1));
+    Value *B = EmitScalarExpr(E->getArg(2));
+    if (CGM.getTarget().getTriple().isDXIL())
+      return Builder.CreateIntrinsic(M->getType(), Intrinsic::dx_fma,
+                                     ArrayRef<Value *>{M, A, B}, nullptr,
+                                     "dx.fma");
+
+    if (CGM.getTarget().getTriple().isSPIRV())
+      return Builder.CreateIntrinsic(M->getType(), Intrinsic::spv_fma,
+                                     ArrayRef<Value *>{M, A, B}, nullptr,
+                                     "spv.fma");
----------------
farzonl wrote:

use  macro should look something like this 
```cpp
return Builder.CreateIntrinsic(M->getType(),CGM.getHLSLRuntime().getFmaIntrinsic(),
                                     ArrayRef<Value *>{M, A, B}, nullptr,
                                     "hlsl.fma");
```


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


More information about the llvm-commits mailing list