r226915 - Process the -fno-signed-zeros optimization flag (PR20870)

Richard Smith richard at metafoo.co.uk
Tue Apr 7 15:11:44 PDT 2015


On Tue, Apr 7, 2015 at 3:05 PM, Tom Stellard <tom at stellard.net> wrote:

> On Fri, Jan 23, 2015 at 04:40:50PM -0000, Sanjay Patel wrote:
> > Author: spatel
> > Date: Fri Jan 23 10:40:50 2015
> > New Revision: 226915
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=226915&view=rev
> > Log:
> > Process the -fno-signed-zeros optimization flag (PR20870)
> >
> > The driver currently accepts but ignores the -fno-signed-zeros flag.
> > This patch passes the flag through and enables 'nsz' fast-math-flag
> > generation in IR.
> >
> > The existing OpenCL flag for the same functionality is made into an
> > alias here. It may be removed in a subsequent patch.
> >
>
> What is the reason for removing this option?  This will break OpenCL
> implementations that use clang.


We do not provide any stability guarantees for Clang's -cc1 interface in
general. Are these implementations running -cc1 directly, or passing this
flag via -Xclang? If the latter, we should add a proper (stable)
driver-level flag for it.

-Tom
>
> > This should resolve bug 20870 (
> http://llvm.org/bugs/show_bug.cgi?id=20870 );
> > patches for the optimizer were checked in at:
> > http://llvm.org/viewvc/llvm-project?view=revision&revision=225050
> > http://llvm.org/viewvc/llvm-project?view=revision&revision=224583
> >
> > Differential Revision: http://reviews.llvm.org/D6873
> >
> >
> > Modified:
> >     cfe/trunk/include/clang/Driver/CC1Options.td
> >     cfe/trunk/include/clang/Driver/Options.td
> >     cfe/trunk/lib/Driver/Tools.cpp
> >     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> >     cfe/trunk/test/CodeGen/finite-math.c
> >     cfe/trunk/test/Driver/fast-math.c
> >
> > Modified: cfe/trunk/include/clang/Driver/CC1Options.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=226915&r1=226914&r2=226915&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Driver/CC1Options.td (original)
> > +++ cfe/trunk/include/clang/Driver/CC1Options.td Fri Jan 23 10:40:50 2015
> > @@ -580,7 +580,7 @@ def cl_finite_math_only : Flag<["-"], "c
> >    HelpText<"OpenCL only. Allow floating-point optimizations that assume
> arguments and results are not NaNs or +-Inf.">;
> >  def cl_kernel_arg_info : Flag<["-"], "cl-kernel-arg-info">,
> >    HelpText<"OpenCL only. Generate kernel argument metadata.">;
> > -def cl_no_signed_zeros : Flag<["-"], "cl-no-signed-zeros">,
> > +def : Flag<["-"], "cl-no-signed-zeros">, Alias<fno_signed_zeros>,
> >    HelpText<"OpenCL only. Allow optimizations to ignore the signedness
> of the floating-point zero.">;
> >  def cl_unsafe_math_optimizations : Flag<["-"],
> "cl-unsafe-math-optimizations">,
> >    HelpText<"OpenCL only. Allow unsafe floating-point optimizations.
> Also implies -cl-no-signed-zeros and -cl-mad-enable">;
> >
> > Modified: cfe/trunk/include/clang/Driver/Options.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=226915&r1=226914&r2=226915&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Driver/Options.td (original)
> > +++ cfe/trunk/include/clang/Driver/Options.td Fri Jan 23 10:40:50 2015
> > @@ -566,7 +566,9 @@ def fno_reciprocal_math : Flag<["-"], "f
> >  def ffinite_math_only : Flag<["-"], "ffinite-math-only">,
> Group<f_Group>, Flags<[CC1Option]>;
> >  def fno_finite_math_only : Flag<["-"], "fno-finite-math-only">,
> Group<f_Group>;
> >  def fsigned_zeros : Flag<["-"], "fsigned-zeros">, Group<f_Group>;
> > -def fno_signed_zeros : Flag<["-"], "fno-signed-zeros">, Group<f_Group>;
> > +def fno_signed_zeros :
> > +  Flag<["-"], "fno-signed-zeros">, Group<f_Group>, Flags<[CC1Option]>,
> > +  HelpText<"Allow optimizations that ignore the sign of floating point
> zeros">;
> >  def fhonor_nans : Flag<["-"], "fhonor-nans">, Group<f_Group>;
> >  def fno_honor_nans : Flag<["-"], "fno-honor-nans">, Group<f_Group>;
> >  def fhonor_infinities : Flag<["-"], "fhonor-infinities">,
> Group<f_Group>;
> >
> > Modified: cfe/trunk/lib/Driver/Tools.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=226915&r1=226914&r2=226915&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Driver/Tools.cpp (original)
> > +++ cfe/trunk/lib/Driver/Tools.cpp Fri Jan 23 10:40:50 2015
> > @@ -2955,6 +2955,8 @@ void Clang::ConstructJob(Compilation &C,
> >        !TrappingMath)
> >      CmdArgs.push_back("-menable-unsafe-fp-math");
> >
> > +  if (!SignedZeros)
> > +    CmdArgs.push_back("-fno-signed-zeros");
> >
> >    // Validate and pass through -fp-contract option.
> >    if (Arg *A = Args.getLastArg(options::OPT_ffast_math,
> FastMathAliasOption,
> >
> > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=226915&r1=226914&r2=226915&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Jan 23 10:40:50
> 2015
> > @@ -441,7 +441,7 @@ static bool ParseCodeGenArgs(CodeGenOpti
> >                         Args.hasArg(OPT_cl_unsafe_math_optimizations) ||
> >                         Args.hasArg(OPT_cl_finite_math_only) ||
> >                         Args.hasArg(OPT_cl_fast_relaxed_math));
> > -  Opts.NoSignedZeros = Args.hasArg(OPT_cl_no_signed_zeros);
> > +  Opts.NoSignedZeros = Args.hasArg(OPT_fno_signed_zeros);
> >    Opts.NoZeroInitializedInBSS =
> Args.hasArg(OPT_mno_zero_initialized_in_bss);
> >    Opts.BackendOptions = Args.getAllArgValues(OPT_backend_option);
> >    Opts.NumRegisterParameters = getLastArgIntValue(Args, OPT_mregparm,
> 0, Diags);
> >
> > Modified: cfe/trunk/test/CodeGen/finite-math.c
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/finite-math.c?rev=226915&r1=226914&r2=226915&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/test/CodeGen/finite-math.c (original)
> > +++ cfe/trunk/test/CodeGen/finite-math.c Fri Jan 23 10:40:50 2015
> > @@ -1,11 +1,15 @@
> > -// RUN: %clang_cc1 -ffinite-math-only -emit-llvm -o - %s | FileCheck %s
> > +// RUN: %clang_cc1 -ffinite-math-only -emit-llvm -o - %s | FileCheck %s
> -check-prefix=CHECK -check-prefix=FINITE
> > +// RUN: %clang_cc1 -fno-signed-zeros -emit-llvm -o - %s | FileCheck %s
> -check-prefix=CHECK  -check-prefix=NSZ
> > +
> >  float f0, f1, f2;
> >
> >  void foo(void) {
> >    // CHECK-LABEL: define void @foo()
> >
> > -  // CHECK: fadd nnan ninf
> > +  // FINITE: fadd nnan ninf
> > +  // NSZ: fadd nsz
> >    f0 = f1 + f2;
> >
> >    // CHECK: ret
> >  }
> > +
> >
> > Modified: cfe/trunk/test/Driver/fast-math.c
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fast-math.c?rev=226915&r1=226914&r2=226915&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/test/Driver/fast-math.c (original)
> > +++ cfe/trunk/test/Driver/fast-math.c Fri Jan 23 10:40:50 2015
> > @@ -25,6 +25,21 @@
> >  // CHECK-NO-INFS-NO-FAST-MATH: "-cc1"
> >  // CHECK-NO-INFS-NO-FAST-MATH-NOT: "-menable-no-infs"
> >  //
> > +// RUN: %clang -### -fno-signed-zeros -c %s 2>&1 \
> > +// RUN:   | FileCheck --check-prefix=CHECK-NO-SIGNED-ZEROS %s
> > +// CHECK-NO-SIGNED-ZEROS: "-cc1"
> > +// CHECK-NO-SIGNED-ZEROS: "-fno-signed-zeros"
> > +//
> > +// RUN: %clang -### -fno-fast-math -fno-signed-zeros -c %s 2>&1 \
> > +// RUN:   | FileCheck --check-prefix=CHECK-NO-FAST-MATH-NO-SIGNED-ZEROS
> %s
> > +// CHECK-NO-FAST-MATH-NO-SIGNED-ZEROS: "-cc1"
> > +// CHECK-NO-FAST-MATH-NO-SIGNED-ZEROS: "-fno-signed-zeros"
> > +//
> > +// RUN: %clang -### -fno-signed-zeros -fno-fast-math -c %s 2>&1 \
> > +// RUN:   | FileCheck --check-prefix=CHECK-NO-SIGNED-ZEROS-NO-FAST-MATH
> %s
> > +// CHECK-NO-SIGNED-ZEROS-NO-FAST-MATH: "-cc1"
> > +// CHECK-NO-SIGNED-ZEROS-NO-FAST-MATH-NOT: "-fno-signed-zeros"
> > +//
> >  // RUN: %clang -### -fno-honor-nans -c %s 2>&1 \
> >  // RUN:   | FileCheck --check-prefix=CHECK-NO-NANS %s
> >  // CHECK-NO-NANS: "-cc1"
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150407/992e4198/attachment.html>


More information about the cfe-commits mailing list