aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2016-06-01 10:35:30 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2016-06-01 10:35:30 +0000
commita0dfeef505c7d5a619cc91d37acbfb9ea2c7f729 (patch)
treefcd08bc1810235edec6144188ecbf81b4db1627e
parent4618c453205f1812b32967312a845a66a1194495 (diff)
downloadgcc-a0dfeef505c7d5a619cc91d37acbfb9ea2c7f729.zip
gcc-a0dfeef505c7d5a619cc91d37acbfb9ea2c7f729.tar.gz
gcc-a0dfeef505c7d5a619cc91d37acbfb9ea2c7f729.tar.bz2
tree-vect-loop.c (vect_determine_vectorization_factor): Also take into account live statements for mask producers.
* tree-vect-loop.c (vect_determine_vectorization_factor): Also take into account live statements for mask producers. From-SVN: r236981
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/opt56.adb15
-rw-r--r--gcc/testsuite/gnat.dg/opt56.ads7
-rw-r--r--gcc/tree-vect-loop.c3
5 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 92a4ed5..83a96bd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2016-06-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree-vect-loop.c (vect_determine_vectorization_factor): Also take
+ into account live statements for mask producers.
+
2016-06-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/71311
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c6e4a61..fc864d3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2016-06-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/opt56.ad[sb]: New test.
+
2016-06-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/66635
diff --git a/gcc/testsuite/gnat.dg/opt56.adb b/gcc/testsuite/gnat.dg/opt56.adb
new file mode 100644
index 0000000..9566f51
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt56.adb
@@ -0,0 +1,15 @@
+-- { dg-do compile }
+-- { dg-options "-O3" }
+
+package body Opt56 is
+
+ function F (Values : Vector) return Boolean is
+ Result : Boolean := True;
+ begin
+ for I in Values'Range loop
+ Result := Result and Values (I) >= 0.0;
+ end loop;
+ return Result;
+ end;
+
+end Opt56;
diff --git a/gcc/testsuite/gnat.dg/opt56.ads b/gcc/testsuite/gnat.dg/opt56.ads
new file mode 100644
index 0000000..31ee195
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt56.ads
@@ -0,0 +1,7 @@
+package Opt56 is
+
+ type Vector is array (Positive range <>) of Float;
+
+ function F (Values : Vector) return Boolean;
+
+end Opt56;
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 6463a81..1bc132a 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -441,7 +441,8 @@ vect_determine_vectorization_factor (loop_vec_info loop_vinfo)
&& is_gimple_assign (stmt)
&& gimple_assign_rhs_code (stmt) != COND_EXPR)
{
- if (STMT_VINFO_RELEVANT_P (stmt_info))
+ if (STMT_VINFO_RELEVANT_P (stmt_info)
+ || STMT_VINFO_LIVE_P (stmt_info))
mask_producers.safe_push (stmt_info);
bool_result = true;