r199249 - Darwin: add __sinpi (etc) and __exp10 libbuiltins

Tim Northover tnorthover at apple.com
Tue Jan 14 11:26:04 PST 2014


Author: tnorthover
Date: Tue Jan 14 13:26:03 2014
New Revision: 199249

URL: http://llvm.org/viewvc/llvm-project?rev=199249&view=rev
Log:
Darwin: add __sinpi (etc) and __exp10 libbuiltins

These functions have the same constness properties of the normal libm
functions, which allows LLVM to optimise code better in general. There
are also a couple of specific optimisations that only trigger when
these are properly marked.

rdar://problem/13729466

Modified:
    cfe/trunk/include/clang/Basic/Builtins.def
    cfe/trunk/test/CodeGen/libcall-declarations.c

Modified: cfe/trunk/include/clang/Basic/Builtins.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def?rev=199249&r1=199248&r2=199249&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/Builtins.def (original)
+++ cfe/trunk/include/clang/Basic/Builtins.def Tue Jan 14 13:26:03 2014
@@ -1137,6 +1137,21 @@ LIBBUILTIN(ctanh, "XdXd", "fnc", "comple
 LIBBUILTIN(ctanhf, "XfXf", "fnc", "complex.h", ALL_LANGUAGES)
 LIBBUILTIN(ctanhl, "XLdXLd", "fnc", "complex.h", ALL_LANGUAGES)
 
+// __sinpi and friends are OS X specific library functions, but otherwise much
+// like the standard (non-complex) sin (etc).
+LIBBUILTIN(__sinpi, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__sinpif, "ff", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(__cospi, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__cospif, "ff", "fne", "math.h", ALL_LANGUAGES)
+
+LIBBUILTIN(__tanpi, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__tanpif, "ff", "fne", "math.h", ALL_LANGUAGES)
+
+// Similarly, __exp10 is OS X only
+LIBBUILTIN(__exp10, "dd", "fne", "math.h", ALL_LANGUAGES)
+LIBBUILTIN(__exp10f, "ff", "fne", "math.h", ALL_LANGUAGES)
+
 // Blocks runtime Builtin math library functions
 LIBBUILTIN(_Block_object_assign, "vv*vC*iC", "f", "Blocks.h", ALL_LANGUAGES)
 LIBBUILTIN(_Block_object_dispose, "vvC*iC", "f", "Blocks.h", ALL_LANGUAGES)

Modified: cfe/trunk/test/CodeGen/libcall-declarations.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/libcall-declarations.c?rev=199249&r1=199248&r2=199249&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/libcall-declarations.c (original)
+++ cfe/trunk/test/CodeGen/libcall-declarations.c Tue Jan 14 13:26:03 2014
@@ -244,6 +244,16 @@ long double _Complex ctanl(long double _
 double _Complex ctanh(double _Complex);
 float _Complex ctanhf(float _Complex);
 long double _Complex ctanhl(long double _Complex);
+
+double __sinpi(double);
+float __sinpif(float);
+double __cospi(double);
+float __cospif(float);
+double __tanpi(double);
+float __tanpif(float);
+
+double __exp10(double);
+float __exp10f(float);
 #ifdef __cplusplus
 }
 #endif
@@ -298,7 +308,8 @@ void *use[] = {
   F(crealf),     F(creall),     F(csin),       F(csinf),       F(csinl),
   F(csinh),      F(csinhf),     F(csinhl),     F(csqrt),       F(csqrtf),
   F(csqrtl),     F(ctan),       F(ctanf),      F(ctanl),       F(ctanh),
-  F(ctanhf),     F(ctanhl)
+  F(ctanhf),     F(ctanhl),     F(__sinpi),    F(__sinpif),    F(__cospi),
+  F(__cospif),   F(__tanpi),    F(__tanpif),   F(__exp10),     F(__exp10f)
 };
 
 // CHECK-NOERRNO: declare double @atan2(double, double) [[NUW:#[0-9]+]]
@@ -510,6 +521,14 @@ void *use[] = {
 // CHECK-NOERRNO: declare <2 x float> @ctanf(<2 x float>) [[NUW]]
 // CHECK-NOERRNO: declare { double, double } @ctanh(double, double) [[NUW]]
 // CHECK-NOERRNO: declare <2 x float> @ctanhf(<2 x float>) [[NUW]]
+// CHECK-NOERRNO: declare double @__sinpi(double) [[NUW]]
+// CHECK-NOERRNO: declare float @__sinpif(float) [[NUW]]
+// CHECK-NOERRNO: declare double @__cospi(double) [[NUW]]
+// CHECK-NOERRNO: declare float @__cospif(float) [[NUW]]
+// CHECK-NOERRNO: declare double @__tanpi(double) [[NUW]]
+// CHECK-NOERRNO: declare float @__tanpif(float) [[NUW]]
+// CHECK-NOERRNO: declare double @__exp10(double) [[NUW]]
+// CHECK-NOERRNO: declare float @__exp10f(float) [[NUW]]
 
 // CHECK-ERRNO: declare i32 @abs(i32) [[NUW:#[0-9]+]]
 // CHECK-ERRNO: declare i64 @labs(i64) [[NUW]]





More information about the cfe-commits mailing list