diff options
author | Richard Biener <rguenther@suse.de> | 2016-01-15 15:43:48 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-01-15 15:43:48 +0000 |
commit | 78810bd35336529a133661a5e4f801ccda57fd74 (patch) | |
tree | ac7638373fb51bc7a33745a33d9099a22b1b3b04 /gcc/tree-vect-loop.c | |
parent | 2bd847fed39669cfd021b9c3068ca84fd98593e4 (diff) | |
download | gcc-78810bd35336529a133661a5e4f801ccda57fd74.zip gcc-78810bd35336529a133661a5e4f801ccda57fd74.tar.gz gcc-78810bd35336529a133661a5e4f801ccda57fd74.tar.bz2 |
re PR tree-optimization/66856 (ICE in compute_live_loop_exits, at tree-ssa-loop-manip.c:234)
2016-01-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/66856
* tree-vect-loop.c (vect_transform_loop): Free SLP instances here.
* tree-vect-slp.c (vect_free_slp_tree): Decrement stmt reference count.
(vect_create_new_slp_node): Increment stmt reference count.
(vect_get_and_check_slp_defs): Make sure stmts are nor already in
an SLP tree before swapping operands.
(vect_build_slp_tree): Likewise.
(destroy_bb_vec_info): Free stmt info after SLP instances.
* tree-vect-stmts.c (new_stmt_vec_info): Initialize reference count.
* tree-vectorizer.h (struct _stmt_vec_info): Add num_slp_uses field.
(STMT_VINFO_NUM_SLP_USES): New macro.
* gcc.dg/torture/pr66856-1.c: New testcase.
* gcc.dg/torture/pr66856-2.c: Likewise.
From-SVN: r232435
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 83ded8b..6034672 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -6930,4 +6930,11 @@ vect_transform_loop (loop_vec_info loop_vinfo) "OUTER LOOP VECTORIZED\n"); dump_printf (MSG_NOTE, "\n"); } + + /* Free SLP instances here because otherwise stmt reference counting + won't work. */ + slp_instance instance; + FOR_EACH_VEC_ELT (LOOP_VINFO_SLP_INSTANCES (loop_vinfo), i, instance) + vect_free_slp_instance (instance); + LOOP_VINFO_SLP_INSTANCES (loop_vinfo).release (); } |