[LLVMdev] More careful treatment of floating point exceptions

Hal Finkel hfinkel at anl.gov
Sat Sep 27 19:11:04 PDT 2014


----- Original Message -----
> From: "Sergey Dmitrouk" <sdmitrouk at accesssoftek.com>
> To: "Owen Anderson" <resistor at mac.com>
> Cc: "LLVMdev" <llvmdev at cs.uiuc.edu>
> Sent: Thursday, September 25, 2014 4:47:52 AM
> Subject: Re: [LLVMdev] More careful treatment of floating point exceptions
> 
> Hi again,
> 
> It's partially done.  My concern is that it won't be accepted as is
> because of adding the flag parameter in a lot of places.  I'd like to
> show
> what it looks like (here, not on llvm-commit yet),  maybe someone
> could
> suggest a better way.

Hi Sergey,

Thanks for working on this!

I definitely recommend moving this thread to llvm-commits; that's where we do patch review (even if that review recommends an entirely different direction).

For Clang, you'll likely want a new flag in LangOptions.

 -Hal

> 
> There are two sources of the flag: field of TargetOptions and
> function
> attribute.  I had to add the later one for InstCombine pass.  Still
> it's
> not enough for one place in Clang, where I can't get to code
> generation
> attribute.
> 
> Please find the attached patches.  Is there a better way to implement
> patch
> number 0006?  Would it make sense to mark IR instructions instead or
> maybe create some special forms for them?  The issue here is caused
> by an
> assumption that floating point operations are target independent,
> which
> doesn't hold if one wants an option to switch between optimized
> floating
> point operations and IEEE conformance.
> 
> Basically, I'm looking for another way to communicate state of the
> option
> to "target-independent" IR optimizations, which could replace adding
> additional argument to a bunch of functions.
> 
> Thanks,
> Sergey
> 
> On Fri, Sep 19, 2014 at 01:07:17PM -0700, Owen Anderson wrote:
> > Both forms are useful.  There are some platforms (some GPUs and
> > accelerators) that simply do not support floating point
> > exceptions, and there are other platforms (most CPUs) that can
> > suppose precise floating point exceptions, but where we generally
> > don’t want to for performance reasons.
> > 
> > I suspect there’s a tripartite breakdown at play here:
> > 	(1) Use cases where we don’t care about exceptions at all, e.g.
> > 	compiling GLSL programs for a GPU.
> > 	(2) Use cases where we want strict IEEE conformance.
> > 	(3) Use cases where we want to support a reasonable degree of
> > 	conformance (e.g., still getting a division by zero exception),
> > 	but without all the performance constrains of (2).  This would be
> > 	the default for normal clang invocations.
> > 
> > —Owen
> > 
> > > On Sep 19, 2014, at 12:59 PM, Sergey Dmitrouk
> > > <sdmitrouk at accesssoftek.com> wrote:
> > > 
> > > Hi Sanjay,
> > > 
> > > Thanks, I saw this flag and it's definitely should be considered,
> > > but
> > > it appeared to me to be static characteristic of target platform.
> > >  I'm
> > > not sure how appropriate it would be to change its value from a
> > > front-end.
> > > It says "Has", while optional flag would rather say "Uses"
> > > meaning that
> > > implementation cares about floating point exceptions.
> > > 
> > > Regards,
> > > Sergey
> > > 
> > > On Fri, Sep 19, 2014 at 12:01:07PM -0700, Sanjay Patel wrote:
> > >>   Hi Sergey -
> > >> 
> > >>   Does this solve part of the problem?
> > >>   http://llvm.org/viewvc/llvm-project?view=revision&revision=215222
> > >>   On Fri, Sep 19, 2014 at 9:12 AM, Sergey Dmitrouk
> > >>   <sdmitrouk at accesssoftek.com> wrote:
> > >> 
> > >>     Hi,
> > >> 
> > >>     I'd like to make code emitted by LLVM that includes floating
> > >>     point
> > >>     operations which raise FP exceptions behave closer to what
> > >>     is defined by
> > >>     IEEE754 standard.A  I'm not going to "fix everything", just
> > >>     incorrect
> > >>     behaviour I faced so far.
> > >> 
> > >>     Most of troubles regarding FP exceptions are caused by
> > >>     optimizations, so
> > >>     there should be a flag to disable/block them if one wants to
> > >>     get better
> > >>     code in a sense of its IEEE754 conformance.A  I couldn't
> > >>     find an
> > >>     existing
> > >>     flag for this and would like to introduce one.A  I guess it
> > >>     should be
> > >>     added to llvm::TargetOptions (e.g. "IEEE754FPE"), then
> > >>     -std=c99 or
> > >>     separate option could enable it from front-end (Clang in
> > >>     this case).
> > >> 
> > >>     I'm doing this for ARM platform and the flag should be
> > >>     reachable from
> > >>     all these places in LLVM:
> > >> 
> > >>     A - lib/Analysis/ValueTracking.cpp
> > >>     A - lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> > >>     A - lib/IR/ConstantFold.cpp
> > >>     A - lib/Target/ARM/ARMFastISel.cpp
> > >>     A - lib/Target/ARM/ARMISelLowering.cpp
> > >>     A - lib/Target/ARM/ARMInstrVFP.td (through predicates)
> > >>     A - lib/Target/ARM/ARMRegisterInfo.td (through predicates)
> > >> 
> > >>     and in Clang:
> > >> 
> > >>     A - lib/AST/ExprConstant.cpp
> > >> 
> > >>     Did I get it right and there is no such flag so far?A  Does
> > >>     what I'm
> > >>     suggesting sounds reasonable?
> > >> 
> > >>     Thanks,
> > >>     Sergey
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory




More information about the llvm-dev mailing list