<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Apr 7, 2015 at 4:36 PM, Tom Stellard <span dir="ltr"><<a href="mailto:tom@stellard.net" target="_blank">tom@stellard.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, Apr 07, 2015 at 03:11:44PM -0700, Richard Smith wrote:<br>
> On Tue, Apr 7, 2015 at 3:05 PM, Tom Stellard <<a href="mailto:tom@stellard.net">tom@stellard.net</a>> wrote:<br>
><br>
> > On Fri, Jan 23, 2015 at 04:40:50PM -0000, Sanjay Patel wrote:<br>
> > > Author: spatel<br>
> > > Date: Fri Jan 23 10:40:50 2015<br>
> > > New Revision: 226915<br>
> > ><br>
> > > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=226915&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=226915&view=rev</a><br>
> > > Log:<br>
> > > Process the -fno-signed-zeros optimization flag (PR20870)<br>
> > ><br>
> > > The driver currently accepts but ignores the -fno-signed-zeros flag.<br>
> > > This patch passes the flag through and enables 'nsz' fast-math-flag<br>
> > > generation in IR.<br>
> > ><br>
> > > The existing OpenCL flag for the same functionality is made into an<br>
> > > alias here. It may be removed in a subsequent patch.<br>
> > ><br>
> ><br>
> > What is the reason for removing this option?  This will break OpenCL<br>
> > implementations that use clang.<br>
><br>
><br>
> We do not provide any stability guarantees for Clang's -cc1 interface in<br>
> general. Are these implementations running -cc1 directly, or passing this<br>
> flag via -Xclang? If the latter, we should add a proper (stable)<br>
> driver-level flag for it.<br>
><br>
<br>
</span>I understand there are no stability guarantees, but regardless I feel<br>
like it's useful to keep it around as an alias since it is part of<br>
the OpenCL spec.  Is there a high cost involved in keeping it?<br></blockquote><div><br></div><div>It's not really reasonable to expect Clang's -cc1 to implement the flags required by the OpenCL spec. Your OpenCL driver should be recognizing those flags and handling them in whatever manner is appropriate.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In the OpenCL implementation I'm working on (clover), we are using the<br>
C++ API, so the argument is being passed via:<br>
clang::CompilerInvocation::CreateFromArgs()</blockquote><div><br></div><div>Could you instead set NoSignedZeros directly on the CodeGenOptions of the CompilerInvocation after calling CreateFromArgs?</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888">
-Tom<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
> -Tom<br>
> ><br>
> > > This should resolve bug 20870 (<br>
> > <a href="http://llvm.org/bugs/show_bug.cgi?id=20870" target="_blank">http://llvm.org/bugs/show_bug.cgi?id=20870</a> );<br>
> > > patches for the optimizer were checked in at:<br>
> > > <a href="http://llvm.org/viewvc/llvm-project?view=revision&revision=225050" target="_blank">http://llvm.org/viewvc/llvm-project?view=revision&revision=225050</a><br>
> > > <a href="http://llvm.org/viewvc/llvm-project?view=revision&revision=224583" target="_blank">http://llvm.org/viewvc/llvm-project?view=revision&revision=224583</a><br>
> > ><br>
> > > Differential Revision: <a href="http://reviews.llvm.org/D6873" target="_blank">http://reviews.llvm.org/D6873</a><br>
> > ><br>
> > ><br>
> > > Modified:<br>
> > >     cfe/trunk/include/clang/Driver/CC1Options.td<br>
> > >     cfe/trunk/include/clang/Driver/Options.td<br>
> > >     cfe/trunk/lib/Driver/Tools.cpp<br>
> > >     cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
> > >     cfe/trunk/test/CodeGen/finite-math.c<br>
> > >     cfe/trunk/test/Driver/fast-math.c<br>
> > ><br>
> > > Modified: cfe/trunk/include/clang/Driver/CC1Options.td<br>
> > > URL:<br>
> > <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=226915&r1=226914&r2=226915&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=226915&r1=226914&r2=226915&view=diff</a><br>
> > ><br>
> > ==============================================================================<br>
> > > --- cfe/trunk/include/clang/Driver/CC1Options.td (original)<br>
> > > +++ cfe/trunk/include/clang/Driver/CC1Options.td Fri Jan 23 10:40:50 2015<br>
> > > @@ -580,7 +580,7 @@ def cl_finite_math_only : Flag<["-"], "c<br>
> > >    HelpText<"OpenCL only. Allow floating-point optimizations that assume<br>
> > arguments and results are not NaNs or +-Inf.">;<br>
> > >  def cl_kernel_arg_info : Flag<["-"], "cl-kernel-arg-info">,<br>
> > >    HelpText<"OpenCL only. Generate kernel argument metadata.">;<br>
> > > -def cl_no_signed_zeros : Flag<["-"], "cl-no-signed-zeros">,<br>
> > > +def : Flag<["-"], "cl-no-signed-zeros">, Alias<fno_signed_zeros>,<br>
> > >    HelpText<"OpenCL only. Allow optimizations to ignore the signedness<br>
> > of the floating-point zero.">;<br>
> > >  def cl_unsafe_math_optimizations : Flag<["-"],<br>
> > "cl-unsafe-math-optimizations">,<br>
> > >    HelpText<"OpenCL only. Allow unsafe floating-point optimizations.<br>
> > Also implies -cl-no-signed-zeros and -cl-mad-enable">;<br>
> > ><br>
> > > Modified: cfe/trunk/include/clang/Driver/Options.td<br>
> > > URL:<br>
> > <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=226915&r1=226914&r2=226915&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=226915&r1=226914&r2=226915&view=diff</a><br>
> > ><br>
> > ==============================================================================<br>
> > > --- cfe/trunk/include/clang/Driver/Options.td (original)<br>
> > > +++ cfe/trunk/include/clang/Driver/Options.td Fri Jan 23 10:40:50 2015<br>
> > > @@ -566,7 +566,9 @@ def fno_reciprocal_math : Flag<["-"], "f<br>
> > >  def ffinite_math_only : Flag<["-"], "ffinite-math-only">,<br>
> > Group<f_Group>, Flags<[CC1Option]>;<br>
> > >  def fno_finite_math_only : Flag<["-"], "fno-finite-math-only">,<br>
> > Group<f_Group>;<br>
> > >  def fsigned_zeros : Flag<["-"], "fsigned-zeros">, Group<f_Group>;<br>
> > > -def fno_signed_zeros : Flag<["-"], "fno-signed-zeros">, Group<f_Group>;<br>
> > > +def fno_signed_zeros :<br>
> > > +  Flag<["-"], "fno-signed-zeros">, Group<f_Group>, Flags<[CC1Option]>,<br>
> > > +  HelpText<"Allow optimizations that ignore the sign of floating point<br>
> > zeros">;<br>
> > >  def fhonor_nans : Flag<["-"], "fhonor-nans">, Group<f_Group>;<br>
> > >  def fno_honor_nans : Flag<["-"], "fno-honor-nans">, Group<f_Group>;<br>
> > >  def fhonor_infinities : Flag<["-"], "fhonor-infinities">,<br>
> > Group<f_Group>;<br>
> > ><br>
> > > Modified: cfe/trunk/lib/Driver/Tools.cpp<br>
> > > URL:<br>
> > <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=226915&r1=226914&r2=226915&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=226915&r1=226914&r2=226915&view=diff</a><br>
> > ><br>
> > ==============================================================================<br>
> > > --- cfe/trunk/lib/Driver/Tools.cpp (original)<br>
> > > +++ cfe/trunk/lib/Driver/Tools.cpp Fri Jan 23 10:40:50 2015<br>
> > > @@ -2955,6 +2955,8 @@ void Clang::ConstructJob(Compilation &C,<br>
> > >        !TrappingMath)<br>
> > >      CmdArgs.push_back("-menable-unsafe-fp-math");<br>
> > ><br>
> > > +  if (!SignedZeros)<br>
> > > +    CmdArgs.push_back("-fno-signed-zeros");<br>
> > ><br>
> > >    // Validate and pass through -fp-contract option.<br>
> > >    if (Arg *A = Args.getLastArg(options::OPT_ffast_math,<br>
> > FastMathAliasOption,<br>
> > ><br>
> > > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
> > > URL:<br>
> > <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=226915&r1=226914&r2=226915&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=226915&r1=226914&r2=226915&view=diff</a><br>
> > ><br>
> > ==============================================================================<br>
> > > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
> > > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Jan 23 10:40:50<br>
> > 2015<br>
> > > @@ -441,7 +441,7 @@ static bool ParseCodeGenArgs(CodeGenOpti<br>
> > >                         Args.hasArg(OPT_cl_unsafe_math_optimizations) ||<br>
> > >                         Args.hasArg(OPT_cl_finite_math_only) ||<br>
> > >                         Args.hasArg(OPT_cl_fast_relaxed_math));<br>
> > > -  Opts.NoSignedZeros = Args.hasArg(OPT_cl_no_signed_zeros);<br>
> > > +  Opts.NoSignedZeros = Args.hasArg(OPT_fno_signed_zeros);<br>
> > >    Opts.NoZeroInitializedInBSS =<br>
> > Args.hasArg(OPT_mno_zero_initialized_in_bss);<br>
> > >    Opts.BackendOptions = Args.getAllArgValues(OPT_backend_option);<br>
> > >    Opts.NumRegisterParameters = getLastArgIntValue(Args, OPT_mregparm,<br>
> > 0, Diags);<br>
> > ><br>
> > > Modified: cfe/trunk/test/CodeGen/finite-math.c<br>
> > > URL:<br>
> > <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/finite-math.c?rev=226915&r1=226914&r2=226915&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/finite-math.c?rev=226915&r1=226914&r2=226915&view=diff</a><br>
> > ><br>
> > ==============================================================================<br>
> > > --- cfe/trunk/test/CodeGen/finite-math.c (original)<br>
> > > +++ cfe/trunk/test/CodeGen/finite-math.c Fri Jan 23 10:40:50 2015<br>
> > > @@ -1,11 +1,15 @@<br>
> > > -// RUN: %clang_cc1 -ffinite-math-only -emit-llvm -o - %s | FileCheck %s<br>
> > > +// RUN: %clang_cc1 -ffinite-math-only -emit-llvm -o - %s | FileCheck %s<br>
> > -check-prefix=CHECK -check-prefix=FINITE<br>
> > > +// RUN: %clang_cc1 -fno-signed-zeros -emit-llvm -o - %s | FileCheck %s<br>
> > -check-prefix=CHECK  -check-prefix=NSZ<br>
> > > +<br>
> > >  float f0, f1, f2;<br>
> > ><br>
> > >  void foo(void) {<br>
> > >    // CHECK-LABEL: define void @foo()<br>
> > ><br>
> > > -  // CHECK: fadd nnan ninf<br>
> > > +  // FINITE: fadd nnan ninf<br>
> > > +  // NSZ: fadd nsz<br>
> > >    f0 = f1 + f2;<br>
> > ><br>
> > >    // CHECK: ret<br>
> > >  }<br>
> > > +<br>
> > ><br>
> > > Modified: cfe/trunk/test/Driver/fast-math.c<br>
> > > URL:<br>
> > <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fast-math.c?rev=226915&r1=226914&r2=226915&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fast-math.c?rev=226915&r1=226914&r2=226915&view=diff</a><br>
> > ><br>
> > ==============================================================================<br>
> > > --- cfe/trunk/test/Driver/fast-math.c (original)<br>
> > > +++ cfe/trunk/test/Driver/fast-math.c Fri Jan 23 10:40:50 2015<br>
> > > @@ -25,6 +25,21 @@<br>
> > >  // CHECK-NO-INFS-NO-FAST-MATH: "-cc1"<br>
> > >  // CHECK-NO-INFS-NO-FAST-MATH-NOT: "-menable-no-infs"<br>
> > >  //<br>
> > > +// RUN: %clang -### -fno-signed-zeros -c %s 2>&1 \<br>
> > > +// RUN:   | FileCheck --check-prefix=CHECK-NO-SIGNED-ZEROS %s<br>
> > > +// CHECK-NO-SIGNED-ZEROS: "-cc1"<br>
> > > +// CHECK-NO-SIGNED-ZEROS: "-fno-signed-zeros"<br>
> > > +//<br>
> > > +// RUN: %clang -### -fno-fast-math -fno-signed-zeros -c %s 2>&1 \<br>
> > > +// RUN:   | FileCheck --check-prefix=CHECK-NO-FAST-MATH-NO-SIGNED-ZEROS<br>
> > %s<br>
> > > +// CHECK-NO-FAST-MATH-NO-SIGNED-ZEROS: "-cc1"<br>
> > > +// CHECK-NO-FAST-MATH-NO-SIGNED-ZEROS: "-fno-signed-zeros"<br>
> > > +//<br>
> > > +// RUN: %clang -### -fno-signed-zeros -fno-fast-math -c %s 2>&1 \<br>
> > > +// RUN:   | FileCheck --check-prefix=CHECK-NO-SIGNED-ZEROS-NO-FAST-MATH<br>
> > %s<br>
> > > +// CHECK-NO-SIGNED-ZEROS-NO-FAST-MATH: "-cc1"<br>
> > > +// CHECK-NO-SIGNED-ZEROS-NO-FAST-MATH-NOT: "-fno-signed-zeros"<br>
> > > +//<br>
> > >  // RUN: %clang -### -fno-honor-nans -c %s 2>&1 \<br>
> > >  // RUN:   | FileCheck --check-prefix=CHECK-NO-NANS %s<br>
> > >  // CHECK-NO-NANS: "-cc1"<br>
> > ><br>
> > ><br>
> > > _______________________________________________<br>
> > > cfe-commits mailing list<br>
> > > <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> > > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
> > _______________________________________________<br>
> > cfe-commits mailing list<br>
> > <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
> ><br>
</div></div></blockquote></div><br></div></div>