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 @@ -15,11 +15,6 @@ // 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); -__attribute__((clang_builtin_alias(__builtin_fabs))) double abs(double In); - #ifdef __HLSL_ENABLE_16_BIT __attribute__((clang_builtin_alias(__builtin_elementwise_abs))) int16_t abs(int16_t); @@ -76,5 +71,12 @@ __attribute__((clang_builtin_alias(__builtin_sqrtf16))) half sqrt(half In); #endif +// ceil builtins +__attribute__((clang_builtin_alias(__builtin_ceil))) double ceil(double In); +__attribute__((clang_builtin_alias(__builtin_ceilf))) float ceil(float In); + +#ifdef __HLSL_ENABLE_16_BIT +__attribute__((clang_builtin_alias(__builtin_ceilf16))) half ceil(half In); +#endif #endif //_HLSL_HLSL_INTRINSICS_H_ diff --git a/clang/test/CodeGenHLSL/builtins/ceil.hlsl b/clang/test/CodeGenHLSL/builtins/ceil.hlsl new file mode 100644 --- /dev/null +++ b/clang/test/CodeGenHLSL/builtins/ceil.hlsl @@ -0,0 +1,32 @@ +// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ +// RUN: dxil-pc-shadermodel6.2-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.2-library %s -emit-llvm -disable-llvm-passes \ +// RUN: -o - | FileCheck %s --check-prefix=NO_HALF + +double ceil_d(double x) +{ + return ceil(x); +} + +// CHECK: define noundef double @"?ceil_d@@YANN@Z"( +// CHECK: call double @llvm.ceil.f64(double %0) + +float ceil_f(float x) +{ + return ceil(x); +} + +// CHECK: define noundef float @"?ceil_f@@YAMM@Z"( +// CHECK: call float @llvm.ceil.f32(float %0) + +half ceil_h(half x) +{ + return ceil(x); +} + +// CHECK: define noundef half @"?ceil_h@@YA$f16@$f16@@Z"( +// CHECK: call half @llvm.ceil.f16(half %0) +// NO_HALF: define noundef float @"?ceil_h@@YA$halff@$halff@@Z"( +// NO_HALF: call float @llvm.ceil.f32(float %0)