re PR tree-optimization/68327 (ICE on valid code at -O3 on x86_64-linux-gnu in vect_i...
authorIlya Enkovich <enkovich.gnu@gmail.com>
Mon, 23 Nov 2015 10:01:51 +0000 (10:01 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Mon, 23 Nov 2015 10:01:51 +0000 (10:01 +0000)
gcc/

PR tree-optimization/68327
* tree-vect-loop.c (vect_determine_vectorization_factor): Don't
compute vectype for non-relevant mask producers.
* gcc/tree-vect-stmts.c (vectorizable_comparison): Check stmt
relevance earlier.

gcc/testsuite/

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

Co-Authored-By: Richard Biener <rguenther@suse.de>
From-SVN: r230743

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr68327.c [new file with mode: 0644]
gcc/tree-vect-loop.c
gcc/tree-vect-stmts.c

index 0b7f5d4c3c55cc987c6aa2e95b31f0e89c0c2c0d..530cf7810f9750c58f616833f17ad864ca08ad73 100644 (file)
@@ -1,3 +1,12 @@
+2015-11-23  Ilya Enkovich  <enkovich.gnu@gmail.com>
+           Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/68327
+       * tree-vect-loop.c (vect_determine_vectorization_factor): Don't
+       compute vectype for non-relevant mask producers.
+       * gcc/tree-vect-stmts.c (vectorizable_comparison): Check stmt
+       relevance earlier.
+
 2015-11-23  Tom de Vries  <tom@codesourcery.com>
 
        PR tree-optimization/68460
index 2861d00d94bc4068cd8404a1095584cd61976279..142347de801812cccfa97bd7e3b5692c4cb369cc 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-23  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       PR tree-optimization/68327
+       * gcc.dg/pr68327.c: New test.
+
 2015-11-23  Tom de Vries  <tom@codesourcery.com>
 
        PR tree-optimization/68460
diff --git a/gcc/testsuite/gcc.dg/pr68327.c b/gcc/testsuite/gcc.dg/pr68327.c
new file mode 100644 (file)
index 0000000..c3e6a94
--- /dev/null
@@ -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);
+}
index 41e50319f0033eb4ecabe9345744a1e2113e1002..cc272b23e8b1cb5864e6ca6b3a25d88d5ebf8595 100644 (file)
@@ -439,7 +439,8 @@ vect_determine_vectorization_factor (loop_vec_info loop_vinfo)
                 compute a factor.  */
              if (TREE_CODE (scalar_type) == BOOLEAN_TYPE)
                {
-                 mask_producers.safe_push (stmt_info);
+                 if (STMT_VINFO_RELEVANT_P (stmt_info))
+                   mask_producers.safe_push (stmt_info);
                  bool_result = true;
 
                  if (gimple_code (stmt) == GIMPLE_ASSIGN
index 4bb58b9200583b45af451b83027326897f0b26e9..687f98253fecd740abd664b16692d5413ed6f4b7 100644 (file)
@@ -7590,6 +7590,9 @@ vectorizable_comparison (gimple *stmt, gimple_stmt_iterator *gsi,
   tree mask_type;
   tree mask;
 
+  if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
+    return false;
+
   if (!VECTOR_BOOLEAN_TYPE_P (vectype))
     return false;
 
@@ -7602,9 +7605,6 @@ vectorizable_comparison (gimple *stmt, gimple_stmt_iterator *gsi,
     ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits;
 
   gcc_assert (ncopies >= 1);
-  if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
-    return false;
-
   if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_internal_def
       && !(STMT_VINFO_DEF_TYPE (stmt_info) == vect_nested_cycle
           && reduc_def))