Commit 3dec9a89 by Richard Sandiford Committed by Richard Sandiford

Restore flow_bb_inside_loop_p tests (PR 86858)

The series to remove vinfo_for_stmt also removed tests of
flow_bb_inside_loop_p if the call was simply testing whether the
statement was in the vectorisation region.  I'd tried to keep calls
that were testing whether the statement was in a particular loop
(inner or outer), but messed up in vect_is_simple_reduction and
removed calls that were actually needed.  This patch restores them.

I double-checked the other removed calls and I think these are
the only ones affected.

2018-08-08  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR tree-optimization/86858
	* tree-vect-loop.c (vect_is_simple_reduction): Restore
	flow_bb_inside_loop_p calls.

gcc/testsuite/
	PR tree-optimization/86858
	* gcc.dg/vect/pr86858.c: New test.

From-SVN: r263448
parent 4beb6642
2018-08-09 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/86858
* tree-vect-loop.c (vect_is_simple_reduction): Restore
flow_bb_inside_loop_p calls.
2018-08-09 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/86871
* tree-vect-stmts.c (vect_transform_stmt): Use gimple_get_lhs
instead of gimple_assign_lhs.
......
2018-08-09 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/86858
* gcc.dg/vect/pr86858.c: New test.
2018-08-09 Richard Sandiford <richard.sandiford@arm.com>
PR tree-optimization/86871
* gcc.dg/vect/pr86871.c: New test.
......
/* { dg-do compile } */
int a, b, c, d;
char e(char f, char g) { return f + g; }
void h() {
for (; c; ++c) {
d = 0;
for (; d != 8; d = e(d, 3)) {
a = b && a;
b = c;
}
}
}
......@@ -2922,7 +2922,8 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
}
stmt_vec_info def_stmt_info = loop_info->lookup_def (loop_arg);
if (!def_stmt_info)
if (!def_stmt_info
|| !flow_bb_inside_loop_p (loop, gimple_bb (def_stmt_info->stmt)))
return NULL;
if (gassign *def_stmt = dyn_cast <gassign *> (def_stmt_info->stmt))
......@@ -3161,6 +3162,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
&& def2_info->stmt == phi
&& (code == COND_EXPR
|| !def1_info
|| !flow_bb_inside_loop_p (loop, gimple_bb (def1_info->stmt))
|| vect_valid_reduction_input_p (def1_info)))
{
if (dump_enabled_p ())
......@@ -3172,6 +3174,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
&& def1_info->stmt == phi
&& (code == COND_EXPR
|| !def2_info
|| !flow_bb_inside_loop_p (loop, gimple_bb (def2_info->stmt))
|| vect_valid_reduction_input_p (def2_info)))
{
if (! nested_in_vect_loop && orig_code != MINUS_EXPR)
......
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