[clang] [HLSL] Implement the 'and' HLSL function (PR #127098)
Chris B via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 17 11:47:51 PST 2025
================
@@ -2245,6 +2245,36 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
break;
}
+ case Builtin::BI__builtin_hlsl_and: {
+ if (SemaRef.checkArgCount(TheCall, 2))
+ return true;
+ if (CheckVectorElementCallArgs(&SemaRef, TheCall))
+ return true;
+
+ // CheckVectorElementCallArgs(...) guarantees both args are the same type.
+ assert(TheCall->getArg(0)->getType() == TheCall->getArg(1)->getType() &&
+ "Both args must be of the same type");
+
+ // check that the arguments are bools or, if vectors,
+ // vectors of bools
+ QualType ArgTy = TheCall->getArg(0)->getType();
+ if (const auto *VecTy = ArgTy->getAs<VectorType>()) {
+ ArgTy = VecTy->getElementType();
+ }
+ if (!getASTContext().hasSameUnqualifiedType(ArgTy,
----------------
llvm-beanz wrote:
What do you mean "diagnostic per overload"? These are builtin functions, they don't have any overloads.
The diagnostics we get for cross are not helpful. They always instruct the user they must use `float` vectors even though `cross` supports other kinds of vectors.
I feel like you're trying to fit something into a pattern so hard that you're ignoring that it has an adverse impact on usability.
https://github.com/llvm/llvm-project/pull/127098
More information about the cfe-commits
mailing list