Commit c5edab65 by Eric Botcazou Committed by Eric Botcazou

re PR tree-optimization/34036 (ICE with control flow in the middle of basic…

re PR tree-optimization/34036 (ICE  with control flow in the middle of basic block for -fnon-call-exceptions)

	PR tree-optimization/34036
	* opts.c (set_fast_math_flags): Do not set flags in common
	with set_unsafe_math_optimizations_flags, invoke it directly.
	(set_unsafe_math_optimizations_flags): Unset flag_trapping_math
	and flag_signed_zeros.
	* toplev.c (process_options): Force flag_associative_math to 0 and
	warn, if it is set and either flag_trapping_math or flag_signed_zeros
	is set too.
	* doc/invoke.texi (Optimize Options): Document the new behavior
	of -funsafe-math-optimizations, that -fassociative-math requires
	both -fno-signed-zeros and -fno-trapping-math and make it clear
	that -fno-trapping-math requires -fno-signaling-nans.

From-SVN: r130286
parent 88af50eb
2007-11-19 Eric Botcazou <ebotcazou@libertysurf.fr>
PR tree-optimization/34036
* opts.c (set_fast_math_flags): Do not set flags in common
with set_unsafe_math_optimizations_flags, invoke it directly.
(set_unsafe_math_optimizations_flags): Unset flag_trapping_math
and flag_signed_zeros.
* toplev.c (process_options): Force flag_associative_math to 0 and
warn, if it is set and either flag_trapping_math or flag_signed_zeros
is set too.
* doc/invoke.texi (Optimize Options): Document the new behavior
of -funsafe-math-optimizations, that -fassociative-math requires
both -fno-signed-zeros and -fno-trapping-math and make it clear
that -fno-trapping-math requires -fno-signaling-nans.
2007-11-18 Jakub Jelinek <jakub@redhat.com> 2007-11-18 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/34132 PR rtl-optimization/34132
...@@ -6274,7 +6274,8 @@ it can result in incorrect output for programs which depend on ...@@ -6274,7 +6274,8 @@ it can result in incorrect output for programs which depend on
an exact implementation of IEEE or ISO rules/specifications for an exact implementation of IEEE or ISO rules/specifications for
math functions. It may, however, yield faster code for programs math functions. It may, however, yield faster code for programs
that do not require the guarantees of these specifications. that do not require the guarantees of these specifications.
Enables @option{-freciprocal-math} and @option{-fassociative-math}. Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
@option{-fassociative-math} and @option{-freciprocal-math}.
The default is @option{-fno-unsafe-math-optimizations}. The default is @option{-fno-unsafe-math-optimizations}.
...@@ -6288,8 +6289,9 @@ well as ignore NaNs and inhibit or create underflow or overflow (and ...@@ -6288,8 +6289,9 @@ well as ignore NaNs and inhibit or create underflow or overflow (and
thus cannot be used on a code which relies on rounding behavior like thus cannot be used on a code which relies on rounding behavior like
@code{(x + 2**52) - 2**52)}. May also reorder floating-point comparisons @code{(x + 2**52) - 2**52)}. May also reorder floating-point comparisons
and thus may not be used when ordered comparisons are required. and thus may not be used when ordered comparisons are required.
This flag doesn't make much sense without @option{-fno-signed-zeros} This option requires that both @option{-fno-signed-zeros} and
or @option{-fno-trapping-math} or with @option{-frounding-math}. @option{-fno-trapping-math} be in effect. Moreover, it doesn't make
much sense with @option{-frounding-math}.
The default is @option{-fno-associative-math}. The default is @option{-fno-associative-math}.
...@@ -6331,9 +6333,9 @@ The default is @option{-fsigned-zeros}. ...@@ -6331,9 +6333,9 @@ The default is @option{-fsigned-zeros}.
@opindex fno-trapping-math @opindex fno-trapping-math
Compile code assuming that floating-point operations cannot generate Compile code assuming that floating-point operations cannot generate
user-visible traps. These traps include division by zero, overflow, user-visible traps. These traps include division by zero, overflow,
underflow, inexact result and invalid operation. This option implies underflow, inexact result and invalid operation. This option requires
@option{-fno-signaling-nans}. Setting this option may allow faster that @option{-fno-signaling-nans} be in effect. Setting this option may
code if one relies on ``non-stop'' IEEE arithmetic, for example. allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
This option should never be turned on by any @option{-O} option since This option should never be turned on by any @option{-O} option since
it can result in incorrect output for programs which depend on it can result in incorrect output for programs which depend on
......
...@@ -1868,12 +1868,9 @@ set_Wstrict_aliasing (int onoff) ...@@ -1868,12 +1868,9 @@ set_Wstrict_aliasing (int onoff)
void void
set_fast_math_flags (int set) set_fast_math_flags (int set)
{ {
flag_trapping_math = !set;
flag_unsafe_math_optimizations = set; flag_unsafe_math_optimizations = set;
flag_associative_math = set; set_unsafe_math_optimizations_flags (set);
flag_reciprocal_math = set;
flag_finite_math_only = set; flag_finite_math_only = set;
flag_signed_zeros = !set;
flag_errno_math = !set; flag_errno_math = !set;
if (set) if (set)
{ {
...@@ -1888,8 +1885,10 @@ set_fast_math_flags (int set) ...@@ -1888,8 +1885,10 @@ set_fast_math_flags (int set)
void void
set_unsafe_math_optimizations_flags (int set) set_unsafe_math_optimizations_flags (int set)
{ {
flag_reciprocal_math = set; flag_trapping_math = !set;
flag_signed_zeros = !set;
flag_associative_math = set; flag_associative_math = set;
flag_reciprocal_math = set;
} }
/* Return true iff flags are set as if -ffast-math. */ /* Return true iff flags are set as if -ffast-math. */
......
2007-11-19 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.dg/pr33007.c: Expect new warning.
* gcc.dg/tree-ssa/recip-5.c: Likewise.
* g++.dg/opt/pr34036.C: New test.
2007-11-18 Jakub Jelinek <jakub@redhat.com> 2007-11-18 Jakub Jelinek <jakub@redhat.com>
PR c++/30988 PR c++/30988
/* { dg-do compile } */
/* { dg-options "-O2 -fnon-call-exceptions -ffast-math -fsignaling-nans" } */
/* { dg-warning "-fassociative-math disabled" "" { target *-*-* } 1 } */
template <class T>
class ggStaticArray {
public:
~ggStaticArray();
};
template <class T>
class ggGrid {
public:
ggGrid() : grid() { }
ggStaticArray<T> grid;
};
class mrGrid {
public:
mrGrid(void);
protected:
ggGrid<int*> grid;
double multiplier;
};
mrGrid::mrGrid(void)
{
double xMeasure, yMeasure, zMeasure;
double cellDimension;
cellDimension = multiplier * (xMeasure * yMeasure * zMeasure);
}
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O -ffast-math -ftrapping-math" } */ /* { dg-options "-O -ffast-math -ftrapping-math" } */
/* { dg-warning "-fassociative-math disabled" "" { target *-*-* } 1 } */
long long
foo (int i) foo (int i)
......
/* { dg-options "-O1 -funsafe-math-optimizations -ftrapping-math -fdump-tree-recip -fdump-tree-optimized" } */ /* { dg-options "-O1 -funsafe-math-optimizations -ftrapping-math -fdump-tree-recip -fdump-tree-optimized" } */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-warning "-fassociative-math disabled" "" { target *-*-* } 1 } */
/* Test the reciprocal optimizations together with trapping math. */ /* Test the reciprocal optimizations together with trapping math. */
......
...@@ -1988,6 +1988,13 @@ process_options (void) ...@@ -1988,6 +1988,13 @@ process_options (void)
if (flag_signaling_nans) if (flag_signaling_nans)
flag_trapping_math = 1; flag_trapping_math = 1;
/* We cannot reassociate if we want traps or signed zeros.  */
if (flag_associative_math && (flag_trapping_math || flag_signed_zeros))
{
warning (0, "-fassociative-math disabled; other options take precedence");
flag_associative_math = 0;
}
/* With -fcx-limited-range, we do cheap and quick complex arithmetic. */ /* With -fcx-limited-range, we do cheap and quick complex arithmetic. */
if (flag_cx_limited_range) if (flag_cx_limited_range)
flag_complex_method = 0; flag_complex_method = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment