David Blaikie via llvm-dev
2020-May-27 06:11 UTC
[llvm-dev] By default clang does not emit trap insn
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/20200526/df6cbb8c/attachment.html>
kamlesh kumar via llvm-dev
2020-May-27 06:59 UTC
[llvm-dev] By default clang does not emit trap insn
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/98e3847b/attachment.html>
kamlesh kumar via llvm-dev
2020-May-27 07:47 UTC
[llvm-dev] By default clang does not emit trap insn
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>