tree-pass.h (pass_O0_always_inline): Declare.

tree-optimization/36100
	* tree-pass.h (pass_O0_always_inline): Declare.
	* ipa-inline.c (inline_transform): Remove dead code.
	(cgraph_gate_O0_always_inline, cgraph_O0_always_inline,
	pass_O0_always_inline): New.
	* passes.c (init_optimization_passes): Add pass_O0_always_inline.

From-SVN: r134942
This commit is contained in:
Jan Hubicka 2008-05-05 07:31:34 +02:00 committed by Jan Hubicka
parent 7ffc24cee0
commit 24c0514153
4 changed files with 70 additions and 8 deletions

View File

@ -1,3 +1,12 @@
2008-06-04 Jan Hubicka <jh@suse.cz>
tree-optimization/36100
* tree-pass.h (pass_O0_always_inline): Declare.
* ipa-inline.c (inline_transform): Remove dead code.
(cgraph_gate_O0_always_inline, cgraph_O0_always_inline,
pass_O0_always_inline): New.
* passes.c (init_optimization_passes): Add pass_O0_always_inline.
2008-05-04 Kai Tietz <kai.tietz@onevision.com>
* config/i386/i386.c (x86_output_mi_thunk): Use movq alternative

View File

@ -1588,14 +1588,6 @@ inline_transform (struct cgraph_node *node)
todo = optimize_inline_calls (current_function_decl);
timevar_pop (TV_INTEGRATION);
}
/* In non-unit-at-a-time we must mark all referenced functions as needed. */
if (!flag_unit_at_a_time)
{
struct cgraph_edge *e;
for (e = node->callees; e; e = e->next_callee)
if (e->callee->analyzed)
cgraph_mark_needed_node (e->callee);
}
return todo | execute_fixup_cfg ();
}
@ -1628,4 +1620,63 @@ struct ipa_opt_pass pass_ipa_inline =
NULL, /* variable_transform */
};
/* When inlining shall be performed. */
static bool
cgraph_gate_O0_always_inline (void)
{
return !flag_unit_at_a_time || !flag_inline_trees;
}
static unsigned int
cgraph_O0_always_inline (void)
{
struct cgraph_node *node = cgraph_node (current_function_decl);
unsigned int todo = 0;
bool inlined;
if (sorrycount || errorcount)
return 0;
inlined = cgraph_decide_inlining_incrementally (node, INLINE_SPEED, 0);
/* We might need the body of this function so that we can expand
it inline somewhere else. */
if (cgraph_preserve_function_body_p (current_function_decl))
save_inline_function_body (node);
if (inlined || warn_inline)
{
timevar_push (TV_INTEGRATION);
todo = optimize_inline_calls (current_function_decl);
timevar_pop (TV_INTEGRATION);
}
/* In non-unit-at-a-time we must mark all referenced functions as needed. */
if (!flag_unit_at_a_time)
{
struct cgraph_edge *e;
for (e = node->callees; e; e = e->next_callee)
if (e->callee->analyzed)
cgraph_mark_needed_node (e->callee);
}
return todo | execute_fixup_cfg ();
}
struct gimple_opt_pass pass_O0_always_inline =
{
{
GIMPLE_PASS,
"always_inline", /* name */
cgraph_gate_O0_always_inline, /* gate */
cgraph_O0_always_inline, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
TV_INLINE_HEURISTICS, /* tv_id */
0, /* properties_required */
PROP_cfg, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_dump_func | TODO_verify_flow
| TODO_verify_stmts /* todo_flags_finish */
}
};
#include "gt-ipa-inline.h"

View File

@ -553,6 +553,7 @@ init_optimization_passes (void)
/* These passes are run after IPA passes on every function that is being
output to the assembler file. */
p = &all_passes;
NEXT_PASS (pass_O0_always_inline);
NEXT_PASS (pass_all_optimizations);
{
struct opt_pass **p = &pass_all_optimizations.pass.sub;

View File

@ -501,6 +501,7 @@ extern struct rtl_opt_pass pass_final;
extern struct rtl_opt_pass pass_rtl_seqabstr;
extern struct gimple_opt_pass pass_release_ssa_names;
extern struct gimple_opt_pass pass_early_inline;
extern struct gimple_opt_pass pass_O0_always_inline;
extern struct gimple_opt_pass pass_inline_parameters;
extern struct gimple_opt_pass pass_all_early_optimizations;
extern struct gimple_opt_pass pass_update_address_taken;