From f55f91f50e0d7821b3bb19bc92ecd9812578c01d Mon Sep 17 00:00:00 2001 From: rguenth Date: Mon, 18 Mar 2013 08:50:35 +0000 Subject: [PATCH] 2013-03-18 Richard Biener * tree-ssa-loop-manip.c (find_uses_to_rename): Do not scan the whole function when there is nothing to do. * tree-ssa-loop.c (pass_vectorize): Remove TODO_update_ssa. * tree-vectorizer.c (vectorize_loops): Update virtual and loop-closed SSA once. * tree-vect-loop.c (vect_transform_loop): Do not update SSA here. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196770 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/tree-ssa-loop-manip.c | 19 +++++-------------- gcc/tree-ssa-loop.c | 3 +-- gcc/tree-vect-loop.c | 5 ----- gcc/tree-vectorizer.c | 11 ++++++++++- 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 631ee72..f5d00c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,14 @@ 2013-03-18 Richard Biener + * tree-ssa-loop-manip.c (find_uses_to_rename): Do not scan the + whole function when there is nothing to do. + * tree-ssa-loop.c (pass_vectorize): Remove TODO_update_ssa. + * tree-vectorizer.c (vectorize_loops): Update virtual and + loop-closed SSA once. + * tree-vect-loop.c (vect_transform_loop): Do not update SSA here. + +2013-03-18 Richard Biener + PR middle-end/56113 * domwalk.c (bb_postorder): New global static. (cmp_bb_postorder): New function. diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index 4645588..a0516c4 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -443,21 +443,12 @@ find_uses_to_rename (bitmap changed_bbs, bitmap *use_blocks, bitmap need_phis) unsigned index; bitmap_iterator bi; - /* ??? If CHANGED_BBS is empty we rewrite the whole function -- why? */ - if (changed_bbs && !bitmap_empty_p (changed_bbs)) - { - EXECUTE_IF_SET_IN_BITMAP (changed_bbs, 0, index, bi) - { - find_uses_to_rename_bb (BASIC_BLOCK (index), use_blocks, need_phis); - } - } + if (changed_bbs) + EXECUTE_IF_SET_IN_BITMAP (changed_bbs, 0, index, bi) + find_uses_to_rename_bb (BASIC_BLOCK (index), use_blocks, need_phis); else - { - FOR_EACH_BB (bb) - { - find_uses_to_rename_bb (bb, use_blocks, need_phis); - } - } + FOR_EACH_BB (bb) + find_uses_to_rename_bb (bb, use_blocks, need_phis); } /* Rewrites the program into a loop closed ssa form -- i.e. inserts extra diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c index edc04ea..fdfb9e7 100644 --- a/gcc/tree-ssa-loop.c +++ b/gcc/tree-ssa-loop.c @@ -245,8 +245,7 @@ struct gimple_opt_pass pass_vectorize = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_update_ssa - | TODO_ggc_collect /* todo_flags_finish */ + TODO_ggc_collect /* todo_flags_finish */ } }; diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 1252c5a..b7c5521 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -5773,11 +5773,6 @@ vect_transform_loop (loop_vec_info loop_vinfo) loop->nb_iterations_estimate = loop->nb_iterations_estimate - double_int_one; } - /* The memory tags and pointers in vectorized statements need to - have their SSA forms updated. FIXME, why can't this be delayed - until all the loops have been transformed? */ - update_ssa (TODO_update_ssa); - if (dump_enabled_p ()) dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location, "LOOP VECTORIZED."); if (loop->inner && dump_enabled_p ()) diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index 42ebb8d..9d46199 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -149,7 +149,16 @@ vectorize_loops (void) free_stmt_vec_info_vec (); - return num_vectorized_loops > 0 ? TODO_cleanup_cfg : 0; + if (num_vectorized_loops > 0) + { + /* If we vectorized any loop only virtual SSA form needs to be updated. + ??? Also while we try hard to update loop-closed SSA form we fail + to properly do this in some corner-cases (see PR56286). */ + rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa_only_virtuals); + return TODO_cleanup_cfg; + } + + return 0; } -- 2.7.4