[llvm-dev] RFC: Constant folding math functions for long double
James Molloy via llvm-dev
llvm-dev at lists.llvm.org
Mon Apr 4 10:46:51 PDT 2016
> IMO if constant folding of transcendental functions makes a significant
difference for your program, you likely are doing something strange
Alas it's not as simple as that. Currently, if you declare:
LLVM emits two calls to logl() with constant arguments, a fdiv and a fptoui.
Libc++'s implementation is consumed and folded much more nicely by LLVM,
but at the moment anyone comparing LLVM and GCC will think that GCC is
around 40% better for some workloads.
On Mon, 4 Apr 2016 at 17:49 Reid Kleckner <rnk at google.com> wrote:
> My feeling is that we shouldn't be relying on host long double routines.
> We're already skating on thin ice by relying on host double and float
> routines. This is a great way to make the compilation result vary depending
> on the host, which is something we try to avoid.
> An optional MPFR dependency would also be pretty painful. I expect it will
> frequently be missing and will not be exercised by most buildbots.
> On Mon, Apr 4, 2016 at 6:59 AM, James Molloy via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>> Clang is currently unable to constant fold calls to math.h functions such
>> as logl(), expl() etc.
>> The problem is that APFloat doesn't have these functions, so Clang is
>> forced to rely on the host math library. Because long double isn't
>> portable, we only ever query the host math library for double or float
>> I can see three methods for allowing constant folding for types that are
>> larger than double, some more expensive than others:
>> 1. Introduce a dependency on libMPFR, as GCC does. The dependency could
>> be hard or soft, with a fallback to the current behaviour if it doesn't
>> 2. Write the trancendental functions ourselves in APFloat (yuck!)
>> 3. If the long double format on the compiler host is the same as the
>> target, use the host library.
>> (2) is the hardest. (3) is the easiest, but only works in a subset of
>> cases and I really don't like the idea of better output when compiling on
>> one platform compared to another (with equivalent targets).
>> What do people think about (1)? Or is this completely out of the question?
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev