[PATCH] Add __sinpi and friends as libcalls

Alp Toker alp at nuanti.com
Tue Jan 14 08:41:57 PST 2014


Hi Tim,

There are at least a couple of library builtins that (kind of) qualify 
as precedents:

|// 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)||
|||
So the change seems harmless enough. Perhaps include a comment 
explaining why they've been added and keep the Apple-flavoured builtins 
close to each other.

Meanwhile __exp10() function also seems to fall into this category -- 
man __exp10(3) says the variant exists because it "may be computed more 
efficiently than pow(10,x)". Want to go for that one too?

Alp.


On 06/01/2014 15:18, Tim Northover wrote:
> Hi,
>
> OS X version 10.9 onwards has a bunch of functions for computing things like sin(PI * x) called, unimaginatively, __sinpi (etc). It also has a __sincospi function, which LLVM can optimise already, but obviously only if it knows the __sinpi and __cospi are builtin.
>
> Currently Clang doesn't know this so I'd like to teach it. Adding OS-specific builtins seemed a little sketchy but they're in the '__' namespace so we're allowed to do what we want as a compiler. I'm hoping it'll be OK.
>
> Can I commit?
>
> Cheers.
>
> Tim.
>
> http://llvm-reviews.chandlerc.com/D2516
>
> Files:
>    include/clang/Basic/Builtins.def
>    test/CodeGen/libcall-declarations.c
>
> Index: include/clang/Basic/Builtins.def
> ===================================================================
> --- include/clang/Basic/Builtins.def
> +++ include/clang/Basic/Builtins.def
> @@ -1137,6 +1137,15 @@
>   LIBBUILTIN(ctanhf, "XfXf", "fnc", "complex.h", ALL_LANGUAGES)
>   LIBBUILTIN(ctanhl, "XLdXLd", "fnc", "complex.h", ALL_LANGUAGES)
>   
> +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)
> +
>   // 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)
> Index: test/CodeGen/libcall-declarations.c
> ===================================================================
> --- test/CodeGen/libcall-declarations.c
> +++ test/CodeGen/libcall-declarations.c
> @@ -244,6 +244,13 @@
>   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);
>   #ifdef __cplusplus
>   }
>   #endif
> @@ -298,7 +305,8 @@
>     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)
>   };
>   
>   // CHECK-NOERRNO: declare double @atan2(double, double) [[NUW:#[0-9]+]]
> @@ -510,6 +518,12 @@
>   // 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-ERRNO: declare i32 @abs(i32) [[NUW:#[0-9]+]]
>   // CHECK-ERRNO: declare i64 @labs(i64) [[NUW]]
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- 
http://www.nuanti.com
the browser experts

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140114/479de79c/attachment.html>


More information about the cfe-commits mailing list