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:
parent
7ffc24cee0
commit
24c0514153
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user