aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.c
diff options
context:
space:
mode:
authorAlan Hayward <alan.hayward@arm.com>2016-06-13 11:07:35 +0000
committerAlan Hayward <alahay01@gcc.gnu.org>2016-06-13 11:07:35 +0000
commit915794eb26eaafe970c4c9f9d7774b55c4b772b5 (patch)
treec5dbb766623b0e59baf27db30407570219722e31 /gcc/tree-vect-loop.c
parent46c1cff63f942e715c53739610951ea58ab8c228 (diff)
downloadgcc-915794eb26eaafe970c4c9f9d7774b55c4b772b5.zip
gcc-915794eb26eaafe970c4c9f9d7774b55c4b772b5.tar.gz
gcc-915794eb26eaafe970c4c9f9d7774b55c4b772b5.tar.bz2
re PR tree-optimization/71416 (ICE at -O3 in 32-bit and 64-bit modes on x86_64-linux-gnu (vectorizable_live_operation))
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
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r--gcc/tree-vect-loop.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 1231b95..91d0608 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -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;
}