[LLVMdev] More careful treatment of floating point exceptions

Owen Anderson resistor at mac.com
Fri Sep 19 13:07:17 PDT 2014


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.eduA  A  A  A  A http://llvm.cs.uiuc.edu
>>     http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list