[llvm-dev] By default clang does not emit trap insn

kamlesh kumar via llvm-dev llvm-dev at lists.llvm.org
Wed May 27 00:47:34 PDT 2020


Here is problematic code:
https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChains/Clang.cpp#L2836
if `TrappingMath` is false it should set "-fno-trapping-math",but it isn't
because there is another else if.

it should be changed to

  if (TrappingMath) {
    // FP Exception Behavior is also set to strict
    assert(FPExceptionBehavior.equals("strict"));
    CmdArgs.push_back("-ftrapping-math");
  } else
    CmdArgs.push_back("-fno-trapping-math");

any thoughts?

./kamlesh


On Wed, May 27, 2020 at 12:29 PM kamlesh kumar <kamleshbhalui at gmail.com>
wrote:

> cced the author.
>
> On Wed, May 27, 2020 at 11:41 AM David Blaikie <dblaikie at gmail.com> wrote:
>
>> looks like experimental/work in progress support:
>> https://reviews.llvm.org/D62731
>>
>> On Tue, May 26, 2020 at 10:39 PM kamlesh kumar via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>>
>>>
>>> On Wed, May 27, 2020 at 11:06 AM kamlesh kumar <kamleshbhalui at gmail.com>
>>> wrote:
>>>
>>>> Hi Devs,
>>>> going by this link https://llvm.org/docs/LangRef.html#floatenv
>>>> it says that floating point operation does not have side effects by
>>>> defaults.
>>>> but when compile a test case
>>>> i.e.
>>>> cat a.c
>>>> float foo(float a, float b)
>>>> {
>>>> return a+b;
>>>> }
>>>>
>>>> $clang a.c -O2 -S -emit-llvm
>>>> emit ir like:
>>>> $cat a.ll
>>>> ---------------------------------------
>>>> ; ModuleID = 'a.c'
>>>> source_filename = "a.c"
>>>> target datalayout =
>>>> "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>>>> target triple = "x86_64-unknown-linux-gnu"
>>>>
>>>> ; Function Attrs: norecurse nounwind readnone uwtable
>>>> define dso_local float @foo(float %a, float %b) local_unnamed_addr #0 {
>>>> entry:
>>>>   %add = fadd float %a, %b
>>>>   ret float %add
>>>> }
>>>>
>>>> attributes #0 = { norecurse nounwind readnone uwtable
>>>> "correctly-rounded-divide-sqrt-fp-math"="false"
>>>> "disable-tail-calls"="false" "frame-pointer"="none"
>>>> "less-precise-fpmad"="false" "min-legal-vector-width"="0"
>>>> "no-infs-fp-math"="false" "no-jump-tables"="false"
>>>> "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false"
>>>> "no-trapping-math"="false" "stack-protector-buffer-size"="8"
>>>> "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87"
>>>> "unsafe-fp-math"="false" "use-soft-float"="false" }
>>>> ---------------------
>>>> and the setting "no-trapping-math"="false" should mean -ftrapping-math
>>>> but it does not and it also contradict with documentation.
>>>>
>>>> I think clang should emit this "no-trapping-math"="true" by default if
>>>> it goes with this assumption
>>>> https://llvm.org/docs/LangRef.html#floatenv ?
>>>> what is default behavior of clang -fno-trapping-math or -ftrapping-math?
>>>> also clang default behavior does not match gcc?
>>>> https://godbolt.org/z/B3YvxE
>>>>
>>>> ./kamlesh
>>>>
>>>>
>>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200527/696e7e1b/attachment.html>


More information about the llvm-dev mailing list