re PR tree-optimization/64295 (ICE: SIGSEGV (infinite recursion) with -frounding...
authorRichard Biener <rguenther@suse.de>
Mon, 15 Dec 2014 13:01:47 +0000 (13:01 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 15 Dec 2014 13:01:47 +0000 (13:01 +0000)
2014-12-15  Richard Biener  <rguenther@suse.de>

PR middle-end/64295
* match.pd (X / CST -> X * (1 / CST): Use const_binop instead of
fold_binary to compute the constant to multiply with.

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

From-SVN: r218748

gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr64295.c [new file with mode: 0644]

index 6683625fdff9d23d876338eac14e199b36cab827..3e3eda67b243f0e3c11e2cb2d5fd33960a9e8f0b 100644 (file)
@@ -1,3 +1,9 @@
+2014-12-15  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/64295
+       * match.pd (X / CST -> X * (1 / CST): Use const_binop instead of
+       fold_binary to compute the constant to multiply with.
+
 2014-12-15  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/64246
index 4ccb41a2366e1341d8cd95bd67578e921f50c1fb..083d65f9ee1fd9c304f0bc93cddb081622f5b415 100644 (file)
@@ -186,7 +186,7 @@ along with GCC; see the file COPYING3.  If not see
    (if (flag_reciprocal_math
        && !real_zerop (@1))
     (with
-     { tree tem = fold_binary (RDIV_EXPR, type, build_one_cst (type), @1); }
+     { tree tem = const_binop (RDIV_EXPR, type, build_one_cst (type), @1); }
      (if (tem)
       (mult @0 { tem; } ))))
    (if (cst != COMPLEX_CST)
index 8ed52f9666062dc92511ce67b1ba013607fbda87..a4b8957fd99d1a76491fc86a35d64a71c812a09d 100644 (file)
@@ -1,3 +1,8 @@
+2014-12-15  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/64295
+       * gcc.dg/pr64295.c: New testcase.
+
 2014-12-15  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/64246
diff --git a/gcc/testsuite/gcc.dg/pr64295.c b/gcc/testsuite/gcc.dg/pr64295.c
new file mode 100644 (file)
index 0000000..4882f32
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O -frounding-math -funsafe-math-optimizations" } */
+
+double
+f (double g)
+{
+  return g / 3;
+}