2019-08-30 Jakub Jelinek <jakub@redhat.com>
Backported from mainline
+ 2019-02-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/88074
+ PR middle-end/89415
+ * toplev.c (do_compile): Double the emin/emax exponents to workaround
+ buggy mpc_norm.
+
+ 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-18 Jakub Jelinek <jakub@redhat.com>
PR target/89361
2019-05-01 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
Backport from mainline.
- 2019-04-30 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+ 2019-04-30 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR target/86538
* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
Define __ARM_FEATURE_ATOMICS
2019-03-21 Bill Schmidt <wschmidt@linux.ibm.com>
- * config/rs6000/rs6000.c (rs6000_analyze_swaps): Rebuild
- ud- and du-chains between phases.
+ * config/rs6000/rs6000.c (rs6000_analyze_swaps): Rebuild
+ ud- and du-chains between phases.
2019-03-21 Matthias Klose <doko@ubuntu.com>
+2019-08-30 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2019-02-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/88074
+ PR middle-end/89415
+ * gcc.dg/pr88074-2.c: New test.
+
+ 2019-02-19 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/88074
+ * gcc.dg/pr88074.c: New testcase.
+
2019-08-30 Jakub Jelinek <jakub@redhat.com>
Backported from mainline
Backport fom mainline
2019-06-21 Jeff Law <law@redhat.com>
- PR tree-optimization/90949
+ PR tree-optimization/90949
* gcc.c-torture/execute/pr90949.c: New test.
2019-06-21 Thomas Koenig <tkoenig@gcc.gnu.org>
--- /dev/null
+/* PR middle-end/88074 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+/* { dg-add-options float128 } */
+/* { dg-require-effective-target float128 } */
+/* { dg-final { scan-tree-dump-not "link_error " "optimized" } } */
+
+extern void link_error (void);
+int
+main ()
+{
+ if (((__FLT128_MAX__ * 0.5 + __FLT128_MAX__ * 0.5i)
+ / (__FLT128_MAX__ * 0.25 + __FLT128_MAX__ * 0.25i))
+ != (_Complex _Float128) 2)
+ link_error ();
+ return 0;
+}
--- /dev/null
+/* { 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;
+}
else
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 (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
+ mode != VOIDmode;
+ mode = GET_MODE_WIDER_MODE (mode))
+ 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;
+ }
+ }
+ /* E.g. mpc_norm assumes it can square a number without bothering with
+ with range scaling, so until that is fixed, double the minimum
+ and maximum exponents, plus add some buffer for arithmetics
+ on the squared numbers. */
+ if (mpfr_set_emin (2 * (min_exp - 1))
+ || mpfr_set_emax (2 * (max_exp + 1)))
+ sorry ("mpfr not configured to handle all float modes");
+
/* Set up the back-end if requested. */
if (!no_backend)
backend_init ();