From 3a2edf4cb86827b6aa2509baa6262fe49e11da93 Mon Sep 17 00:00:00 2001 From: Alan Hayward Date: Fri, 3 Jun 2016 13:04:01 +0000 Subject: [PATCH] [3/3] No need to vectorize simple only-live stmts 2016-06-03 Alan Hayward [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 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/vect/vect-live-5.c | 3 +-- gcc/tree-vect-loop.c | 9 +++++---- gcc/tree-vect-stmts.c | 3 ++- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a7476c64d5a..ff69cf53dd3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-06-03 Alan Hayward + + * 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 * tree-vect-loop.c (vect_analyze_loop_operations): Allow live stmts. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0c976b67901..1334193e212 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-06-03 Alan Hayward + + * gcc.dg/vect/vect-live-slp-5.c: Remove dg check. + 2016-06-03 Alan Hayward * gcc.dg/tree-ssa/pr64183.c: Ensure test does not vectorize. diff --git a/gcc/testsuite/gcc.dg/vect/vect-live-5.c b/gcc/testsuite/gcc.dg/vect/vect-live-5.c index f475ca822b1..188e4faf713 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-live-5.c +++ b/gcc/testsuite/gcc.dg/vect/vect-live-5.c @@ -46,5 +46,4 @@ main (void) } /* { 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 "statement is simple and uses invariant. Leaving in place" "vect" } } */ +/* { dg-final { scan-tree-dump-not "vec_stmt_relevant_p: stmt live but not relevant" "vect" } } */ diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 3cf1c795e69..bc1257c86d4 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -6344,11 +6344,12 @@ vectorizable_live_operation (gimple *stmt, if (nested_in_vect_loop_p (loop, stmt)) return false; - /* If STMT is a simple assignment and its inputs are invariant, then it can - remain in place, unvectorized. The original last scalar value that it - computes will be used. */ - if (is_simple_and_all_uses_invariant (stmt, loop_vinfo)) + /* If STMT is not relevant and it is a simple assignment and its inputs are + invariant then it can remain in place, unvectorized. The original last + scalar value that it computes will be used. */ + if (!STMT_VINFO_RELEVANT_P (stmt_info)) { + gcc_assert (is_simple_and_all_uses_invariant (stmt, loop_vinfo)); if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, "statement is simple and uses invariant. Leaving in " diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 5554fe8a46d..373ecd7278d 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -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 ()) dump_printf_loc (MSG_NOTE, vect_location, -- 2.30.2