https://github.com/spall updated https://github.com/llvm/llvm-project/pull/132979
>From 5facb02ef4df5e0da31b6adef66f0b72309b99df Mon Sep 17 00:00:00 2001 From: Sarah Spall <sarahsp...@microsoft.com> Date: Mon, 24 Mar 2025 17:15:54 -0700 Subject: [PATCH 1/5] new double overloads + tests --- clang/lib/Frontend/InitPreprocessor.cpp | 4 + .../lib/Headers/hlsl/hlsl_compat_overloads.h | 283 +++++++++++++++++- clang/lib/Headers/hlsl/hlsl_detail.h | 2 + clang/test/CodeGenHLSL/builtins/acos.hlsl | 24 ++ clang/test/CodeGenHLSL/builtins/asin.hlsl | 24 ++ clang/test/CodeGenHLSL/builtins/atan.hlsl | 24 ++ clang/test/CodeGenHLSL/builtins/atan2.hlsl | 24 ++ clang/test/CodeGenHLSL/builtins/ceil.hlsl | 13 + clang/test/CodeGenHLSL/builtins/cos.hlsl | 13 + clang/test/CodeGenHLSL/builtins/cosh.hlsl | 24 ++ clang/test/CodeGenHLSL/builtins/degrees.hlsl | 17 ++ clang/test/CodeGenHLSL/builtins/exp.hlsl | 17 ++ clang/test/CodeGenHLSL/builtins/exp2.hlsl | 17 ++ clang/test/CodeGenHLSL/builtins/floor.hlsl | 13 + clang/test/CodeGenHLSL/builtins/frac.hlsl | 17 ++ clang/test/CodeGenHLSL/builtins/isinf.hlsl | 17 ++ clang/test/CodeGenHLSL/builtins/lerp.hlsl | 20 ++ clang/test/CodeGenHLSL/builtins/log.hlsl | 13 + clang/test/CodeGenHLSL/builtins/log10.hlsl | 13 + clang/test/CodeGenHLSL/builtins/log2.hlsl | 13 + .../test/CodeGenHLSL/builtins/normalize.hlsl | 30 ++ clang/test/CodeGenHLSL/builtins/pow.hlsl | 13 + clang/test/CodeGenHLSL/builtins/radians.hlsl | 16 + clang/test/CodeGenHLSL/builtins/round.hlsl | 17 ++ clang/test/CodeGenHLSL/builtins/rsqrt.hlsl | 17 ++ clang/test/CodeGenHLSL/builtins/sin.hlsl | 13 + clang/test/CodeGenHLSL/builtins/sinh.hlsl | 24 ++ clang/test/CodeGenHLSL/builtins/sqrt.hlsl | 17 ++ clang/test/CodeGenHLSL/builtins/step.hlsl | 29 ++ clang/test/CodeGenHLSL/builtins/tan.hlsl | 24 ++ clang/test/CodeGenHLSL/builtins/tanh.hlsl | 24 ++ clang/test/CodeGenHLSL/builtins/trunc.hlsl | 16 + 32 files changed, 830 insertions(+), 2 deletions(-) diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 1a816cb6269d4..0b54665501c76 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -394,6 +394,10 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI, // HLSL Version Builder.defineMacro("__HLSL_VERSION", Twine((unsigned)LangOpts.getHLSLVersion())); + Builder.defineMacro("__HLSL_202x", + Twine((unsigned)LangOptions::HLSLLangStd::HLSL_202x)); + Builder.defineMacro("__HLSL_202y", + Twine((unsigned)LangOptions::HLSLLangStd::HLSL_202y)); if (LangOpts.NativeHalfType) Builder.defineMacro("__HLSL_ENABLE_16_BIT", "1"); diff --git a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h index aff514ef74208..c30d053b93a6f 100644 --- a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h +++ b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h @@ -16,6 +16,84 @@ namespace hlsl { // unsigned integer and floating point. Keeping this ordering consistent will // help keep this file manageable as it grows. +#define DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn) \ + constexpr float fn(double V) { return fn(__detail::imp_cast<float>(V)); } \ + constexpr float2 fn(double2 V) { return fn(__detail::imp_cast<float2>(V)); } \ + constexpr float3 fn(double3 V) { return fn(__detail::imp_cast<float3>(V)); } \ + constexpr float4 fn(double4 V) { return fn(__detail::imp_cast<float4>(V)); } + +#define DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(fn) \ + constexpr float fn(double V1, double V2) { \ + return fn(__detail::imp_cast<float>(V1), __detail::imp_cast<float>(V2)); \ + } \ + constexpr float2 fn(double2 V1, double2 V2) { \ + return fn(__detail::imp_cast<float2>(V1), __detail::imp_cast<float2>(V2)); \ + } \ + constexpr float3 fn(double3 V1, double3 V2) { \ + return fn(__detail::imp_cast<float3>(V1), __detail::imp_cast<float3>(V2)); \ + } \ + constexpr float4 fn(double4 V1, double4 V2) { \ + return fn(__detail::imp_cast<float4>(V1), __detail::imp_cast<float4>(V2)); \ + } + +#define DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(fn) \ + constexpr float fn(double V1, double V2, double V3) { \ + return fn(__detail::imp_cast<float>(V1), __detail::imp_cast<float>(V2), \ + __detail::imp_cast<float>(V3)); \ + } \ + constexpr float2 fn(double2 V1, double2 V2, double2 V3) { \ + return fn(__detail::imp_cast<float2>(V1), __detail::imp_cast<float2>(V2), \ + __detail::imp_cast<float2>(V3)); \ + } \ + constexpr float3 fn(double3 V1, double3 V2, double3 V3) { \ + return fn(__detail::imp_cast<float3>(V1), __detail::imp_cast<float3>(V2), \ + __detail::imp_cast<float3>(V3)); \ + } \ + constexpr float4 fn(double4 V1, double4 V2, double4 V3) { \ + return fn(__detail::imp_cast<float4>(V1), __detail::imp_cast<float4>(V2), \ + __detail::imp_cast<float4>(V3)); \ + } + +//===----------------------------------------------------------------------===// +// acos builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(acos) +#endif + +//===----------------------------------------------------------------------===// +// asin builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(asin) +#endif + +//===----------------------------------------------------------------------===// +// atan builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(atan) +#endif + +//===----------------------------------------------------------------------===// +// atan2 builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(atan2) +#endif + +//===----------------------------------------------------------------------===// +// ceil builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(ceil) +#endif + //===----------------------------------------------------------------------===// // clamp builtins overloads //===----------------------------------------------------------------------===// @@ -39,7 +117,112 @@ clamp(vector<T, N> p0, T p1, T p2) { } //===----------------------------------------------------------------------===// -// max builtin overloads +// cos builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cos) +#endif + +//===----------------------------------------------------------------------===// +// cosh builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cosh) +#endif + +//===----------------------------------------------------------------------===// +// degrees builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(degrees) +#endif + +//===----------------------------------------------------------------------===// +// exp builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp) +#endif + +//===----------------------------------------------------------------------===// +// exp2 builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp2) +#endif + +//===----------------------------------------------------------------------===// +// floor builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(floor) +#endif + +//===----------------------------------------------------------------------===// +// frac builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(frac) +#endif + +//===----------------------------------------------------------------------===// +// isinf builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +constexpr bool isinf(double V) { return isinf(__detail::imp_cast<float>(V)); } +constexpr bool2 isinf(double2 V) { + return isinf(__detail::imp_cast<float2>(V)); +} +constexpr bool3 isinf(double3 V) { + return isinf(__detail::imp_cast<float3>(V)); +} +constexpr bool4 isinf(double4 V) { + return isinf(__detail::imp_cast<float4>(V)); +} +#endif + +//===----------------------------------------------------------------------===// +// lerp builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(lerp) +#endif + +//===----------------------------------------------------------------------===// +// log builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log) +#endif + +//===----------------------------------------------------------------------===// +// log10 builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log10) +#endif + +//===----------------------------------------------------------------------===// +// log2 builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log2) +#endif + +//===----------------------------------------------------------------------===// +// max builtins overloads //===----------------------------------------------------------------------===// template <typename T, uint N> @@ -55,7 +238,7 @@ max(T p0, vector<T, N> p1) { } //===----------------------------------------------------------------------===// -// min builtin overloads +// min builtins overloads //===----------------------------------------------------------------------===// template <typename T, uint N> @@ -70,5 +253,101 @@ min(T p0, vector<T, N> p1) { return min((vector<T, N>)p0, p1); } +//===----------------------------------------------------------------------===// +// normalize builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(normalize) +#endif + +//===----------------------------------------------------------------------===// +// pow builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(pow) +#endif + +//===----------------------------------------------------------------------===// +// rsqrt builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(rsqrt) +#endif + +//===----------------------------------------------------------------------===// +// round builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(round) +#endif + +//===----------------------------------------------------------------------===// +// sin builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sin) +#endif + +//===----------------------------------------------------------------------===// +// sinh builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sinh) +#endif + +//===----------------------------------------------------------------------===// +// sqrt builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sqrt) +#endif + +//===----------------------------------------------------------------------===// +// step builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(step) +#endif + +//===----------------------------------------------------------------------===// +// tan builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tan) +#endif + +//===----------------------------------------------------------------------===// +// tanh builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tanh) +#endif + +//===----------------------------------------------------------------------===// +// trunc builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(trunc) +#endif + +//===----------------------------------------------------------------------===// +// radians builtins overloads +//===----------------------------------------------------------------------===// + +#if __HLSL_VERSION <= __HLSL_202x +DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(radians) +#endif + } // namespace hlsl #endif // _HLSL_COMPAT_OVERLOADS_H_ diff --git a/clang/lib/Headers/hlsl/hlsl_detail.h b/clang/lib/Headers/hlsl/hlsl_detail.h index 80c4900121dfb..7f4b75736917a 100644 --- a/clang/lib/Headers/hlsl/hlsl_detail.h +++ b/clang/lib/Headers/hlsl/hlsl_detail.h @@ -49,6 +49,8 @@ template <typename T, int N> using HLSL_FIXED_VECTOR = vector<__detail::enable_if_t<(N > 1 && N <= 4), T>, N>; +template <typename T, typename R> constexpr T imp_cast(R Val) { return Val; } + } // namespace __detail } // namespace hlsl #endif //_HLSL_HLSL_DETAILS_H_ diff --git a/clang/test/CodeGenHLSL/builtins/acos.hlsl b/clang/test/CodeGenHLSL/builtins/acos.hlsl index 8152339a34e87..8bc018321d9c4 100644 --- a/clang/test/CodeGenHLSL/builtins/acos.hlsl +++ b/clang/test/CodeGenHLSL/builtins/acos.hlsl @@ -57,3 +57,27 @@ float3 test_acos_float3 ( float3 p0 ) { float4 test_acos_float4 ( float4 p0 ) { return acos ( p0 ); } + +// CHECK-LABEL: test_acos_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.acos.f32 +float test_acos_double ( double p0 ) { + return acos ( p0 ); +} + +// CHECK-LABEL: test_acos_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.acos.v2f32 +float2 test_acos_double2 ( double2 p0 ) { + return acos ( p0 ); +} + +// CHECK-LABEL: test_acos_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.acos.v3f32 +float3 test_acos_double3 ( double3 p0 ) { + return acos ( p0 ); +} + +// CHECK-LABEL: test_acos_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.acos.v4f32 +float4 test_acos_double4 ( double4 p0 ) { + return acos ( p0 ); +} diff --git a/clang/test/CodeGenHLSL/builtins/asin.hlsl b/clang/test/CodeGenHLSL/builtins/asin.hlsl index 16efbba79670e..e65844d80cdac 100644 --- a/clang/test/CodeGenHLSL/builtins/asin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/asin.hlsl @@ -57,3 +57,27 @@ float3 test_asin_float3 ( float3 p0 ) { float4 test_asin_float4 ( float4 p0 ) { return asin ( p0 ); } + +// CHECK-LABEL: test_asin_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.asin.f32 +float test_asin_double ( double p0 ) { + return asin ( p0 ); +} + +// CHECK-LABEL: test_asin_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.asin.v2f32 +float2 test_asin_double2 ( double2 p0 ) { + return asin ( p0 ); +} + +// CHECK-LABEL: test_asin_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.asin.v3f32 +float3 test_asin_double3 ( double3 p0 ) { + return asin ( p0 ); +} + +// CHECK-LABEL: test_asin_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.asin.v4f32 +float4 test_asin_double4 ( double4 p0 ) { + return asin ( p0 ); +} diff --git a/clang/test/CodeGenHLSL/builtins/atan.hlsl b/clang/test/CodeGenHLSL/builtins/atan.hlsl index 437835a863703..5be3d79a2bac6 100644 --- a/clang/test/CodeGenHLSL/builtins/atan.hlsl +++ b/clang/test/CodeGenHLSL/builtins/atan.hlsl @@ -57,3 +57,27 @@ float3 test_atan_float3 ( float3 p0 ) { float4 test_atan_float4 ( float4 p0 ) { return atan ( p0 ); } + +// CHECK-LABEL: test_atan_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.atan.f32 +float test_atan_double ( double p0 ) { + return atan ( p0 ); +} + +// CHECK-LABEL: test_atan_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.atan.v2f32 +float2 test_atan_double2 ( double2 p0 ) { + return atan ( p0 ); +} + +// CHECK-LABEL: test_atan_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.atan.v3f32 +float3 test_atan_double3 ( double3 p0 ) { + return atan ( p0 ); +} + +// CHECK-LABEL: test_atan_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.atan.v4f32 +float4 test_atan_double4 ( double4 p0 ) { + return atan ( p0 ); +} diff --git a/clang/test/CodeGenHLSL/builtins/atan2.hlsl b/clang/test/CodeGenHLSL/builtins/atan2.hlsl index 53d115641e72f..b0fe7efc7c310 100644 --- a/clang/test/CodeGenHLSL/builtins/atan2.hlsl +++ b/clang/test/CodeGenHLSL/builtins/atan2.hlsl @@ -57,3 +57,27 @@ float3 test_atan2_float3 (float3 p0, float3 p1) { float4 test_atan2_float4 (float4 p0, float4 p1) { return atan2(p0, p1); } + +// CHECK-LABEL: test_atan2_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.atan2.f32 +float test_atan2_double (double p0, double p1) { + return atan2(p0, p1); +} + +// CHECK-LABEL: test_atan2_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.atan2.v2f32 +float2 test_atan2_double2 (double2 p0, double2 p1) { + return atan2(p0, p1); +} + +// CHECK-LABEL: test_atan2_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.atan2.v3f32 +float3 test_atan2_double3 (double3 p0, double3 p1) { + return atan2(p0, p1); +} + +// CHECK-LABEL: test_atan2_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.atan2.v4f32 +float4 test_atan2_double4 (double4 p0, double4 p1) { + return atan2(p0, p1); +} diff --git a/clang/test/CodeGenHLSL/builtins/ceil.hlsl b/clang/test/CodeGenHLSL/builtins/ceil.hlsl index fe0b8f8983838..87cae2548aa76 100644 --- a/clang/test/CodeGenHLSL/builtins/ceil.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ceil.hlsl @@ -40,3 +40,16 @@ float3 test_ceil_float3(float3 p0) { return ceil(p0); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_ceil_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.ceil.v4f32( float4 test_ceil_float4(float4 p0) { return ceil(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_ceil_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.ceil.f32( +float test_ceil_double(double p0) { return ceil(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_ceil_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.ceil.v2f32( +float2 test_ceil_double2(double2 p0) { return ceil(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_ceil_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.ceil.v3f32( +float3 test_ceil_double3(double3 p0) { return ceil(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_ceil_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.ceil.v4f32( +float4 test_ceil_double4(double4 p0) { return ceil(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/cos.hlsl b/clang/test/CodeGenHLSL/builtins/cos.hlsl index 5f993d50498bf..745bb9f99f6de 100644 --- a/clang/test/CodeGenHLSL/builtins/cos.hlsl +++ b/clang/test/CodeGenHLSL/builtins/cos.hlsl @@ -38,3 +38,16 @@ float3 test_cos_float3(float3 p0) { return cos(p0); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_cos_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.cos.v4f32 float4 test_cos_float4(float4 p0) { return cos(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_cos_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.cos.f32( +float test_cos_double(double p0) { return cos(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_cos_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.cos.v2f32 +float2 test_cos_double2(double2 p0) { return cos(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_cos_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.cos.v3f32 +float3 test_cos_double3(double3 p0) { return cos(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_cos_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.cos.v4f32 +float4 test_cos_double4(double4 p0) { return cos(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/cosh.hlsl b/clang/test/CodeGenHLSL/builtins/cosh.hlsl index 07c64206412db..ba2cbdd018a82 100644 --- a/clang/test/CodeGenHLSL/builtins/cosh.hlsl +++ b/clang/test/CodeGenHLSL/builtins/cosh.hlsl @@ -57,3 +57,27 @@ float3 test_cosh_float3 ( float3 p0 ) { float4 test_cosh_float4 ( float4 p0 ) { return cosh ( p0 ); } + +// CHECK-LABEL: test_cosh_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.cosh.f32 +float test_cosh_double ( double p0 ) { + return cosh ( p0 ); +} + +// CHECK-LABEL: test_cosh_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.cosh.v2f32 +float2 test_cosh_double2 ( double2 p0 ) { + return cosh ( p0 ); +} + +// CHECK-LABEL: test_cosh_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.cosh.v3f32 +float3 test_cosh_double3 ( double3 p0 ) { + return cosh ( p0 ); +} + +// CHECK-LABEL: test_cosh_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.cosh.v4f32 +float4 test_cosh_double4 ( double4 p0 ) { + return cosh ( p0 ); +} diff --git a/clang/test/CodeGenHLSL/builtins/degrees.hlsl b/clang/test/CodeGenHLSL/builtins/degrees.hlsl index 64531dd2785eb..6a55b4d5b1be2 100644 --- a/clang/test/CodeGenHLSL/builtins/degrees.hlsl +++ b/clang/test/CodeGenHLSL/builtins/degrees.hlsl @@ -62,3 +62,20 @@ float3 test_degrees_float3(float3 p0) { return degrees(p0); } // CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].degrees.v4f32 // CHECK: ret <4 x float> %hlsl.degrees float4 test_degrees_float4(float4 p0) { return degrees(p0); } + +// CHECK: define [[FNATTRS]] float @ +// CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].degrees.f32( +// CHECK: ret float %hlsl.degrees +float test_degrees_double(double p0) { return degrees(p0); } +// CHECK: define [[FNATTRS]] <2 x float> @ +// CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].degrees.v2f32 +// CHECK: ret <2 x float> %hlsl.degrees +float2 test_degrees_double2(double2 p0) { return degrees(p0); } +// CHECK: define [[FNATTRS]] <3 x float> @ +// CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].degrees.v3f32 +// CHECK: ret <3 x float> %hlsl.degrees +float3 test_degrees_double3(double3 p0) { return degrees(p0); } +// CHECK: define [[FNATTRS]] <4 x float> @ +// CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].degrees.v4f32 +// CHECK: ret <4 x float> %hlsl.degrees +float4 test_degrees_double4(double4 p0) { return degrees(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/exp.hlsl b/clang/test/CodeGenHLSL/builtins/exp.hlsl index 6ed40ed8f433c..dad80fcbcf2d8 100644 --- a/clang/test/CodeGenHLSL/builtins/exp.hlsl +++ b/clang/test/CodeGenHLSL/builtins/exp.hlsl @@ -50,3 +50,20 @@ float3 test_exp_float3(float3 p0) { return exp(p0); } // CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.exp.v4f32 // CHECK: ret <4 x float> %elt.exp float4 test_exp_float4(float4 p0) { return exp(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_exp_double +// CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn float @llvm.exp.f32( +// CHECK: ret float %elt.exp +float test_exp_double(double p0) { return exp(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_exp_double2 +// CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.exp.v2f32 +// CHECK: ret <2 x float> %elt.exp +float2 test_exp_double2(double2 p0) { return exp(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_exp_double3 +// CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.exp.v3f32 +// CHECK: ret <3 x float> %elt.exp +float3 test_exp_double3(double3 p0) { return exp(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_exp_double4 +// CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.exp.v4f32 +// CHECK: ret <4 x float> %elt.exp +float4 test_exp_double4(double4 p0) { return exp(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/exp2.hlsl b/clang/test/CodeGenHLSL/builtins/exp2.hlsl index b067427e46368..594da9a990424 100644 --- a/clang/test/CodeGenHLSL/builtins/exp2.hlsl +++ b/clang/test/CodeGenHLSL/builtins/exp2.hlsl @@ -50,3 +50,20 @@ float3 test_exp2_float3(float3 p0) { return exp2(p0); } // CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.exp2.v4f32 // CHECK: ret <4 x float> %elt.exp2 float4 test_exp2_float4(float4 p0) { return exp2(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_exp2_double +// CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn float @llvm.exp2.f32( +// CHECK: ret float %elt.exp2 +float test_exp2_double(double p0) { return exp2(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_exp2_double2 +// CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.exp2.v2f32 +// CHECK: ret <2 x float> %elt.exp2 +float2 test_exp2_double2(double2 p0) { return exp2(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_exp2_double3 +// CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.exp2.v3f32 +// CHECK: ret <3 x float> %elt.exp2 +float3 test_exp2_double3(double3 p0) { return exp2(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_exp2_double4 +// CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.exp2.v4f32 +// CHECK: ret <4 x float> %elt.exp2 +float4 test_exp2_double4(double4 p0) { return exp2(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/floor.hlsl b/clang/test/CodeGenHLSL/builtins/floor.hlsl index f610baeeefd48..de411746ce467 100644 --- a/clang/test/CodeGenHLSL/builtins/floor.hlsl +++ b/clang/test/CodeGenHLSL/builtins/floor.hlsl @@ -40,3 +40,16 @@ float3 test_floor_float3(float3 p0) { return floor(p0); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z17test_floor_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.floor.v4f32( float4 test_floor_float4(float4 p0) { return floor(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_floor_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.floor.f32( +float test_floor_double(double p0) { return floor(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_floor_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.floor.v2f32( +float2 test_floor_double2(double2 p0) { return floor(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_floor_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.floor.v3f32( +float3 test_floor_double3(double3 p0) { return floor(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_floor_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.floor.v4f32( +float4 test_floor_double4(double4 p0) { return floor(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/frac.hlsl b/clang/test/CodeGenHLSL/builtins/frac.hlsl index 7b105ce84359f..71ca8fc0e4518 100644 --- a/clang/test/CodeGenHLSL/builtins/frac.hlsl +++ b/clang/test/CodeGenHLSL/builtins/frac.hlsl @@ -62,3 +62,20 @@ float3 test_frac_float3(float3 p0) { return frac(p0); } // CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].frac.v4f32 // CHECK: ret <4 x float> %hlsl.frac float4 test_frac_float4(float4 p0) { return frac(p0); } + +// CHECK: define [[FNATTRS]] float @ +// CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].frac.f32( +// CHECK: ret float %hlsl.frac +float test_frac_double(double p0) { return frac(p0); } +// CHECK: define [[FNATTRS]] <2 x float> @ +// CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].frac.v2f32 +// CHECK: ret <2 x float> %hlsl.frac +float2 test_frac_double2(double2 p0) { return frac(p0); } +// CHECK: define [[FNATTRS]] <3 x float> @ +// CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].frac.v3f32 +// CHECK: ret <3 x float> %hlsl.frac +float3 test_frac_double3(double3 p0) { return frac(p0); } +// CHECK: define [[FNATTRS]] <4 x float> @ +// CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].frac.v4f32 +// CHECK: ret <4 x float> %hlsl.frac +float4 test_frac_double4(double4 p0) { return frac(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/isinf.hlsl b/clang/test/CodeGenHLSL/builtins/isinf.hlsl index df44fc4a91dfd..b734f1bbf5af0 100644 --- a/clang/test/CodeGenHLSL/builtins/isinf.hlsl +++ b/clang/test/CodeGenHLSL/builtins/isinf.hlsl @@ -43,3 +43,20 @@ bool3 test_isinf_float3(float3 p0) { return isinf(p0); } // CHECK: %dx.isinf = call <4 x i1> @llvm.dx.isinf.v4f32 // CHECK: ret <4 x i1> %dx.isinf bool4 test_isinf_float4(float4 p0) { return isinf(p0); } + +// CHECK: define noundef i1 @ +// CHECK: %dx.isinf = call i1 @llvm.dx.isinf.f32( +// CHECK: ret i1 %dx.isinf +bool test_isinf_double(double p0) { return isinf(p0); } +// CHECK: define noundef <2 x i1> @ +// CHECK: %dx.isinf = call <2 x i1> @llvm.dx.isinf.v2f32 +// CHECK: ret <2 x i1> %dx.isinf +bool2 test_isinf_double2(double2 p0) { return isinf(p0); } +// CHECK: define noundef <3 x i1> @ +// CHECK: %dx.isinf = call <3 x i1> @llvm.dx.isinf.v3f32 +// CHECK: ret <3 x i1> %dx.isinf +bool3 test_isinf_double3(double3 p0) { return isinf(p0); } +// CHECK: define noundef <4 x i1> @ +// CHECK: %dx.isinf = call <4 x i1> @llvm.dx.isinf.v4f32 +// CHECK: ret <4 x i1> %dx.isinf +bool4 test_isinf_double4(double4 p0) { return isinf(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/lerp.hlsl b/clang/test/CodeGenHLSL/builtins/lerp.hlsl index d7a7113de4878..4e81d72e7fa9f 100644 --- a/clang/test/CodeGenHLSL/builtins/lerp.hlsl +++ b/clang/test/CodeGenHLSL/builtins/lerp.hlsl @@ -56,3 +56,23 @@ float3 test_lerp_float3(float3 p0) { return lerp(p0, p0, p0); } // CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: ret <4 x float> %hlsl.lerp float4 test_lerp_float4(float4 p0) { return lerp(p0, p0, p0); } + +// CHECK-LABEL: test_lerp_double +// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}) +// CHECK: ret float %hlsl.lerp +float test_lerp_double(double p0) { return lerp(p0, p0, p0); } + +// CHECK-LABEL: test_lerp_double2 +// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}}) +// CHECK: ret <2 x float> %hlsl.lerp +float2 test_lerp_double2(double2 p0) { return lerp(p0, p0, p0); } + +// CHECK-LABEL: test_lerp_double3 +// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}}) +// CHECK: ret <3 x float> %hlsl.lerp +float3 test_lerp_double3(double3 p0) { return lerp(p0, p0, p0); } + +// CHECK-LABEL: test_lerp_double4 +// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) +// CHECK: ret <4 x float> %hlsl.lerp +float4 test_lerp_double4(double4 p0) { return lerp(p0, p0, p0); } diff --git a/clang/test/CodeGenHLSL/builtins/log.hlsl b/clang/test/CodeGenHLSL/builtins/log.hlsl index e489939594a53..3b44a74c72355 100644 --- a/clang/test/CodeGenHLSL/builtins/log.hlsl +++ b/clang/test/CodeGenHLSL/builtins/log.hlsl @@ -38,3 +38,16 @@ float3 test_log_float3(float3 p0) { return log(p0); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_log_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log.v4f32 float4 test_log_float4(float4 p0) { return log(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_log_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.log.f32( +float test_log_double(double p0) { return log(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_log_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log.v2f32 +float2 test_log_double2(double2 p0) { return log(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_log_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log.v3f32 +float3 test_log_double3(double3 p0) { return log(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_log_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log.v4f32 +float4 test_log_double4(double4 p0) { return log(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/log10.hlsl b/clang/test/CodeGenHLSL/builtins/log10.hlsl index 37c8e837c45a3..a5e77153f53b0 100644 --- a/clang/test/CodeGenHLSL/builtins/log10.hlsl +++ b/clang/test/CodeGenHLSL/builtins/log10.hlsl @@ -38,3 +38,16 @@ float3 test_log10_float3(float3 p0) { return log10(p0); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z17test_log10_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log10.v4f32 float4 test_log10_float4(float4 p0) { return log10(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_log10_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.log10.f32( +float test_log10_double(double p0) { return log10(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_log10_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log10.v2f32 +float2 test_log10_double2(double2 p0) { return log10(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_log10_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log10.v3f32 +float3 test_log10_double3(double3 p0) { return log10(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_log10_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log10.v4f32 +float4 test_log10_double4(double4 p0) { return log10(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/log2.hlsl b/clang/test/CodeGenHLSL/builtins/log2.hlsl index 5159d5bb0fa4e..9af346289f8dc 100644 --- a/clang/test/CodeGenHLSL/builtins/log2.hlsl +++ b/clang/test/CodeGenHLSL/builtins/log2.hlsl @@ -38,3 +38,16 @@ float3 test_log2_float3(float3 p0) { return log2(p0); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_log2_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log2.v4f32 float4 test_log2_float4(float4 p0) { return log2(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_log2_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.log2.f32( +float test_log2_double(double p0) { return log2(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_log2_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log2.v2f32 +float2 test_log2_double2(double2 p0) { return log2(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_log2_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log2.v3f32 +float3 test_log2_double3(double3 p0) { return log2(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_log2_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log2.v4f32 +float4 test_log2_double4(double4 p0) { return log2(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/normalize.hlsl b/clang/test/CodeGenHLSL/builtins/normalize.hlsl index 830fc26b7acf0..d17ab4fd09a13 100644 --- a/clang/test/CodeGenHLSL/builtins/normalize.hlsl +++ b/clang/test/CodeGenHLSL/builtins/normalize.hlsl @@ -83,3 +83,33 @@ float4 test_length_float4(float4 p0) { return normalize(p0); } + +// CHECK: define [[FNATTRS]] float @ +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].normalize.f32(float +// CHECK: ret float +float test_normalize_double(double p0) +{ + return normalize(p0); +} +// CHECK: define [[FNATTRS]] <2 x float> @ +// CHECK: %hlsl.normalize = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].normalize.v2f32(<2 x float> + +// CHECK: ret <2 x float> %hlsl.normalize +float2 test_normalize_double2(double2 p0) +{ + return normalize(p0); +} +// CHECK: define [[FNATTRS]] <3 x float> @ +// CHECK: %hlsl.normalize = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].normalize.v3f32( +// CHECK: ret <3 x float> %hlsl.normalize +float3 test_normalize_double3(double3 p0) +{ + return normalize(p0); +} +// CHECK: define [[FNATTRS]] <4 x float> @ +// CHECK: %hlsl.normalize = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].normalize.v4f32( +// CHECK: ret <4 x float> %hlsl.normalize +float4 test_length_double4(double4 p0) +{ + return normalize(p0); +} diff --git a/clang/test/CodeGenHLSL/builtins/pow.hlsl b/clang/test/CodeGenHLSL/builtins/pow.hlsl index fd21f1b94c57e..b8b9c68698237 100644 --- a/clang/test/CodeGenHLSL/builtins/pow.hlsl +++ b/clang/test/CodeGenHLSL/builtins/pow.hlsl @@ -38,3 +38,16 @@ float3 test_pow_float3(float3 p0, float3 p1) { return pow(p0, p1); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_pow_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.pow.v4f32 float4 test_pow_float4(float4 p0, float4 p1) { return pow(p0, p1); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_pow_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.pow.f32( +float test_pow_double(double p0, double p1) { return pow(p0, p1); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_pow_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.pow.v2f32 +float2 test_pow_double2(double2 p0, double2 p1) { return pow(p0, p1); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_pow_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.pow.v3f32 +float3 test_pow_double3(double3 p0, double3 p1) { return pow(p0, p1); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_pow_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.pow.v4f32 +float4 test_pow_double4(double4 p0, double4 p1) { return pow(p0, p1); } diff --git a/clang/test/CodeGenHLSL/builtins/radians.hlsl b/clang/test/CodeGenHLSL/builtins/radians.hlsl index b2b6190ea90f6..0cc5d24f921af 100644 --- a/clang/test/CodeGenHLSL/builtins/radians.hlsl +++ b/clang/test/CodeGenHLSL/builtins/radians.hlsl @@ -64,3 +64,19 @@ float3 test_radians_float3(float3 p0) { return radians(p0); } // CHECK: ret <4 x float> %{{.*}} float4 test_radians_float4(float4 p0) { return radians(p0); } +// CHECK: define [[FNATTRS]] float @ +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].radians.f32( +// CHECK: ret float %{{.*}} +float test_radians_double(double p0) { return radians(p0); } +// CHECK: define [[FNATTRS]] <2 x float> @ +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].radians.v2f32 +// CHECK: ret <2 x float> %{{.*}} +float2 test_radians_double2(double2 p0) { return radians(p0); } +// CHECK: define [[FNATTRS]] <3 x float> @ +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].radians.v3f32 +// CHECK: ret <3 x float> %{{.*}} +float3 test_radians_double3(double3 p0) { return radians(p0); } +// CHECK: define [[FNATTRS]] <4 x float> @ +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].radians.v4f32 +// CHECK: ret <4 x float> %{{.*}} +float4 test_radians_double4(double4 p0) { return radians(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/round.hlsl b/clang/test/CodeGenHLSL/builtins/round.hlsl index a945a9677abbb..a2c00c8cb36fc 100644 --- a/clang/test/CodeGenHLSL/builtins/round.hlsl +++ b/clang/test/CodeGenHLSL/builtins/round.hlsl @@ -50,3 +50,20 @@ float3 test_round_float3(float3 p0) { return round(p0); } // CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.roundeven.v4f32 // CHECK: ret <4 x float> %elt.roundeven float4 test_round_float4(float4 p0) { return round(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_round_double +// CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn float @llvm.roundeven.f32( +// CHECK: ret float %elt.roundeven +float test_round_double(double p0) { return round(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_round_double2 +// CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.roundeven.v2f32 +// CHECK: ret <2 x float> %elt.roundeven +float2 test_round_double2(double2 p0) { return round(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_round_double3 +// CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.roundeven.v3f32 +// CHECK: ret <3 x float> %elt.roundeven +float3 test_round_double3(double3 p0) { return round(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_round_double4 +// CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.roundeven.v4f32 +// CHECK: ret <4 x float> %elt.roundeven +float4 test_round_double4(double4 p0) { return round(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/rsqrt.hlsl b/clang/test/CodeGenHLSL/builtins/rsqrt.hlsl index 6c9b1f643713b..512bb6170a491 100644 --- a/clang/test/CodeGenHLSL/builtins/rsqrt.hlsl +++ b/clang/test/CodeGenHLSL/builtins/rsqrt.hlsl @@ -62,3 +62,20 @@ float3 test_rsqrt_float3(float3 p0) { return rsqrt(p0); } // CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].rsqrt.v4f32 // CHECK: ret <4 x float> %hlsl.rsqrt float4 test_rsqrt_float4(float4 p0) { return rsqrt(p0); } + +// CHECK: define [[FNATTRS]] float @ +// CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].rsqrt.f32( +// CHECK: ret float %hlsl.rsqrt +float test_rsqrt_double(double p0) { return rsqrt(p0); } +// CHECK: define [[FNATTRS]] <2 x float> @ +// CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].rsqrt.v2f32 +// CHECK: ret <2 x float> %hlsl.rsqrt +float2 test_rsqrt_double2(double2 p0) { return rsqrt(p0); } +// CHECK: define [[FNATTRS]] <3 x float> @ +// CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].rsqrt.v3f32 +// CHECK: ret <3 x float> %hlsl.rsqrt +float3 test_rsqrt_double3(double3 p0) { return rsqrt(p0); } +// CHECK: define [[FNATTRS]] <4 x float> @ +// CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].rsqrt.v4f32 +// CHECK: ret <4 x float> %hlsl.rsqrt +float4 test_rsqrt_double4(double4 p0) { return rsqrt(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/sin.hlsl b/clang/test/CodeGenHLSL/builtins/sin.hlsl index 69c657239ef95..fc44f35f838a9 100644 --- a/clang/test/CodeGenHLSL/builtins/sin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/sin.hlsl @@ -38,3 +38,16 @@ float3 test_sin_float3(float3 p0) { return sin(p0); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_sin_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sin.v4f32 float4 test_sin_float4(float4 p0) { return sin(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_sin_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.sin.f32( +float test_sin_double(double p0) { return sin(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_sin_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sin.v2f32 +float2 test_sin_double2(double2 p0) { return sin(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_sin_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sin.v3f32 +float3 test_sin_double3(double3 p0) { return sin(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_sin_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sin.v4f32 +float4 test_sin_double4(double4 p0) { return sin(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/sinh.hlsl b/clang/test/CodeGenHLSL/builtins/sinh.hlsl index d55d60515418c..2850877180a4e 100644 --- a/clang/test/CodeGenHLSL/builtins/sinh.hlsl +++ b/clang/test/CodeGenHLSL/builtins/sinh.hlsl @@ -57,3 +57,27 @@ float3 test_sinh_float3 ( float3 p0 ) { float4 test_sinh_float4 ( float4 p0 ) { return sinh ( p0 ); } + +// CHECK-LABEL: test_sinh_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.sinh.f32 +float test_sinh_double ( double p0 ) { + return sinh ( p0 ); +} + +// CHECK-LABEL: test_sinh_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sinh.v2f32 +float2 test_sinh_double2 ( double2 p0 ) { + return sinh ( p0 ); +} + +// CHECK-LABEL: test_sinh_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sinh.v3f32 +float3 test_sinh_double3 ( double3 p0 ) { + return sinh ( p0 ); +} + +// CHECK-LABEL: test_sinh_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sinh.v4f32 +float4 test_sinh_double4 ( double4 p0 ) { + return sinh ( p0 ); +} diff --git a/clang/test/CodeGenHLSL/builtins/sqrt.hlsl b/clang/test/CodeGenHLSL/builtins/sqrt.hlsl index 94d966f0bef8a..cda6df9a5bb7a 100644 --- a/clang/test/CodeGenHLSL/builtins/sqrt.hlsl +++ b/clang/test/CodeGenHLSL/builtins/sqrt.hlsl @@ -50,3 +50,20 @@ float3 test_sqrt_float3(float3 p0) { return sqrt(p0); } // CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sqrt.v4f32 // CHECK: ret <4 x float> %{{.*}} float4 test_sqrt_float4(float4 p0) { return sqrt(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_sqrt_double +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn float @llvm.sqrt.f32( +// CHECK: ret float %{{.*}} +float test_sqrt_double(double p0) { return sqrt(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_sqrt_double2 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sqrt.v2f32 +// CHECK: ret <2 x float> %{{.*}} +float2 test_sqrt_double2(double2 p0) { return sqrt(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_sqrt_double3 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sqrt.v3f32 +// CHECK: ret <3 x float> %{{.*}} +float3 test_sqrt_double3(double3 p0) { return sqrt(p0); } +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_sqrt_double4 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sqrt.v4f32 +// CHECK: ret <4 x float> %{{.*}} +float4 test_sqrt_double4(double4 p0) { return sqrt(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/step.hlsl b/clang/test/CodeGenHLSL/builtins/step.hlsl index 49d09e5c6fe6f..1494f284aa6f5 100644 --- a/clang/test/CodeGenHLSL/builtins/step.hlsl +++ b/clang/test/CodeGenHLSL/builtins/step.hlsl @@ -82,3 +82,32 @@ float4 test_step_float4(float4 p0, float4 p1) { return step(p0, p1); } + +// CHECK: define [[FNATTRS]] float @ +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].step.f32(float +// CHECK: ret float +float test_step_double(double p0, double p1) +{ + return step(p0, p1); +} +// CHECK: define [[FNATTRS]] <2 x float> @ +// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].step.v2f32( +// CHECK: ret <2 x float> %hlsl.step +float2 test_step_double2(double2 p0, double2 p1) +{ + return step(p0, p1); +} +// CHECK: define [[FNATTRS]] <3 x float> @ +// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].step.v3f32( +// CHECK: ret <3 x float> %hlsl.step +float3 test_step_double3(double3 p0, double3 p1) +{ + return step(p0, p1); +} +// CHECK: define [[FNATTRS]] <4 x float> @ +// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].step.v4f32( +// CHECK: ret <4 x float> %hlsl.step +float4 test_step_double4(double4 p0, double4 p1) +{ + return step(p0, p1); +} diff --git a/clang/test/CodeGenHLSL/builtins/tan.hlsl b/clang/test/CodeGenHLSL/builtins/tan.hlsl index c8c948624a613..3cc7d00508397 100644 --- a/clang/test/CodeGenHLSL/builtins/tan.hlsl +++ b/clang/test/CodeGenHLSL/builtins/tan.hlsl @@ -57,3 +57,27 @@ float3 test_tan_float3 ( float3 p0 ) { float4 test_tan_float4 ( float4 p0 ) { return tan ( p0 ); } + +// CHECK-LABEL: test_tan_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.tan.f32 +float test_tan_double ( double p0 ) { + return tan ( p0 ); +} + +// CHECK-LABEL: test_tan_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.tan.v2f32 +float2 test_tan_double2 ( double2 p0 ) { + return tan ( p0 ); +} + +// CHECK-LABEL: test_tan_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.tan.v3f32 +float3 test_tan_double3 ( double3 p0 ) { + return tan ( p0 ); +} + +// CHECK-LABEL: test_tan_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.tan.v4f32 +float4 test_tan_double4 ( double4 p0 ) { + return tan ( p0 ); +} diff --git a/clang/test/CodeGenHLSL/builtins/tanh.hlsl b/clang/test/CodeGenHLSL/builtins/tanh.hlsl index f947c7f53b110..4f34a38bbf9ae 100644 --- a/clang/test/CodeGenHLSL/builtins/tanh.hlsl +++ b/clang/test/CodeGenHLSL/builtins/tanh.hlsl @@ -57,3 +57,27 @@ float3 test_tanh_float3 ( float3 p0 ) { float4 test_tanh_float4 ( float4 p0 ) { return tanh ( p0 ); } + +// CHECK-LABEL: test_tanh_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.tanh.f32 +float test_tanh_double ( double p0 ) { + return tanh ( p0 ); +} + +// CHECK-LABEL: test_tanh_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.tanh.v2f32 +float2 test_tanh_double2 ( double2 p0 ) { + return tanh ( p0 ); +} + +// CHECK-LABEL: test_tanh_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.tanh.v3f32 +float3 test_tanh_double3 ( double3 p0 ) { + return tanh ( p0 ); +} + +// CHECK-LABEL: test_tanh_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.tanh.v4f32 +float4 test_tanh_double4 ( double4 p0 ) { + return tanh ( p0 ); +} diff --git a/clang/test/CodeGenHLSL/builtins/trunc.hlsl b/clang/test/CodeGenHLSL/builtins/trunc.hlsl index 26de5bf94c3cc..66bd165cbd370 100644 --- a/clang/test/CodeGenHLSL/builtins/trunc.hlsl +++ b/clang/test/CodeGenHLSL/builtins/trunc.hlsl @@ -44,3 +44,19 @@ float3 test_trunc_float3(float3 p0) { return trunc(p0); } // CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z17test_trunc_float4 // CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.trunc.v4f32 float4 test_trunc_float4(float4 p0) { return trunc(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) float {{.*}}test_trunc_double +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.trunc.f32( +float test_trunc_double(double p0) { return trunc(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> {{.*}}test_trunc_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.trunc.v2f32 +float2 test_trunc_double2(double2 p0) { return trunc(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}test_trunc_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.trunc.v3f32 +float3 test_trunc_double3(double3 p0) { return trunc(p0); } + +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> {{.*}}test_trunc_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.trunc.v4f32 +float4 test_trunc_double4(double4 p0) { return trunc(p0); } >From 0cc676b4662472668b3ea7be701b478ec949532b Mon Sep 17 00:00:00 2001 From: Sarah Spall <sarahsp...@microsoft.com> Date: Tue, 25 Mar 2025 12:39:32 -0700 Subject: [PATCH 2/5] add _ to from of DXC_COMPAT macros to match macros defined in hlsl_alias_intrinsics.h --- .../lib/Headers/hlsl/hlsl_compat_overloads.h | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h index c30d053b93a6f..9319a91609f97 100644 --- a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h +++ b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h @@ -16,13 +16,13 @@ namespace hlsl { // unsigned integer and floating point. Keeping this ordering consistent will // help keep this file manageable as it grows. -#define DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn) \ +#define _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn) \ constexpr float fn(double V) { return fn(__detail::imp_cast<float>(V)); } \ constexpr float2 fn(double2 V) { return fn(__detail::imp_cast<float2>(V)); } \ constexpr float3 fn(double3 V) { return fn(__detail::imp_cast<float3>(V)); } \ constexpr float4 fn(double4 V) { return fn(__detail::imp_cast<float4>(V)); } -#define DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(fn) \ +#define _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(fn) \ constexpr float fn(double V1, double V2) { \ return fn(__detail::imp_cast<float>(V1), __detail::imp_cast<float>(V2)); \ } \ @@ -36,7 +36,7 @@ namespace hlsl { return fn(__detail::imp_cast<float4>(V1), __detail::imp_cast<float4>(V2)); \ } -#define DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(fn) \ +#define _DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(fn) \ constexpr float fn(double V1, double V2, double V3) { \ return fn(__detail::imp_cast<float>(V1), __detail::imp_cast<float>(V2), \ __detail::imp_cast<float>(V3)); \ @@ -59,7 +59,7 @@ namespace hlsl { //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(acos) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(acos) #endif //===----------------------------------------------------------------------===// @@ -67,7 +67,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(acos) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(asin) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(asin) #endif //===----------------------------------------------------------------------===// @@ -75,7 +75,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(asin) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(atan) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(atan) #endif //===----------------------------------------------------------------------===// @@ -83,7 +83,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(atan) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(atan2) +_DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(atan2) #endif //===----------------------------------------------------------------------===// @@ -91,7 +91,7 @@ DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(atan2) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(ceil) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(ceil) #endif //===----------------------------------------------------------------------===// @@ -121,7 +121,7 @@ clamp(vector<T, N> p0, T p1, T p2) { //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cos) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cos) #endif //===----------------------------------------------------------------------===// @@ -129,7 +129,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cos) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cosh) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cosh) #endif //===----------------------------------------------------------------------===// @@ -137,7 +137,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cosh) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(degrees) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(degrees) #endif //===----------------------------------------------------------------------===// @@ -145,7 +145,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(degrees) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp) #endif //===----------------------------------------------------------------------===// @@ -153,7 +153,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp2) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp2) #endif //===----------------------------------------------------------------------===// @@ -161,7 +161,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp2) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(floor) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(floor) #endif //===----------------------------------------------------------------------===// @@ -169,7 +169,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(floor) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(frac) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(frac) #endif //===----------------------------------------------------------------------===// @@ -194,7 +194,7 @@ constexpr bool4 isinf(double4 V) { //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(lerp) +_DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(lerp) #endif //===----------------------------------------------------------------------===// @@ -202,7 +202,7 @@ DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(lerp) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log) #endif //===----------------------------------------------------------------------===// @@ -210,7 +210,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log10) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log10) #endif //===----------------------------------------------------------------------===// @@ -218,7 +218,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log10) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log2) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log2) #endif //===----------------------------------------------------------------------===// @@ -258,7 +258,7 @@ min(T p0, vector<T, N> p1) { //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(normalize) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(normalize) #endif //===----------------------------------------------------------------------===// @@ -266,7 +266,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(normalize) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(pow) +_DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(pow) #endif //===----------------------------------------------------------------------===// @@ -274,7 +274,7 @@ DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(pow) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(rsqrt) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(rsqrt) #endif //===----------------------------------------------------------------------===// @@ -282,7 +282,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(rsqrt) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(round) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(round) #endif //===----------------------------------------------------------------------===// @@ -290,7 +290,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(round) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sin) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sin) #endif //===----------------------------------------------------------------------===// @@ -298,7 +298,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sin) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sinh) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sinh) #endif //===----------------------------------------------------------------------===// @@ -306,7 +306,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sinh) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sqrt) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sqrt) #endif //===----------------------------------------------------------------------===// @@ -314,7 +314,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sqrt) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(step) +_DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(step) #endif //===----------------------------------------------------------------------===// @@ -322,7 +322,7 @@ DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(step) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tan) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tan) #endif //===----------------------------------------------------------------------===// @@ -330,7 +330,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tan) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tanh) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tanh) #endif //===----------------------------------------------------------------------===// @@ -338,7 +338,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tanh) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(trunc) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(trunc) #endif //===----------------------------------------------------------------------===// @@ -346,7 +346,7 @@ DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(trunc) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(radians) +_DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(radians) #endif } // namespace hlsl >From fc5b77e1a1e6405c56c2da8723bd99e5f456a511 Mon Sep 17 00:00:00 2001 From: Sarah Spall <sarahsp...@microsoft.com> Date: Tue, 25 Mar 2025 13:25:11 -0700 Subject: [PATCH 3/5] remove imp_cast --- .../lib/Headers/hlsl/hlsl_compat_overloads.h | 40 +++++++++---------- clang/lib/Headers/hlsl/hlsl_detail.h | 2 - 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h index 9319a91609f97..78019280867a4 100644 --- a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h +++ b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h @@ -17,41 +17,41 @@ namespace hlsl { // help keep this file manageable as it grows. #define _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn) \ - constexpr float fn(double V) { return fn(__detail::imp_cast<float>(V)); } \ - constexpr float2 fn(double2 V) { return fn(__detail::imp_cast<float2>(V)); } \ - constexpr float3 fn(double3 V) { return fn(__detail::imp_cast<float3>(V)); } \ - constexpr float4 fn(double4 V) { return fn(__detail::imp_cast<float4>(V)); } + constexpr float fn(double V) { return fn((float)V); } \ + constexpr float2 fn(double2 V) { return fn((float2)V); } \ + constexpr float3 fn(double3 V) { return fn((float3)V); } \ + constexpr float4 fn(double4 V) { return fn((float4)V); } #define _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(fn) \ constexpr float fn(double V1, double V2) { \ - return fn(__detail::imp_cast<float>(V1), __detail::imp_cast<float>(V2)); \ + return fn((float)V1, (float)V2); \ } \ constexpr float2 fn(double2 V1, double2 V2) { \ - return fn(__detail::imp_cast<float2>(V1), __detail::imp_cast<float2>(V2)); \ + return fn((float2)V1, (float2)V2); \ } \ constexpr float3 fn(double3 V1, double3 V2) { \ - return fn(__detail::imp_cast<float3>(V1), __detail::imp_cast<float3>(V2)); \ + return fn((float3)V1, (float3)V2); \ } \ constexpr float4 fn(double4 V1, double4 V2) { \ - return fn(__detail::imp_cast<float4>(V1), __detail::imp_cast<float4>(V2)); \ + return fn((float4)V1, (float4)V2); \ } #define _DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(fn) \ constexpr float fn(double V1, double V2, double V3) { \ - return fn(__detail::imp_cast<float>(V1), __detail::imp_cast<float>(V2), \ - __detail::imp_cast<float>(V3)); \ + return fn((float)V1, (float)V2, \ + (float)V3); \ } \ constexpr float2 fn(double2 V1, double2 V2, double2 V3) { \ - return fn(__detail::imp_cast<float2>(V1), __detail::imp_cast<float2>(V2), \ - __detail::imp_cast<float2>(V3)); \ + return fn((float2)V1, (float2)V2, \ + (float2)V3); \ } \ constexpr float3 fn(double3 V1, double3 V2, double3 V3) { \ - return fn(__detail::imp_cast<float3>(V1), __detail::imp_cast<float3>(V2), \ - __detail::imp_cast<float3>(V3)); \ + return fn((float3)V1, (float3)V2, \ + (float3)V3); \ } \ constexpr float4 fn(double4 V1, double4 V2, double4 V3) { \ - return fn(__detail::imp_cast<float4>(V1), __detail::imp_cast<float4>(V2), \ - __detail::imp_cast<float4>(V3)); \ + return fn((float4)V1, (float4)V2, \ + (float4)V3); \ } //===----------------------------------------------------------------------===// @@ -177,15 +177,15 @@ _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(frac) //===----------------------------------------------------------------------===// #if __HLSL_VERSION <= __HLSL_202x -constexpr bool isinf(double V) { return isinf(__detail::imp_cast<float>(V)); } +constexpr bool isinf(double V) { return isinf((float)V); } constexpr bool2 isinf(double2 V) { - return isinf(__detail::imp_cast<float2>(V)); + return isinf((float2)V); } constexpr bool3 isinf(double3 V) { - return isinf(__detail::imp_cast<float3>(V)); + return isinf((float3)V); } constexpr bool4 isinf(double4 V) { - return isinf(__detail::imp_cast<float4>(V)); + return isinf((float4)V); } #endif diff --git a/clang/lib/Headers/hlsl/hlsl_detail.h b/clang/lib/Headers/hlsl/hlsl_detail.h index 7f4b75736917a..80c4900121dfb 100644 --- a/clang/lib/Headers/hlsl/hlsl_detail.h +++ b/clang/lib/Headers/hlsl/hlsl_detail.h @@ -49,8 +49,6 @@ template <typename T, int N> using HLSL_FIXED_VECTOR = vector<__detail::enable_if_t<(N > 1 && N <= 4), T>, N>; -template <typename T, typename R> constexpr T imp_cast(R Val) { return Val; } - } // namespace __detail } // namespace hlsl #endif //_HLSL_HLSL_DETAILS_H_ >From aa4b3f6cda1040a0fddb883da3ece34844894783 Mon Sep 17 00:00:00 2001 From: Sarah Spall <sarahsp...@microsoft.com> Date: Tue, 25 Mar 2025 14:54:57 -0700 Subject: [PATCH 4/5] move condition on hlsl version --- clang/lib/Headers/hlsl.h | 2 + .../lib/Headers/hlsl/hlsl_compat_overloads.h | 58 ------------------- 2 files changed, 2 insertions(+), 58 deletions(-) diff --git a/clang/lib/Headers/hlsl.h b/clang/lib/Headers/hlsl.h index d233f6092ffcd..b494b4d0f78bb 100644 --- a/clang/lib/Headers/hlsl.h +++ b/clang/lib/Headers/hlsl.h @@ -22,7 +22,9 @@ // HLSL standard library function declarations/definitions. #include "hlsl/hlsl_alias_intrinsics.h" +#if __HLSL_VERSION <= __HLSL_202x #include "hlsl/hlsl_compat_overloads.h" +#endif #include "hlsl/hlsl_intrinsics.h" #if defined(__clang__) diff --git a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h index 78019280867a4..6cd2085abd902 100644 --- a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h +++ b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h @@ -58,41 +58,31 @@ namespace hlsl { // acos builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(acos) -#endif //===----------------------------------------------------------------------===// // asin builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(asin) -#endif //===----------------------------------------------------------------------===// // atan builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(atan) -#endif //===----------------------------------------------------------------------===// // atan2 builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(atan2) -#endif //===----------------------------------------------------------------------===// // ceil builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(ceil) -#endif //===----------------------------------------------------------------------===// // clamp builtins overloads @@ -120,63 +110,48 @@ clamp(vector<T, N> p0, T p1, T p2) { // cos builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cos) -#endif //===----------------------------------------------------------------------===// // cosh builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(cosh) -#endif //===----------------------------------------------------------------------===// // degrees builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(degrees) -#endif //===----------------------------------------------------------------------===// // exp builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp) -#endif //===----------------------------------------------------------------------===// // exp2 builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(exp2) -#endif //===----------------------------------------------------------------------===// // floor builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(floor) -#endif //===----------------------------------------------------------------------===// // frac builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(frac) -#endif //===----------------------------------------------------------------------===// // isinf builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x constexpr bool isinf(double V) { return isinf((float)V); } constexpr bool2 isinf(double2 V) { return isinf((float2)V); @@ -187,39 +162,30 @@ constexpr bool3 isinf(double3 V) { constexpr bool4 isinf(double4 V) { return isinf((float4)V); } -#endif //===----------------------------------------------------------------------===// // lerp builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(lerp) -#endif //===----------------------------------------------------------------------===// // log builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log) -#endif //===----------------------------------------------------------------------===// // log10 builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log10) -#endif //===----------------------------------------------------------------------===// // log2 builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(log2) -#endif //===----------------------------------------------------------------------===// // max builtins overloads @@ -257,97 +223,73 @@ min(T p0, vector<T, N> p1) { // normalize builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(normalize) -#endif //===----------------------------------------------------------------------===// // pow builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(pow) -#endif //===----------------------------------------------------------------------===// // rsqrt builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(rsqrt) -#endif //===----------------------------------------------------------------------===// // round builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(round) -#endif //===----------------------------------------------------------------------===// // sin builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sin) -#endif //===----------------------------------------------------------------------===// // sinh builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sinh) -#endif //===----------------------------------------------------------------------===// // sqrt builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(sqrt) -#endif //===----------------------------------------------------------------------===// // step builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(step) -#endif //===----------------------------------------------------------------------===// // tan builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tan) -#endif //===----------------------------------------------------------------------===// // tanh builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(tanh) -#endif //===----------------------------------------------------------------------===// // trunc builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(trunc) -#endif //===----------------------------------------------------------------------===// // radians builtins overloads //===----------------------------------------------------------------------===// -#if __HLSL_VERSION <= __HLSL_202x _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(radians) -#endif } // namespace hlsl #endif // _HLSL_COMPAT_OVERLOADS_H_ >From cfbdc23d582feaa14b2abd8610e573e9caf9301c Mon Sep 17 00:00:00 2001 From: Sarah Spall <sarahsp...@microsoft.com> Date: Tue, 25 Mar 2025 14:57:19 -0700 Subject: [PATCH 5/5] fix formatting problem --- .../lib/Headers/hlsl/hlsl_compat_overloads.h | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h index 6cd2085abd902..d8dac0a3942ad 100644 --- a/clang/lib/Headers/hlsl/hlsl_compat_overloads.h +++ b/clang/lib/Headers/hlsl/hlsl_compat_overloads.h @@ -17,41 +17,37 @@ namespace hlsl { // help keep this file manageable as it grows. #define _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(fn) \ - constexpr float fn(double V) { return fn((float)V); } \ - constexpr float2 fn(double2 V) { return fn((float2)V); } \ - constexpr float3 fn(double3 V) { return fn((float3)V); } \ + constexpr float fn(double V) { return fn((float)V); } \ + constexpr float2 fn(double2 V) { return fn((float2)V); } \ + constexpr float3 fn(double3 V) { return fn((float3)V); } \ constexpr float4 fn(double4 V) { return fn((float4)V); } #define _DXC_COMPAT_BINARY_DOUBLE_OVERLOADS(fn) \ constexpr float fn(double V1, double V2) { \ - return fn((float)V1, (float)V2); \ + return fn((float)V1, (float)V2); \ } \ constexpr float2 fn(double2 V1, double2 V2) { \ - return fn((float2)V1, (float2)V2); \ + return fn((float2)V1, (float2)V2); \ } \ constexpr float3 fn(double3 V1, double3 V2) { \ - return fn((float3)V1, (float3)V2); \ + return fn((float3)V1, (float3)V2); \ } \ constexpr float4 fn(double4 V1, double4 V2) { \ - return fn((float4)V1, (float4)V2); \ + return fn((float4)V1, (float4)V2); \ } #define _DXC_COMPAT_TERNARY_DOUBLE_OVERLOADS(fn) \ constexpr float fn(double V1, double V2, double V3) { \ - return fn((float)V1, (float)V2, \ - (float)V3); \ + return fn((float)V1, (float)V2, (float)V3); \ } \ constexpr float2 fn(double2 V1, double2 V2, double2 V3) { \ - return fn((float2)V1, (float2)V2, \ - (float2)V3); \ + return fn((float2)V1, (float2)V2, (float2)V3); \ } \ constexpr float3 fn(double3 V1, double3 V2, double3 V3) { \ - return fn((float3)V1, (float3)V2, \ - (float3)V3); \ + return fn((float3)V1, (float3)V2, (float3)V3); \ } \ constexpr float4 fn(double4 V1, double4 V2, double4 V3) { \ - return fn((float4)V1, (float4)V2, \ - (float4)V3); \ + return fn((float4)V1, (float4)V2, (float4)V3); \ } //===----------------------------------------------------------------------===// @@ -153,15 +149,9 @@ _DXC_COMPAT_UNARY_DOUBLE_OVERLOADS(frac) //===----------------------------------------------------------------------===// constexpr bool isinf(double V) { return isinf((float)V); } -constexpr bool2 isinf(double2 V) { - return isinf((float2)V); -} -constexpr bool3 isinf(double3 V) { - return isinf((float3)V); -} -constexpr bool4 isinf(double4 V) { - return isinf((float4)V); -} +constexpr bool2 isinf(double2 V) { return isinf((float2)V); } +constexpr bool3 isinf(double3 V) { return isinf((float3)V); } +constexpr bool4 isinf(double4 V) { return isinf((float4)V); } //===----------------------------------------------------------------------===// // lerp builtins overloads _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits