https://github.com/joaosaffran updated https://github.com/llvm/llvm-project/pull/107292
>From f1ca0a6070aa34bcce92d76df3a2e897d44e5f9c Mon Sep 17 00:00:00 2001 From: Joao Saffran <jdereze...@microsoft.com> Date: Tue, 3 Sep 2024 19:06:22 +0000 Subject: [PATCH 1/2] Adding `asuint` implementation to hlsl --- clang/include/clang/Basic/Builtins.td | 6 +++ clang/lib/CodeGen/CGBuiltin.cpp | 17 +++++++ clang/lib/Headers/hlsl/hlsl_intrinsics.h | 38 ++++++++++----- clang/lib/Sema/SemaHLSL.cpp | 22 +++++++++ clang/test/CodeGenHLSL/builtins/asuint.hlsl | 53 +++++++++++++++++++++ 5 files changed, 125 insertions(+), 11 deletions(-) create mode 100644 clang/test/CodeGenHLSL/builtins/asuint.hlsl diff --git a/clang/include/clang/Basic/Builtins.td b/clang/include/clang/Basic/Builtins.td index 9e2a590f265ac8..38de1df11b7b5a 100644 --- a/clang/include/clang/Basic/Builtins.td +++ b/clang/include/clang/Basic/Builtins.td @@ -4745,6 +4745,12 @@ def HLSLRcp : LangBuiltin<"HLSL_LANG"> { let Prototype = "void(...)"; } +def HLSLAsUint : LangBuiltin<"HLSL_LANG"> { + let Spellings = ["__builtin_hlsl_elementwise_asuint"]; + let Attributes = [NoThrow, Const]; + let Prototype = "void(...)"; +} + def HLSLRSqrt : LangBuiltin<"HLSL_LANG"> { let Spellings = ["__builtin_hlsl_elementwise_rsqrt"]; let Attributes = [NoThrow, Const]; diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index e826c1c6fbbd23..da0cb6581761e5 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -27,9 +27,11 @@ #include "clang/AST/Decl.h" #include "clang/AST/OSLog.h" #include "clang/AST/OperationKinds.h" +#include "clang/Basic/Builtins.h" #include "clang/Basic/TargetBuiltins.h" #include "clang/Basic/TargetInfo.h" #include "clang/Basic/TargetOptions.h" +#include "clang/Basic/TokenKinds.h" #include "clang/CodeGen/CGFunctionInfo.h" #include "clang/Frontend/FrontendDiagnostic.h" #include "llvm/ADT/APFloat.h" @@ -39,6 +41,7 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/Analysis/ValueTracking.h" #include "llvm/IR/DataLayout.h" +#include "llvm/IR/DerivedTypes.h" #include "llvm/IR/InlineAsm.h" #include "llvm/IR/Intrinsics.h" #include "llvm/IR/IntrinsicsAArch64.h" @@ -62,6 +65,7 @@ #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/ScopedPrinter.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/TargetParser/AArch64TargetParser.h" #include "llvm/TargetParser/RISCVISAInfo.h" #include "llvm/TargetParser/X86TargetParser.h" @@ -18812,6 +18816,19 @@ case Builtin::BI__builtin_hlsl_elementwise_isinf: { llvm::FunctionType::get(IntTy, {}, false), "__hlsl_wave_get_lane_index", {}, false, true)); } + case Builtin::BI__builtin_hlsl_elementwise_asuint: { + Value *Op = EmitScalarExpr(E->getArg(0)); + E->dump(); + llvm::Type *DestTy = llvm::Type::getInt32Ty(this->getLLVMContext()); + + if (Op -> getType()->isVectorTy()){ + auto VecTy = E->getArg(0)->getType()->getAs<VectorType>(); + DestTy = llvm::VectorType::get(DestTy, VecTy->getNumElements(), + VecTy->isSizelessVectorType()); + } + + return Builder.CreateBitCast(Op, DestTy); + } case Builtin::BI__builtin_hlsl_wave_is_first_lane: { Intrinsic::ID ID = CGM.getHLSLRuntime().getWaveIsFirstLaneIntrinsic(); return EmitRuntimeCall(Intrinsic::getDeclaration(&CGM.getModule(), ID)); diff --git a/clang/lib/Headers/hlsl/hlsl_intrinsics.h b/clang/lib/Headers/hlsl/hlsl_intrinsics.h index 5c08a45a35377d..18426597569098 100644 --- a/clang/lib/Headers/hlsl/hlsl_intrinsics.h +++ b/clang/lib/Headers/hlsl/hlsl_intrinsics.h @@ -367,17 +367,6 @@ bool any(double4); /// \brief Returns the arcsine of the input value, \a Val. /// \param Val The input value. -#ifdef __HLSL_ENABLE_16_BIT -_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) -half asin(half); -_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) -half2 asin(half2); -_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) -half3 asin(half3); -_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) -half4 asin(half4); -#endif - _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) float asin(float); _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) @@ -387,6 +376,33 @@ float3 asin(float3); _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) float4 asin(float4); +//===----------------------------------------------------------------------===// +// asin builtins +//===----------------------------------------------------------------------===// + +/// \fn uint asin(T Val) +/// \brief Reinterprest. +/// \param Val The input value. + +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) +uint asuint(float); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) +uint2 asuint(float2); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) +uint3 asuint(float3); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) +uint4 asuint(float4); + + +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) +uint asuint(double); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) +uint2 asuint(double2); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) +uint3 asuint(double3); +_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) +uint4 asuint(double4); + //===----------------------------------------------------------------------===// // atan builtins //===----------------------------------------------------------------------===// diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp index 778d524a005482..38cc0e5a2d0de0 100644 --- a/clang/lib/Sema/SemaHLSL.cpp +++ b/clang/lib/Sema/SemaHLSL.cpp @@ -9,9 +9,12 @@ //===----------------------------------------------------------------------===// #include "clang/Sema/SemaHLSL.h" +#include "clang/AST/ASTContext.h" #include "clang/AST/Decl.h" #include "clang/AST/Expr.h" #include "clang/AST/RecursiveASTVisitor.h" +#include "clang/AST/Type.h" +#include "clang/Basic/Builtins.h" #include "clang/Basic/DiagnosticSema.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/SourceLocation.h" @@ -22,6 +25,8 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" +#include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/Type.h" #include "llvm/Support/Casting.h" #include "llvm/Support/DXILABI.h" #include "llvm/Support/ErrorHandling.h" @@ -1581,6 +1586,23 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { return true; break; } + case Builtin::BI__builtin_hlsl_elementwise_asuint: { + if (SemaRef.checkArgCount(TheCall, 1)) + return true; + + ExprResult A = TheCall->getArg(0); + QualType ArgTyA = A.get()->getType(); + + if(ArgTyA->isVectorType()){ + auto VecTy = TheCall->getArg(0)->getType()->getAs<VectorType>(); + auto ReturnType = this->getASTContext().getVectorType(TheCall->getCallReturnType(this->getASTContext()), VecTy->getNumElements(), + VectorKind::Generic); + + TheCall->setType(ReturnType); + } + + break; + } case Builtin::BI__builtin_elementwise_acos: case Builtin::BI__builtin_elementwise_asin: case Builtin::BI__builtin_elementwise_atan: diff --git a/clang/test/CodeGenHLSL/builtins/asuint.hlsl b/clang/test/CodeGenHLSL/builtins/asuint.hlsl new file mode 100644 index 00000000000000..33acb00ae11182 --- /dev/null +++ b/clang/test/CodeGenHLSL/builtins/asuint.hlsl @@ -0,0 +1,53 @@ +// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s -fnative-half-type -emit-llvm -disable-llvm-passes -o - | FileCheck %s + +// // CHECK-LABEL: builtin_test_asuint_float +// // CHECK: bitcast float %0 to i32 +// // CHECK: ret <4 x i32> %dx.clamp +// export uint builtin_test_asuint_float(float p0) { +// return __builtin_hlsl_elementwise_asuint(p0); +// } + + +// // CHECK-LABEL: builtin_test_asuint_float +// // CHECK: bitcast float %0 to i32 +// // CHECK: ret <4 x i32> %dx.clamp +// export uint builtin_test_asuint_double(double p0) { +// return __builtin_hlsl_elementwise_asuint(p0); +// } + + +// // CHECK-LABEL: builtin_test_asuint_float +// // CHECK: bitcast float %0 to i32 +// // CHECK: ret <4 x i32> %dx.clamp +// export uint builtin_test_asuint_half(half p0) { +// return __builtin_hlsl_elementwise_asuint(p0); +// } + + +// // CHECK-LABEL: builtin_test_asuint_float +// // CHECK: bitcast float %0 to i32 +// // CHECK: ret <4 x i32> %dx.clamp +// export uint4 builtin_test_asuint_float_vector(float p0) { +// return __builtin_hlsl_elementwise_asuint(p0); +// } + + +// CHECK-LABEL: builtin_test_asuint_float +// CHECK: bitcast float %0 to i32 +// CHECK: ret <4 x i32> %dx.clamp +export uint4 builtin_test_asuint_floa4t(float p0) { + return asuint(p0); +} + +// export uint4 builtin_test_asuint4_uint(uint p0) { +// return __builtin_hlsl_elementwise_asuint(p0); +// } + + +// export uint4 builtin_test_asuint4_int(int p0) { +// return __builtin_hlsl_elementwise_asuint(p0); +// } + +// export uint builtin_test_asuint_float(float p0) { +// return __builtin_hlsl_elementwise_asuint(p0); +// } \ No newline at end of file >From 7b15462cca4e25219be66708b06914ff84ee37aa Mon Sep 17 00:00:00 2001 From: Joao Saffran <jdereze...@microsoft.com> Date: Tue, 3 Sep 2024 19:06:22 +0000 Subject: [PATCH 2/2] Adding `asuint` implementation to hlsl --- clang/lib/CodeGen/CGBuiltin.cpp | 16 ++--- clang/lib/Headers/hlsl/hlsl_intrinsics.h | 27 ++++---- clang/lib/Sema/SemaHLSL.cpp | 52 ++++++++++----- clang/test/CodeGenHLSL/builtins/asuint.hlsl | 63 ++++++------------- .../test/SemaHLSL/BuiltIns/asuint-errors.hlsl | 18 ++++++ 5 files changed, 94 insertions(+), 82 deletions(-) create mode 100644 clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index da0cb6581761e5..035858e7e291b0 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -27,11 +27,9 @@ #include "clang/AST/Decl.h" #include "clang/AST/OSLog.h" #include "clang/AST/OperationKinds.h" -#include "clang/Basic/Builtins.h" #include "clang/Basic/TargetBuiltins.h" #include "clang/Basic/TargetInfo.h" #include "clang/Basic/TargetOptions.h" -#include "clang/Basic/TokenKinds.h" #include "clang/CodeGen/CGFunctionInfo.h" #include "clang/Frontend/FrontendDiagnostic.h" #include "llvm/ADT/APFloat.h" @@ -41,7 +39,6 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/Analysis/ValueTracking.h" #include "llvm/IR/DataLayout.h" -#include "llvm/IR/DerivedTypes.h" #include "llvm/IR/InlineAsm.h" #include "llvm/IR/Intrinsics.h" #include "llvm/IR/IntrinsicsAArch64.h" @@ -65,7 +62,6 @@ #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/ScopedPrinter.h" -#include "llvm/Support/raw_ostream.h" #include "llvm/TargetParser/AArch64TargetParser.h" #include "llvm/TargetParser/RISCVISAInfo.h" #include "llvm/TargetParser/X86TargetParser.h" @@ -18817,14 +18813,14 @@ case Builtin::BI__builtin_hlsl_elementwise_isinf: { {}, false, true)); } case Builtin::BI__builtin_hlsl_elementwise_asuint: { - Value *Op = EmitScalarExpr(E->getArg(0)); - E->dump(); + Value *Op = EmitScalarExpr(E->getArg(0)->IgnoreImpCasts()); + llvm::Type *DestTy = llvm::Type::getInt32Ty(this->getLLVMContext()); - if (Op -> getType()->isVectorTy()){ - auto VecTy = E->getArg(0)->getType()->getAs<VectorType>(); - DestTy = llvm::VectorType::get(DestTy, VecTy->getNumElements(), - VecTy->isSizelessVectorType()); + if (Op->getType()->isVectorTy()) { + const VectorType *VecTy = E->getArg(0)->getType()->getAs<VectorType>(); + DestTy = llvm::VectorType::get( + DestTy, ElementCount::getFixed(VecTy->getNumElements())); } return Builder.CreateBitCast(Op, DestTy); diff --git a/clang/lib/Headers/hlsl/hlsl_intrinsics.h b/clang/lib/Headers/hlsl/hlsl_intrinsics.h index 18426597569098..f40469937ddc38 100644 --- a/clang/lib/Headers/hlsl/hlsl_intrinsics.h +++ b/clang/lib/Headers/hlsl/hlsl_intrinsics.h @@ -367,6 +367,17 @@ bool any(double4); /// \brief Returns the arcsine of the input value, \a Val. /// \param Val The input value. +#ifdef __HLSL_ENABLE_16_BIT +_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) +half asin(half); +_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) +half2 asin(half2); +_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) +half3 asin(half3); +_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) +half4 asin(half4); +#endif + _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) float asin(float); _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) @@ -377,11 +388,11 @@ _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) float4 asin(float4); //===----------------------------------------------------------------------===// -// asin builtins +// asuint builtins //===----------------------------------------------------------------------===// -/// \fn uint asin(T Val) -/// \brief Reinterprest. +/// \fn uint asuint(T Val) +/// \brief Interprets the bit pattern of x as an unsigned integer. /// \param Val The input value. _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) @@ -393,16 +404,6 @@ uint3 asuint(float3); _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) uint4 asuint(float4); - -_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) -uint asuint(double); -_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) -uint2 asuint(double2); -_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) -uint3 asuint(double3); -_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_asuint) -uint4 asuint(double4); - //===----------------------------------------------------------------------===// // atan builtins //===----------------------------------------------------------------------===// diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp index 38cc0e5a2d0de0..3adf571c75f7b0 100644 --- a/clang/lib/Sema/SemaHLSL.cpp +++ b/clang/lib/Sema/SemaHLSL.cpp @@ -9,12 +9,10 @@ //===----------------------------------------------------------------------===// #include "clang/Sema/SemaHLSL.h" -#include "clang/AST/ASTContext.h" #include "clang/AST/Decl.h" #include "clang/AST/Expr.h" #include "clang/AST/RecursiveASTVisitor.h" #include "clang/AST/Type.h" -#include "clang/Basic/Builtins.h" #include "clang/Basic/DiagnosticSema.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/SourceLocation.h" @@ -25,8 +23,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Type.h" #include "llvm/Support/Casting.h" #include "llvm/Support/DXILABI.h" #include "llvm/Support/ErrorHandling.h" @@ -1406,6 +1402,25 @@ bool CheckVectorElementCallArgs(Sema *S, CallExpr *TheCall) { return true; } +bool CheckArgTypeWithoutImplicits( + Sema *S, Expr *Arg, QualType ExpectedType, + llvm::function_ref<bool(clang::QualType PassedType)> Check) { + + QualType ArgTy = Arg->IgnoreImpCasts()->getType(); + + clang::QualType BaseType = + ArgTy->isVectorType() + ? ArgTy->getAs<clang::VectorType>()->getElementType() + : ArgTy; + + if (Check(BaseType)) { + S->Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) + << ArgTy << ExpectedType << 1 << 0 << 0; + return true; + } + return false; +} + bool CheckArgsTypesAreCorrect( Sema *S, CallExpr *TheCall, QualType ExpectedType, llvm::function_ref<bool(clang::QualType PassedType)> Check) { @@ -1432,6 +1447,22 @@ bool CheckAllArgsHaveFloatRepresentation(Sema *S, CallExpr *TheCall) { checkAllFloatTypes); } +bool CheckArgIsFloatOrIntWithoutImplicits(Sema *S, Expr *Arg) { + auto checkFloat = [](clang::QualType PassedType) -> bool { + return !PassedType->isFloat32Type() && !PassedType->isIntegerType(); + }; + + return CheckArgTypeWithoutImplicits(S, Arg, S->Context.FloatTy, checkFloat); +} + +bool CheckArgIsIntegerWithoutImplicits(Sema *S, Expr *Arg) { + auto checkFloat = [](clang::QualType PassedType) -> bool { + return !PassedType->isIntegerType(); + }; + + return CheckArgTypeWithoutImplicits(S, Arg, S->Context.FloatTy, checkFloat); +} + bool CheckFloatOrHalfRepresentations(Sema *S, CallExpr *TheCall) { auto checkFloatorHalf = [](clang::QualType PassedType) -> bool { clang::QualType BaseType = @@ -1590,16 +1621,9 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { if (SemaRef.checkArgCount(TheCall, 1)) return true; - ExprResult A = TheCall->getArg(0); - QualType ArgTyA = A.get()->getType(); - - if(ArgTyA->isVectorType()){ - auto VecTy = TheCall->getArg(0)->getType()->getAs<VectorType>(); - auto ReturnType = this->getASTContext().getVectorType(TheCall->getCallReturnType(this->getASTContext()), VecTy->getNumElements(), - VectorKind::Generic); - - TheCall->setType(ReturnType); - } + Expr *Arg = TheCall->getArg(0); + if (CheckArgIsFloatOrIntWithoutImplicits(&SemaRef, Arg)) + return true; break; } diff --git a/clang/test/CodeGenHLSL/builtins/asuint.hlsl b/clang/test/CodeGenHLSL/builtins/asuint.hlsl index 33acb00ae11182..2ae7d8219ac671 100644 --- a/clang/test/CodeGenHLSL/builtins/asuint.hlsl +++ b/clang/test/CodeGenHLSL/builtins/asuint.hlsl @@ -1,53 +1,26 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s -fnative-half-type -emit-llvm -disable-llvm-passes -o - | FileCheck %s -// // CHECK-LABEL: builtin_test_asuint_float -// // CHECK: bitcast float %0 to i32 -// // CHECK: ret <4 x i32> %dx.clamp -// export uint builtin_test_asuint_float(float p0) { -// return __builtin_hlsl_elementwise_asuint(p0); -// } - -// // CHECK-LABEL: builtin_test_asuint_float -// // CHECK: bitcast float %0 to i32 -// // CHECK: ret <4 x i32> %dx.clamp -// export uint builtin_test_asuint_double(double p0) { -// return __builtin_hlsl_elementwise_asuint(p0); -// } - - -// // CHECK-LABEL: builtin_test_asuint_float -// // CHECK: bitcast float %0 to i32 -// // CHECK: ret <4 x i32> %dx.clamp -// export uint builtin_test_asuint_half(half p0) { -// return __builtin_hlsl_elementwise_asuint(p0); -// } - - -// // CHECK-LABEL: builtin_test_asuint_float -// // CHECK: bitcast float %0 to i32 -// // CHECK: ret <4 x i32> %dx.clamp -// export uint4 builtin_test_asuint_float_vector(float p0) { -// return __builtin_hlsl_elementwise_asuint(p0); -// } - - -// CHECK-LABEL: builtin_test_asuint_float -// CHECK: bitcast float %0 to i32 -// CHECK: ret <4 x i32> %dx.clamp -export uint4 builtin_test_asuint_floa4t(float p0) { +// CHECK-LABEL: test_asuint4_uint +// CHECK: ret i32 %0 +export uint test_asuint4_uint(uint p0) { return asuint(p0); } -// export uint4 builtin_test_asuint4_uint(uint p0) { -// return __builtin_hlsl_elementwise_asuint(p0); -// } - +// CHECK-LABEL: test_asuint4_int +// CHECK: %splat.splatinsert = insertelement <4 x i32> poison, i32 %0, i64 0 +export uint4 test_asuint4_int(int p0) { + return asuint(p0); +} -// export uint4 builtin_test_asuint4_int(int p0) { -// return __builtin_hlsl_elementwise_asuint(p0); -// } +// CHECK-LABEL: test_asuint_float +// CHECK: %1 = bitcast float %0 to i32 +export uint test_asuint_float(float p0) { + return asuint(p0); +} -// export uint builtin_test_asuint_float(float p0) { -// return __builtin_hlsl_elementwise_asuint(p0); -// } \ No newline at end of file +// CHECK-LABEL: test_asuint_float +// CHECK: %1 = bitcast <4 x float> %0 to <4 x i32> +export uint4 test_asuint_float4(float4 p0) { + return asuint(p0); +} \ No newline at end of file diff --git a/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl b/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl new file mode 100644 index 00000000000000..e9da975bff1b5e --- /dev/null +++ b/clang/test/SemaHLSL/BuiltIns/asuint-errors.hlsl @@ -0,0 +1,18 @@ +// RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.6-library %s -fnative-half-type -emit-llvm-only -disable-llvm-passes -verify -verify-ignore-unexpected + + +export uint4 test_asuint_too_many_arg(float p0, float p1) { + return __builtin_hlsl_elementwise_asuint(p0, p1); + // expected-error@-1 {{too many arguments to function call, expected 1, have 2}} +} + + +export uint fn(double p1) { + return asuint(p1); + // expected-error@-1 {{passing 'double' to parameter of incompatible type 'float'}} +} + +export uint fn(half p1) { + return asuint(p1); + // expected-error@-1 {{passing 'half' to parameter of incompatible type 'float'}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits