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

Richard Smith richard at metafoo.co.uk
Tue Apr 7 17:45:20 PDT 2015


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

> On Tue, Apr 07, 2015 at 03:11:44PM -0700, Richard Smith wrote:
> > 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.
> >
>
> I understand there are no stability guarantees, but regardless I feel
> like it's useful to keep it around as an alias since it is part of
> the OpenCL spec.  Is there a high cost involved in keeping it?
>

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.

In the OpenCL implementation I'm working on (clover), we are using the
> C++ API, so the argument is being passed via:
> clang::CompilerInvocation::CreateFromArgs()


Could you instead set NoSignedZeros directly on the CodeGenOptions of the
CompilerInvocation after calling CreateFromArgs?

-Tom
>
>
>
> > -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/ccd60413/attachment.html>


More information about the cfe-commits mailing list