[LLVMdev] [Clang] Reasons for lack of -fsingle-precision-constant support? Alternatives?

Philip Reames listmail at philipreames.com
Wed Jul 15 09:30:14 PDT 2015


On 07/15/2015 05:01 AM, ed at modk.it wrote:
> Hi All,
>
> Clang lacks support for the -fsingle-precision-constant flag.  Are 
> there specific reasons for this or is it just waiting to be implemented?
>
> This flag is especially important in the embedded world. From 
> http://processors.wiki.ti.com/index.php/Floating_Point_Optimization#float_vs._double_vs._long_double 
> <https://urldefense.proofpoint.com/v2/url?u=http-3A__processors.wiki.ti.com_index.php_Floating-5FPoint-5FOptimization-23float-5Fvs.-5Fdouble-5Fvs.-5Flong-5Fdouble&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=SziAjiSP8N_rg2b1QO6yqe6DPgAQ-gYuJ_OnsXjdwQo&s=q4wtrH7nx201oaODowm17ir7UAGlp2RfLweJDCQuXLA&e=>:
>
> /Once all of your data is defined as float, there are still cases 
> where you may unknowingly cause the compiler to generate double 
> precision operations. The most common issue is when floating point 
> literals such as 3.14159 are used. In C these literals are of type 
> double, and if they are used in an expression consisting of single 
> precision operands, the operations will be promoted to double 
> precision. The proper way to specify a single precision literal is to 
> use an 'f' suffix, 3.14159f./
> /
> /
> While defining literals without the 'f' suffix may point to 
> performance issues, in our case the target crashes when the 'f' is 
> omitted.  This is an end user programmable system where we can't 
> expect users to add the 'f'.  I don't fully understand why this occurs 
> (this is a bare metal system where user code is run by a quasi-OS 
> which is maintained by a different team and itself is compiled with a 
> different compiler so it's hard to track down) we remedied this with 
> the -fsingle-precision-constant in gcc.  Now that we're moving to 
> clang/llvm we need a solution and expecting the user to add 'f' is not 
> going to work.
Another approach might be to add a dedicated warning (off by default) 
which warns or errors on these cases.  It also seems like a case where a 
clang-tidy rewrite rule could help.
>
> Any thoughts?
>
> Thanks,
> Ed
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150715/41ae2163/attachment.html>


More information about the llvm-dev mailing list