forked from OSchip/llvm-project
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. 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 llvm-svn: 226915
This commit is contained in:
parent
6ee521c7eb
commit
76c9e0986c
|
@ -580,7 +580,7 @@ def cl_finite_math_only : Flag<["-"], "cl-finite-math-only">,
|
|||
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">;
|
||||
|
|
|
@ -566,7 +566,9 @@ def fno_reciprocal_math : Flag<["-"], "fno-reciprocal-math">, Group<f_Group>;
|
|||
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>;
|
||||
|
|
|
@ -2955,6 +2955,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
!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,
|
||||
|
|
|
@ -441,7 +441,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||
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);
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue