[tree-ssa-mathopts] PR tree-optimization/87259: Call execute_cse_reciprocals_1 before...
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Fri, 14 Sep 2018 13:13:14 +0000 (13:13 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Fri, 14 Sep 2018 13:13:14 +0000 (13:13 +0000)
PR tree-optimization/87259
PR lto/87283
(pass_cse_reciprocals::execute): Run optimize_recip_sqrt after
execute_cse_reciprocals_1 has tried transforming.

PR tree-optimization/87259
* gcc.dg/pr87259.c: New test.

From-SVN: r264312

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr87259.c [new file with mode: 0644]
gcc/tree-ssa-math-opts.c

index b5fb359..a9d008d 100644 (file)
@@ -1,3 +1,10 @@
+2018-09-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR tree-optimization/87259
+       PR lto/87283
+       (pass_cse_reciprocals::execute): Run optimize_recip_sqrt after
+       execute_cse_reciprocals_1 has tried transforming.
+
 2018-09-14  Aldy Hernandez  <aldyh@redhat.com>
 
        * tree-vrp.c (extract_range_from_binary_expr_1): Normalize
index e455d89..f6ac25f 100644 (file)
@@ -1,3 +1,8 @@
+2018-09-14  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR tree-optimization/87259
+       * gcc.dg/pr87259.c: New test.
+
 2018-09-13  Martin Sebor  <msebor@redhat.com>
            Jeff Law  <law@redhat.com>
 
diff --git a/gcc/testsuite/gcc.dg/pr87259.c b/gcc/testsuite/gcc.dg/pr87259.c
new file mode 100644 (file)
index 0000000..527a60a
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-Ofast" } */
+
+int a, b, c;
+int *e;
+float f;
+void h() {
+  for (int g;;) {
+    float d = b, i = 0 / f, j = a / (f * f), k, l = 0 / d;
+    c = i + j;
+    g = l;
+    e[g] = c / d * k / d;
+  }
+}
index 19bff5c..e5aa531 100644 (file)
@@ -547,7 +547,7 @@ free_bb (struct occurrence *occ)
    depending on the uses of x, r1, r2.  This removes one multiplication and
    allows the sqrt and division operations to execute in parallel.
    DEF_GSI is the gsi of the initial division by sqrt that defines
-   DEF (x in the example abovs).  */
+   DEF (x in the example above).  */
 
 static void
 optimize_recip_sqrt (gimple_stmt_iterator *def_gsi, tree def)
@@ -947,13 +947,13 @@ pass_cse_reciprocals::execute (function *fun)
              && FLOAT_TYPE_P (TREE_TYPE (def))
              && TREE_CODE (def) == SSA_NAME)
            {
+             execute_cse_reciprocals_1 (&gsi, def);
+             stmt = gsi_stmt (gsi);
              if (flag_unsafe_math_optimizations
                  && is_gimple_assign (stmt)
                  && !stmt_can_throw_internal (stmt)
                  && gimple_assign_rhs_code (stmt) == RDIV_EXPR)
                optimize_recip_sqrt (&gsi, def);
-             else
-               execute_cse_reciprocals_1 (&gsi, def);
            }
        }