diff options
author | Martin Liska <mliska@suse.cz> | 2016-03-31 12:42:55 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2016-03-31 10:42:55 +0000 |
commit | d4aff57bc079dc04d7d3ab9f71b2e923d9087e31 (patch) | |
tree | 10fa2adb0f596c42da4d531fe8c27f33c83b87b6 /gcc | |
parent | 515558b8ff520dc07f1014b29e524b8994f73c9b (diff) | |
download | gcc-d4aff57bc079dc04d7d3ab9f71b2e923d9087e31.zip gcc-d4aff57bc079dc04d7d3ab9f71b2e923d9087e31.tar.gz gcc-d4aff57bc079dc04d7d3ab9f71b2e923d9087e31.tar.bz2 |
Do not call todo_after for a discarded function
* passes.c (execute_one_pass): Do not call
todo_after for a discarded function.
From-SVN: r234613
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/passes.c | 44 |
2 files changed, 32 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c78319..9edee6b1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-03-31 Martin Liska <mliska@suse.cz> + + * passes.c (execute_one_pass): Do not call + todo_after for a discarded function. + 2016-03-31 Bin Cheng <bin.cheng@arm.com> * tree-ssa-loop-ivopts.c (struct comp_cost): New scrach field. diff --git a/gcc/passes.c b/gcc/passes.c index 9d90251..e896181 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -2334,6 +2334,33 @@ execute_one_pass (opt_pass *pass) /* Do it! */ todo_after = pass->execute (cfun); + + if (todo_after & TODO_discard_function) + { + pass_fini_dump_file (pass); + + gcc_assert (cfun); + /* As cgraph_node::release_body expects release dominators info, + we have to release it. */ + if (dom_info_available_p (CDI_DOMINATORS)) + free_dominance_info (CDI_DOMINATORS); + + if (dom_info_available_p (CDI_POST_DOMINATORS)) + free_dominance_info (CDI_POST_DOMINATORS); + + tree fn = cfun->decl; + pop_cfun (); + gcc_assert (!cfun); + cgraph_node::get (fn)->release_body (); + + current_pass = NULL; + redirect_edge_var_map_empty (); + + ggc_collect (); + + return true; + } + do_per_function (clear_last_verified, NULL); /* Stop timevar. */ @@ -2373,23 +2400,6 @@ execute_one_pass (opt_pass *pass) current_pass = NULL; redirect_edge_var_map_empty (); - if (todo_after & TODO_discard_function) - { - gcc_assert (cfun); - /* As cgraph_node::release_body expects release dominators info, - we have to release it. */ - if (dom_info_available_p (CDI_DOMINATORS)) - free_dominance_info (CDI_DOMINATORS); - - if (dom_info_available_p (CDI_POST_DOMINATORS)) - free_dominance_info (CDI_POST_DOMINATORS); - - tree fn = cfun->decl; - pop_cfun (); - gcc_assert (!cfun); - cgraph_node::get (fn)->release_body (); - } - /* Signal this is a suitable GC collection point. */ if (!((todo_after | pass->todo_flags_finish) & TODO_do_not_ggc_collect)) ggc_collect (); |