================ @@ -2446,37 +2376,41 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { case Builtin::BI__builtin_hlsl_any: { if (SemaRef.checkArgCount(TheCall, 1)) return true; + if (CheckAnyScalarOrVector(&SemaRef, TheCall, 0)) + return true; break; } case Builtin::BI__builtin_hlsl_asdouble: { if (SemaRef.checkArgCount(TheCall, 2)) return true; - if (CheckUnsignedIntRepresentation(&SemaRef, TheCall)) + if (CheckScalarOrVector(&SemaRef, TheCall, SemaRef.Context.UnsignedIntTy, + 0)) // only check for uint + return true; + if (CheckScalarOrVector(&SemaRef, TheCall, SemaRef.Context.UnsignedIntTy, + 1)) // only check for uint + return true; + if (CheckAllArgsHaveSameType(&SemaRef, TheCall)) return true; SetElementTypeAsReturnType(&SemaRef, TheCall, getASTContext().DoubleTy); break; } case Builtin::BI__builtin_hlsl_elementwise_clamp: { - if (SemaRef.checkArgCount(TheCall, 3)) - return true; - if (CheckAnyScalarOrVector(&SemaRef, TheCall, 0) || - CheckAllArgsHaveSameType(&SemaRef, TheCall)) - return true; if (SemaRef.BuiltinElementwiseTernaryMath( TheCall, /*ArgTyRestr=*/ - TheCall->getArg(0)->getType()->hasFloatingRepresentation() - ? Sema::EltwiseBuiltinArgTyRestriction::FloatTy - : Sema::EltwiseBuiltinArgTyRestriction::None)) + Sema::EltwiseBuiltinArgTyRestriction::None)) return true; break; } case Builtin::BI__builtin_hlsl_cross: { if (SemaRef.checkArgCount(TheCall, 2)) return true; - if (CheckVectorElementCallArgs(&SemaRef, TheCall)) + + // ensure args are a half3 or float3 ---------------- farzonl wrote:
This comment doesn not seem to match what `CheckAllArgTypesAreCorrect` does since there is no specific vec3 checking. Now that I am seeing this. I don't think cross product should be handled in sema since we know it is only valid for vec3s we should probably just create a typed builtin like so ``` def HLSLCrossHalf: Builtin { let Spellings = ["__builtin_hlsl_crossf16"]; let Attributes = [NoThrow, Const]; let Prototype = "_ExtVector<3, _Float16>(_ExtVector<3, _Float16>, _ExtVector<3, _Float16>)"; } } def HLSLCrossFloat: Builtin { let Spellings = ["__builtin_hlsl_crossf]; let Attributes = [NoThrow, Const]; let Prototype = "_ExtVector<3, float>(_ExtVector<3, float>, _ExtVector<3, float>)"; } ``` or ``` class HLSLFPMathTemplate : Template<["_Float16", "float"], ["f16", "f"]>; def HLSLCross : Builtin, HLSLFPMathTemplate { let Spellings = ["__builtin_hlsl_cross"]; let Attributes = [FunctionWithBuiltinPrefix, NoThrow,Const]; let Prototype = "_ExtVector<3, T>(_ExtVector<3, T>, _ExtVector<3, T>)"; } } ``` https://github.com/llvm/llvm-project/pull/138429 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits