[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
This commit is contained in:
Kyrylo Tkachov 2018-09-14 13:13:14 +00:00 committed by Kyrylo Tkachov
parent 310ee703a2
commit 115b470829
4 changed files with 29 additions and 3 deletions

View 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

View 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>

View File

@ -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;
}
}

View 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);
}
}