aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2016-03-31 12:42:55 +0200
committerMartin Liska <marxin@gcc.gnu.org>2016-03-31 10:42:55 +0000
commitd4aff57bc079dc04d7d3ab9f71b2e923d9087e31 (patch)
tree10fa2adb0f596c42da4d531fe8c27f33c83b87b6 /gcc
parent515558b8ff520dc07f1014b29e524b8994f73c9b (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/passes.c44
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 ();