re PR tree-optimization/71416 (ICE at -O3 in 32-bit and 64-bit modes on x86_64-linux...
authorAlan Hayward <alan.hayward@arm.com>
Mon, 13 Jun 2016 11:07:35 +0000 (11:07 +0000)
committerAlan Hayward <alahay01@gcc.gnu.org>
Mon, 13 Jun 2016 11:07:35 +0000 (11:07 +0000)
2016-06-13  Alan Hayward  <alan.hayward@arm.com>

gcc/
PR tree-optimization/71416
* tree-vect-loop.c (vectorizable_live_operation): Let worklist have
multiple entries

From-SVN: r237375

gcc/ChangeLog
gcc/tree-vect-loop.c

index 88506a587ebf5a66ad2e99db6df49a65494f1d92..e8ad4c85a2dbfc0f53b72a6f5f455d1f58610a31 100644 (file)
@@ -1,3 +1,9 @@
+2016-06-13  Alan Hayward  <alan.hayward@arm.com>
+
+       PR tree-optimization/71416
+       * tree-vect-loop.c (vectorizable_live_operation): Let worklist have
+       multiple entries
+
 2016-06-13  Martin Liska  <mliska@suse.cz>
 
        * predict.c (enum predictor_reason): Prefix enum with REASON_.
index 1231b95f6a71337833e8c4b24884da9f96a7b5bf..91d0608e59cd93577061f9ed87662f5ad63c7d9f 100644 (file)
@@ -6351,7 +6351,7 @@ vectorizable_live_operation (gimple *stmt,
   FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, lhs)
     if (!flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
        worklist.safe_push (use_stmt);
-  gcc_assert (worklist.length () == 1);
+  gcc_assert (worklist.length () >= 1);
 
   bitsize = TYPE_SIZE (TREE_TYPE (vectype));
   vec_bitsize = TYPE_SIZE (vectype);
@@ -6409,9 +6409,12 @@ vectorizable_live_operation (gimple *stmt,
 
   /* Replace all uses of the USE_STMT in the worklist with the newly inserted
      statement.  */
-  use_stmt = worklist.pop ();
-  replace_uses_by (gimple_phi_result (use_stmt), new_tree);
-  update_stmt (use_stmt);
+  while (!worklist.is_empty ())
+    {
+      use_stmt = worklist.pop ();
+      replace_uses_by (gimple_phi_result (use_stmt), new_tree);
+      update_stmt (use_stmt);
+    }
 
   return true;
 }