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>