diff --git a/clang/lib/Headers/hlsl/hlsl_intrinsics.h b/clang/lib/Headers/hlsl/hlsl_intrinsics.h --- a/clang/lib/Headers/hlsl/hlsl_intrinsics.h +++ b/clang/lib/Headers/hlsl/hlsl_intrinsics.h @@ -12,6 +12,7 @@ __attribute__((clang_builtin_alias(__builtin_hlsl_wave_active_count_bits))) uint WaveActiveCountBits(bool bBit); +// abs builtins __attribute__((clang_builtin_alias(__builtin_abs))) int abs(int In); __attribute__((clang_builtin_alias(__builtin_labs))) int64_t abs(int64_t In); __attribute__((clang_builtin_alias(__builtin_fabsf))) float abs(float In); @@ -21,4 +22,12 @@ __attribute__((clang_builtin_alias(__builtin_fabsf16))) half abs(half In); #endif +// sqrt builtins +__attribute__((clang_builtin_alias(__builtin_sqrt))) double sqrt(double In); +__attribute__((clang_builtin_alias(__builtin_sqrtf))) float sqrt(float In); + +#ifdef __HLSL_ENABLE_16_BIT +__attribute__((clang_builtin_alias(__builtin_sqrtf16))) half sqrt(half In); +#endif + #endif //_HLSL_HLSL_INTRINSICS_H_ diff --git a/clang/test/CodeGenHLSL/builtins/sqrt.hlsl b/clang/test/CodeGenHLSL/builtins/sqrt.hlsl new file mode 100644 --- /dev/null +++ b/clang/test/CodeGenHLSL/builtins/sqrt.hlsl @@ -0,0 +1,32 @@ +// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ +// RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ +// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s +// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ +// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ +// RUN: -o - | FileCheck %s --check-prefix=NO_HALF + +double sqrt_d(double x) +{ + return sqrt(x); +} + +// CHECK: define noundef double @"?sqrt_d@@YANN@Z"( +// CHECK: call double @llvm.sqrt.f64(double %0) + +float sqrt_f(float x) +{ + return sqrt(x); +} + +// CHECK: define noundef float @"?sqrt_f@@YAMM@Z"( +// CHECK: call float @llvm.sqrt.f32(float %0) + +half sqrt_h(half x) +{ + return sqrt(x); +} + +// CHECK: define noundef half @"?sqrt_h@@YA$f16@$f16@@Z"( +// CHECK: call half @llvm.sqrt.f16(half %0) +// NO_HALF: define noundef float @"?sqrt_h@@YA$halff@$halff@@Z"( +// NO_HALF: call float @llvm.sqrt.f32(float %0) \ No newline at end of file