From: Jan Hubicka Date: Fri, 17 Jun 2005 11:53:59 +0000 (+0200) Subject: tree-optimize.c (execute_ipa_pass_list): New. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=79748d710383e205e3c045b55ceda1b3e15ba945;p=gcc.git tree-optimize.c (execute_ipa_pass_list): New. * tree-optimize.c (execute_ipa_pass_list): New. (ipa_passes): Use it. From-SVN: r101126 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 44ed9d2d3a3..29ec313a622 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-06-17 Jan Hubicka + + * tree-optimize.c (execute_ipa_pass_list): New. + (ipa_passes): Use it. + 2005-06-16 Richard Henderson PR tree-opt/22022 diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c index 0812b6422c5..a33a7104d78 100644 --- a/gcc/tree-optimize.c +++ b/gcc/tree-optimize.c @@ -50,7 +50,6 @@ Boston, MA 02111-1307, USA. */ #include "cfgloop.h" #include "except.h" - /* Global variables used to communicate with passes. */ int dump_flags; bool in_gimple_form; @@ -665,7 +664,35 @@ execute_pass_list (struct tree_opt_pass *pass) do { if (execute_one_pass (pass) && pass->sub) - execute_pass_list (pass->sub); + execute_pass_list (pass->sub); + pass = pass->next; + } + while (pass); +} + +/* Same as execute_pass_list but assume that subpasses of IPA passes + are local passes. */ +static void +execute_ipa_pass_list (struct tree_opt_pass *pass) +{ + do + { + if (execute_one_pass (pass) && pass->sub) + { + struct cgraph_node *node; + for (node = cgraph_nodes; node; node = node->next) + if (node->analyzed) + { + push_cfun (DECL_STRUCT_FUNCTION (node->decl)); + current_function_decl = node->decl; + execute_pass_list (pass); + free_dominance_info (CDI_DOMINATORS); + free_dominance_info (CDI_POST_DOMINATORS); + current_function_decl = NULL; + pop_cfun (); + ggc_collect (); + } + } pass = pass->next; } while (pass); @@ -692,8 +719,10 @@ tree_lowering_passes (tree fn) void ipa_passes (void) { + cfun = NULL; + tree_register_cfg_hooks (); bitmap_obstack_initialize (NULL); - execute_pass_list (all_ipa_passes); + execute_ipa_pass_list (all_ipa_passes); bitmap_obstack_release (NULL); }