diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-11-18 15:17:37 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-11-18 15:17:37 +0000 |
commit | 1cf1c684b4582ba7ef4a96050bb7e4d98c0b2ffa (patch) | |
tree | 0b9c6efd0afebdf99e231fea3735c3c4b775243a /gcc/tree-vect-loop-manip.c | |
parent | fe6524b0e7659e243f2e13abf846477f0bf96456 (diff) | |
download | gcc-1cf1c684b4582ba7ef4a96050bb7e4d98c0b2ffa.tar.gz |
2010-11-18 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46172
* tree-vect-loop-manip.c (remove_dead_stmts_from_loop): New
function.
(slpeel_tree_peel_loop_to_edge): Call it.
* gcc.dg/torture/pr46172.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@166908 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-loop-manip.c')
-rw-r--r-- | gcc/tree-vect-loop-manip.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c index f006182f1ad..eb7eada03c0 100644 --- a/gcc/tree-vect-loop-manip.c +++ b/gcc/tree-vect-loop-manip.c @@ -1107,6 +1107,34 @@ set_prologue_iterations (basic_block bb_before_first_loop, } +/* Remove dead assignments from loop NEW_LOOP. */ + +static void +remove_dead_stmts_from_loop (struct loop *new_loop) +{ + basic_block *bbs = get_loop_body (new_loop); + unsigned i; + for (i = 0; i < new_loop->num_nodes; ++i) + { + gimple_stmt_iterator gsi; + for (gsi = gsi_start_bb (bbs[i]); !gsi_end_p (gsi);) + { + gimple stmt = gsi_stmt (gsi); + if (is_gimple_assign (stmt) + && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME + && has_zero_uses (gimple_assign_lhs (stmt))) + { + gsi_remove (&gsi, true); + release_defs (stmt); + } + else + gsi_next (&gsi); + } + } + free (bbs); +} + + /* Function slpeel_tree_peel_loop_to_edge. Peel the first (last) iterations of LOOP into a new prolog (epilog) loop @@ -1415,6 +1443,13 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop, if (update_first_loop_count) slpeel_make_loop_iterate_ntimes (first_loop, first_niters); + /* Remove all pattern statements from the loop copy. They will confuse + the expander if DCE is disabled. + ??? The pattern recognizer should be split into an analysis and + a transformation phase that is then run only on the loop that is + going to be transformed. */ + remove_dead_stmts_from_loop (new_loop); + adjust_vec_debug_stmts (); BITMAP_FREE (definitions); |