[llvm-dev] FENV_ACCESS and floating point LibFunc calls
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Wed May 10 17:16:04 PDT 2017
On 05/10/2017 06:57 PM, Kaylor, Andrew wrote:
>
> >Unless you want to assume that the frontend knows about all functions that backend
>
> >knows about, which I don't think we do, I think this will essentially mean
> adding nobuiltin
>
> >to all calls. This is what we do if you compile using Clang with
> -fno-builtin or
>
> >-ffreestanding. This will work, although it seems better to have a dedicated
> attribute for this.
>
> > no_fp_opts, no_fp_builtin or whatever.
>
> I considered the idea of an FP-specific attribute anyway, because
> eventually I think I’ll want to do things with these calls that
> nobuiltins really should be disallowing. It hadn’t occurred to me
> that the front end doesn’t know which calls we might be tinkering
> with. I guess I was assuming that we’d add something to the front end
> to recognize the FP library calls, but I can understand why we might
> want to not do that.
>
Yea, I don't think we want that coupling. We obviously do know the
standard C ones, but the backend can recognize all sorts of things.
> Other than that, will this approach solve my problem?
>
Yes. I believe that it will.
> Apart from the existing intrinsics (which I believe the front end uses
> for builtins?) and LibFunc handling, are there other cases I need to
> be thinking about?
>
I think that should be everything.
-Hal
> Thanks,
>
> Andy
>
> *From:*Hal Finkel [mailto:hfinkel at anl.gov]
> *Sent:* Wednesday, May 10, 2017 4:45 PM
> *To:* Kaylor, Andrew <andrew.kaylor at intel.com>; llvm-dev
> <llvm-dev at lists.llvm.org>
> *Subject:* Re: [llvm-dev] FENV_ACCESS and floating point LibFunc calls
>
> On 05/10/2017 06:17 PM, Kaylor, Andrew via llvm-dev wrote:
>
> Hi all,
>
> Background
>
> I’ve been working on adding the necessary support to LLVM for
> clang to be able to support the STDC FENV_ACCESS pragma, which
> basically allows users to modify rounding mode at runtime and
> depend on the value of floating-point status flags or to unmask
> floating point exceptions without unexpected side effects. I’ve
> committed an initial patch (r293226) that adds constrained
> intrinsics for the basic FP operations, and I have a patch up for
> review now (https://reviews.llvm.org/D32319) that adds constrained
> versions of a number of libm-like FP intrinsics.
>
> Current problem
>
> Now I’m trying to make sure I have a good solution for the way in
> which the optimizer handles recognized calls to libm functions
> (sqrt, pow, cos, sin, etc.). Basically, I need to prevent all
> passes from making any modifications to these calls that would
> make assumptions about rounding mode or improperly affect the FP
> status flags (either suppressing flags that should be present or
> setting flags that should not be set). For instance, there are
> circumstances in which the optimizer will constant fold a call to
> one of these functions if the value of the arguments are known at
> compile time, but this constant folding generally assumes the
> default rounding mode and if the library call would have set a
> status flag, I need the flag to be set.
>
> Question
>
> My question is, can/should I just rely on the front end setting
> the “nobuiltin” attribute for the call site in any location where
> the FP behavior needs to be restricted?
>
>
> Unless you want to assume that the frontend knows about all functions
> that backend knows about, which I don't think we do, I think this will
> essentially mean adding nobuiltin to all calls. This is what we do if
> you compile using Clang with -fno-builtin or -ffreestanding. This will
> work, although it seems better to have a dedicated attribute for this.
> no_fp_opts, no_fp_builtin or whatever.
>
> -Hal
>
>
> Ideally, I would like to be able to conditionally enable
> optimizations like constant folding if I am able to prove that the
> rounding mode, though dynamic, is known for the callsite at
> compile time (the constrained intrinsics have a mechanism to
> enable this), but at the moment I am more concerned about
> correctness and would be willing to sacrifice optimizations to get
> correct behavior. Long term, I was thinking that maybe I could do
> something like attach metadata to indicate rounding mode and
> exception behavior when they were known.
>
> Is there a better way to do this?
>
> Thanks,
>
> Andy
>
>
>
>
> _______________________________________________
>
> LLVM Developers mailing list
>
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170510/4c219e67/attachment.html>
More information about the llvm-dev
mailing list