Hi,

When we compute vectypes we skip non-relevant phi nodes.  But we process 
non-relevant alive statements and thus may need vectype of non-relevant live 
phi node to compute mask vectype.  This patch enables vectype computation for 
live phi nodes.  Botostrapped and regtested on x86_64-unknown-linux-gnu.  OK 
for trunk?

Thanks,
Ilya
--
gcc/

2015-11-18  Ilya Enkovich  <enkovich....@gmail.com>

        PR tree-optimization/68327
        * tree-vect-loop.c (vect_determine_vectorization_factor): Don't
        skip non-relevant live phi nodes.

gcc/testsuite/

2015-11-18  Ilya Enkovich  <enkovich....@gmail.com>

        PR tree-optimization/68327
        * gcc.dg/pr68327.c: New test.


diff --git a/gcc/testsuite/gcc.dg/pr68327.c b/gcc/testsuite/gcc.dg/pr68327.c
new file mode 100644
index 0000000..c3e6a94
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr68327.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+int a, d;
+char b, c;
+
+void
+fn1 ()
+{
+  int i = 0;
+  for (; i < 1; i++)
+    d = 1;
+  for (; b; b++)
+    a = 1 && (d & b);
+}
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 80937ec..7dba027 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -216,7 +216,8 @@ vect_determine_vectorization_factor (loop_vec_info 
loop_vinfo)
 
          gcc_assert (stmt_info);
 
-         if (STMT_VINFO_RELEVANT_P (stmt_info))
+         if (STMT_VINFO_RELEVANT_P (stmt_info)
+             || STMT_VINFO_LIVE_P (stmt_info))
             {
              gcc_assert (!STMT_VINFO_VECTYPE (stmt_info));
               scalar_type = TREE_TYPE (PHI_RESULT (phi));

Reply via email to