Commit 83fce900 by Richard Biener Committed by Richard Biener

re PR tree-optimization/88074 (g++ hangs on math expression)

2019-02-19  Richard Biener  <rguenther@suse.de>

        PR middle-end/88074
	* toplev.c (do_compile): Initialize mpfr's exponent range
	based on available float modes.

	* gcc.dg/pr88074.c: New testcase.

From-SVN: r269015
parent be200c5c
2019-02-19 Richard Biener <rguenther@suse.de>
PR middle-end/88074
* toplev.c (do_compile): Initialize mpfr's exponent range
based on available float modes.
2019-02-19 Eric Botcazou <ebotcazou@adacore.com> 2019-02-19 Eric Botcazou <ebotcazou@adacore.com>
* rtlanal.c (get_initial_register_offset): Fall back to the estimate * rtlanal.c (get_initial_register_offset): Fall back to the estimate
......
2019-02-19 Richard Biener <rguenther@suse.de>
PR middle-end/88074
* gcc.dg/pr88074.c: New testcase.
2019-02-19 Jakub Jelinek <jakub@redhat.com> 2019-02-19 Jakub Jelinek <jakub@redhat.com>
PR middle-end/89303 PR middle-end/89303
......
/* { dg-do compile } */
/* { dg-options "-O" } */
#include <complex.h>
int main()
{
_Complex double x;
__real x = 3.091e+8;
__imag x = -4.045e+8;
/* This used to spend huge amounts of compile-time inside mpc. */
volatile _Complex double y = ctan (x);
return 0;
}
...@@ -2153,6 +2153,30 @@ do_compile () ...@@ -2153,6 +2153,30 @@ do_compile ()
else else
int_n_enabled_p[i] = false; int_n_enabled_p[i] = false;
/* Initialize mpfrs exponent range. This is important to get
underflow/overflow in a reasonable timeframe. */
machine_mode mode;
int min_exp = -1;
int max_exp = 1;
FOR_EACH_MODE_IN_CLASS (mode, MODE_FLOAT)
if (SCALAR_FLOAT_MODE_P (mode))
{
const real_format *fmt = REAL_MODE_FORMAT (mode);
if (fmt)
{
/* fmt->emin - fmt->p + 1 should be enough but the
back-and-forth dance in real_to_decimal_for_mode we
do for checking fails due to rounding effects then. */
if ((fmt->emin - fmt->p) < min_exp)
min_exp = fmt->emin - fmt->p;
if (fmt->emax > max_exp)
max_exp = fmt->emax;
}
}
if (mpfr_set_emin (min_exp)
|| mpfr_set_emax (max_exp))
sorry ("mpfr not configured to handle all float modes");
/* Set up the back-end if requested. */ /* Set up the back-end if requested. */
if (!no_backend) if (!no_backend)
backend_init (); backend_init ();
......
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