+2012-04-10 Richard Guenther <rguenther@suse.de>
+
+ * tree-pass.h (tree_lowering_passes): Remove.
+ * tree-optimize.c (tree_lowering_passes): Remove.
+ * cgraph.c (cgraph_add_new_function): Inline relevant parts
+ of tree_lowering_passes, avoid redundant call of early local
+ passes.
+ * cgraphunit.c (cgraph_lower_function): Fold into ...
+ (cgraph_analyze_function): ... its single caller. Inline
+ relevant parts of tree_lowering_passes.
+
2012-04-09 H.J. Lu <hongjiu.lu@intel.com>
PR other/52777
push_cfun (DECL_STRUCT_FUNCTION (fndecl));
current_function_decl = fndecl;
gimple_register_cfg_hooks ();
- tree_lowering_passes (fndecl);
bitmap_obstack_initialize (NULL);
- if (!gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl)))
- execute_pass_list (pass_early_local_passes.pass.sub);
+ execute_pass_list (all_lowering_passes);
+ execute_pass_list (pass_early_local_passes.pass.sub);
bitmap_obstack_release (NULL);
pop_cfun ();
current_function_decl = NULL;
cgraph_node_remove_callees (node);
}
-static void
-cgraph_lower_function (struct cgraph_node *node)
-{
- if (node->lowered)
- return;
-
- if (node->nested)
- lower_nested_functions (node->decl);
- gcc_assert (!node->nested);
-
- tree_lowering_passes (node->decl);
- node->lowered = true;
-}
-
/* DECL has been parsed. Take it, queue it, compile it at the whim of the
logic in effect. If NESTED is true, then our caller cannot stand to have
the garbage collector run at the moment. We would need to either create
gimplify_function_tree (decl);
dump_function (TDI_generic, decl);
- cgraph_lower_function (node);
+ /* Lower the function. */
+ if (!node->lowered)
+ {
+ if (node->nested)
+ lower_nested_functions (node->decl);
+ gcc_assert (!node->nested);
+
+ gimple_register_cfg_hooks ();
+ bitmap_obstack_initialize (NULL);
+ execute_pass_list (all_lowering_passes);
+ free_dominance_info (CDI_POST_DOMINATORS);
+ free_dominance_info (CDI_DOMINATORS);
+ compact_blocks ();
+ bitmap_obstack_release (NULL);
+ node->lowered = true;
+ }
+
pop_cfun ();
}
node->analyzed = true;
0 /* todo_flags_finish */
}
};
-
-void
-tree_lowering_passes (tree fn)
-{
- tree saved_current_function_decl = current_function_decl;
-
- current_function_decl = fn;
- push_cfun (DECL_STRUCT_FUNCTION (fn));
- gimple_register_cfg_hooks ();
- bitmap_obstack_initialize (NULL);
- execute_pass_list (all_lowering_passes);
- if (optimize && cgraph_global_info_ready)
- execute_pass_list (pass_early_local_passes.pass.sub);
- free_dominance_info (CDI_POST_DOMINATORS);
- free_dominance_info (CDI_DOMINATORS);
- compact_blocks ();
- current_function_decl = saved_current_function_decl;
- bitmap_obstack_release (NULL);
- pop_cfun ();
-}
\f
/* For functions-as-trees languages, this performs all optimization and
compilation for FNDECL. */
enum pass_positioning_ops pos_op; /* how to insert the new pass. */
};
-extern void tree_lowering_passes (tree decl);
-
extern struct gimple_opt_pass pass_mudflap_1;
extern struct gimple_opt_pass pass_mudflap_2;
extern struct gimple_opt_pass pass_lower_cf;