================
@@ -3930,6 +3818,36 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned 
BuiltinID, CallExpr *TheCall) {
     TheCall->setType(ArgTyA);
     break;
   }
+  case Builtin::BI__builtin_hlsl_elementwise_fma: {
+    if (SemaRef.checkArgCount(TheCall, 3) ||
+        CheckAllArgsHaveSameType(&SemaRef, TheCall)) {
+      return true;
+    }
+    const llvm::Triple &TT = getASTContext().getTargetInfo().getTriple();
+    // This check is here because emitting a general error for both backends
+    // here (like for exmaple "Accepts only floating points") won't end really
+    // good. after that we still need to check if the types satisfy
+    // backends constrains, so we better check everything now rather than
+    // confusing user with 2 different error messages
+
+    if (TT.isSPIRV()) {
+      // SPIR-V accept any float (besides matrices)
+      if (CheckAllArgTypesAreCorrect(&SemaRef, TheCall,
+                                     CheckFloatOrHalfOrDoubleRepresentation))
+        return true;
+    } else if (TT.isDXIL()) {
+      // while DirectX accepts only double
+      if (CheckAllArgTypesAreCorrect(&SemaRef, TheCall,
+                                     CheckAnyDoubleRepresentation))
+        return true;
+    }
----------------
NeKon69 wrote:

I didn't quite understand what you mean here.. Do i just make it any float 
(including matrices) for SPIRV and then only doubles for DXIL? or is there 
supposed to be some condition to support SPIRV's doubles?

https://github.com/llvm/llvm-project/pull/185304
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to