Commit 3a2edf4c by Alan Hayward Committed by Alan Hayward

[3/3] No need to vectorize simple only-live stmts

2016-06-03  Alan Hayward  <alan.hayward@arm.com>

[3/3] No need to vectorize simple only-live stmts

gcc/
	* tree-vect-stmts.c (vect_stmt_relevant_p): Do not vectorize non live
	relevant stmts which are simple and invariant.
	* tree-vect-loop.c (vectorizable_live_operation): Check relevance
	instead of simple and invariant

testsuite/
	* gcc.dg/vect/vect-live-slp-5.c: Remove dg check.

From-SVN: r237065
parent b28ead45
2016-06-03 Alan Hayward <alan.hayward@arm.com> 2016-06-03 Alan Hayward <alan.hayward@arm.com>
* tree-vect-stmts.c (vect_stmt_relevant_p): Do not vectorize non live
relevant stmts which are simple and invariant.
* tree-vect-loop.c (vectorizable_live_operation): Check relevance
instead of simple and invariant
2016-06-03 Alan Hayward <alan.hayward@arm.com>
* tree-vect-loop.c (vect_analyze_loop_operations): Allow live stmts. * tree-vect-loop.c (vect_analyze_loop_operations): Allow live stmts.
(vectorizable_reduction): Check for new relevant state. (vectorizable_reduction): Check for new relevant state.
(vectorizable_live_operation): vectorize live stmts using (vectorizable_live_operation): vectorize live stmts using
......
2016-06-03 Alan Hayward <alan.hayward@arm.com> 2016-06-03 Alan Hayward <alan.hayward@arm.com>
* gcc.dg/vect/vect-live-slp-5.c: Remove dg check.
2016-06-03 Alan Hayward <alan.hayward@arm.com>
* gcc.dg/tree-ssa/pr64183.c: Ensure test does not vectorize. * gcc.dg/tree-ssa/pr64183.c: Ensure test does not vectorize.
* testsuite/gcc.dg/vect/no-scevccp-vect-iv-2.c: Remove xfail. * testsuite/gcc.dg/vect/no-scevccp-vect-iv-2.c: Remove xfail.
* gcc.dg/vect/vect-live-1.c: New test. * gcc.dg/vect/vect-live-1.c: New test.
......
...@@ -46,5 +46,4 @@ main (void) ...@@ -46,5 +46,4 @@ main (void)
} }
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "vec_stmt_relevant_p: stmt live but not relevant" 1 "vect" } } */ /* { dg-final { scan-tree-dump-not "vec_stmt_relevant_p: stmt live but not relevant" "vect" } } */
/* { dg-final { scan-tree-dump "statement is simple and uses invariant. Leaving in place" "vect" } } */
...@@ -6344,11 +6344,12 @@ vectorizable_live_operation (gimple *stmt, ...@@ -6344,11 +6344,12 @@ vectorizable_live_operation (gimple *stmt,
if (nested_in_vect_loop_p (loop, stmt)) if (nested_in_vect_loop_p (loop, stmt))
return false; return false;
/* If STMT is a simple assignment and its inputs are invariant, then it can /* If STMT is not relevant and it is a simple assignment and its inputs are
remain in place, unvectorized. The original last scalar value that it invariant then it can remain in place, unvectorized. The original last
computes will be used. */ scalar value that it computes will be used. */
if (is_simple_and_all_uses_invariant (stmt, loop_vinfo)) if (!STMT_VINFO_RELEVANT_P (stmt_info))
{ {
gcc_assert (is_simple_and_all_uses_invariant (stmt, loop_vinfo));
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location, dump_printf_loc (MSG_NOTE, vect_location,
"statement is simple and uses invariant. Leaving in " "statement is simple and uses invariant. Leaving in "
......
...@@ -335,7 +335,8 @@ vect_stmt_relevant_p (gimple *stmt, loop_vec_info loop_vinfo, ...@@ -335,7 +335,8 @@ vect_stmt_relevant_p (gimple *stmt, loop_vec_info loop_vinfo,
} }
} }
if (*live_p && *relevant == vect_unused_in_scope) if (*live_p && *relevant == vect_unused_in_scope
&& !is_simple_and_all_uses_invariant (stmt, loop_vinfo))
{ {
if (dump_enabled_p ()) if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location, dump_printf_loc (MSG_NOTE, vect_location,
......
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