[llvm-dev] RFC: Constant folding math functions for long double
Chandler Carruth via llvm-dev
llvm-dev at lists.llvm.org
Mon Apr 4 11:41:05 PDT 2016
My two cents:
1) While I'm sympathetic to Steve's point about this not always being
desirable, the fact than *many* other compilers do this will ensure that
code is written assuming it. I think we need to have support for this in
order to have even remotely performance portable library code.
2) I strongly dislike an optional dependency on MPFR. We shouldn't have
critical functionality tied to system libraries IMO. I understand that it
is a *lot* of work, but I think we need to produce or get contributed a
reasonable implementation of these routines under the LLVM license. As an
added benefit, we might be able to (eventually) share the code for them
with a runtime library that provides portable implementations for systems
where hardware support is lacking.
On Mon, Apr 4, 2016 at 11:31 AM James Molloy via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> If you're interested, include/bits/random.tcc:3312
> (std::generate_canonical()). I wish I could just point people at libc++,
> but that's outside of my control. As for fixing the library, that horse
> bolted some time ago.
> On Mon, 4 Apr 2016 at 18:50 Stephen Canon <scanon at apple.com> wrote:
>> That sounds like a library issue that qualifies as “somewhat strange”.
>> Why does this require a log at all?
>> – Steve
>> On Apr 4, 2016, at 10:46 AM, James Molloy via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>> Hi Joerg,
>> > 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:
>> std::uniform_real_distribution<float> x;
>> LLVM emits two calls to logl() with constant arguments, a fdiv and a
>> 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 exist.
>>>> 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
>>>> LLVM Developers mailing list
>>>> llvm-dev at lists.llvm.org
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev