[3/3] No need to vectorize simple only-live stmts
authorAlan Hayward <alan.hayward@arm.com>
Fri, 3 Jun 2016 13:04:01 +0000 (13:04 +0000)
committerAlan Hayward <alahay01@gcc.gnu.org>
Fri, 3 Jun 2016 13:04:01 +0000 (13:04 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/vect-live-5.c
gcc/tree-vect-loop.c
gcc/tree-vect-stmts.c

index a7476c64d5a697fa72419fc5bd39c42ca3182174..ff69cf53dd3811eceb32ca90c625bfd8b1081a61 100644 (file)
@@ -1,3 +1,10 @@
+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.
index 0c976b67901fce56b341b6dc85eedbe336c2910f..1334193e212dbf3cc3248a3af858e6b6fe199de7 100644 (file)
@@ -1,3 +1,7 @@
+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.
index f475ca822b18874c5beca7465ae2094281644d96..188e4faf71334a6045296a7a98fa34274895955c 100644 (file)
@@ -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" } } */
index 3cf1c795e69c94401f86c631f2172985e5ea80a8..bc1257c86d4d2fda3d4c2b2e6fdab6aa495d76c5 100644 (file)
@@ -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 "
index 5554fe8a46d9ab4539e42e3709216db155538c80..373ecd7278d2c4edbd1191349bee389b97f0c321 100644 (file)
@@ -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,