Commit 115b4708 by Kyrylo Tkachov Committed by Kyrylo Tkachov

[tree-ssa-mathopts] PR tree-optimization/87259: Call execute_cse_reciprocals_1…

[tree-ssa-mathopts] PR tree-optimization/87259: Call execute_cse_reciprocals_1 before trying optimize_recip_sqrt

	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
parent 310ee703
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> 2018-09-14 Aldy Hernandez <aldyh@redhat.com>
* tree-vrp.c (extract_range_from_binary_expr_1): Normalize * tree-vrp.c (extract_range_from_binary_expr_1): Normalize
......
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> 2018-09-13 Martin Sebor <msebor@redhat.com>
Jeff Law <law@redhat.com> Jeff Law <law@redhat.com>
......
/* { 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;
}
}
...@@ -547,7 +547,7 @@ free_bb (struct occurrence *occ) ...@@ -547,7 +547,7 @@ free_bb (struct occurrence *occ)
depending on the uses of x, r1, r2. This removes one multiplication and depending on the uses of x, r1, r2. This removes one multiplication and
allows the sqrt and division operations to execute in parallel. allows the sqrt and division operations to execute in parallel.
DEF_GSI is the gsi of the initial division by sqrt that defines 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 static void
optimize_recip_sqrt (gimple_stmt_iterator *def_gsi, tree def) optimize_recip_sqrt (gimple_stmt_iterator *def_gsi, tree def)
...@@ -947,13 +947,13 @@ pass_cse_reciprocals::execute (function *fun) ...@@ -947,13 +947,13 @@ pass_cse_reciprocals::execute (function *fun)
&& FLOAT_TYPE_P (TREE_TYPE (def)) && FLOAT_TYPE_P (TREE_TYPE (def))
&& TREE_CODE (def) == SSA_NAME) && TREE_CODE (def) == SSA_NAME)
{ {
execute_cse_reciprocals_1 (&gsi, def);
stmt = gsi_stmt (gsi);
if (flag_unsafe_math_optimizations if (flag_unsafe_math_optimizations
&& is_gimple_assign (stmt) && is_gimple_assign (stmt)
&& !stmt_can_throw_internal (stmt) && !stmt_can_throw_internal (stmt)
&& gimple_assign_rhs_code (stmt) == RDIV_EXPR) && gimple_assign_rhs_code (stmt) == RDIV_EXPR)
optimize_recip_sqrt (&gsi, def); optimize_recip_sqrt (&gsi, def);
else
execute_cse_reciprocals_1 (&gsi, def);
} }
} }
......
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