aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr87259.c14
-rw-r--r--gcc/tree-ssa-math-opts.c6
4 files changed, 29 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b5fb359..a9d008d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e455d89..f6ac25f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..527a60a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr87259.c
@@ -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;
+ }
+}
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index 19bff5c..e5aa531 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -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);
}
}