mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 03:30:29 +08:00
Add free inline summary pass after pass_early_local_passes
PR middle-end/53321 PR middle-end/53865 * ipa-inline-analysis.c (inline_free_summary): Return if inline_edge_summary_vec is NULL. * ipa-split.c (execute_split_functions): Check if a function is inlinable only if inline_edge_summary_vec != NULL. * ipa.c (symtab_remove_unreachable_nodes): Restore cgraph_propagate_frequency call when something was changed. (free_inline_summary): New function. (pass_ipa_free_inline_summary): New pass. * passes.c (init_optimization_passes): Add pass_ipa_free_inline_summary before pass_ipa_tree_profile. * timevar.def (TV_IPA_FREE_INLINE_SUMMARY): New. * tree-pass.h (pass_ipa_free_inline_summary): New. From-SVN: r190090
This commit is contained in:
parent
ca26f665dd
commit
a8da72b86c
@ -1,3 +1,25 @@
|
||||
2012-08-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR middle-end/53321
|
||||
PR middle-end/53865
|
||||
* ipa-inline-analysis.c (inline_free_summary): Return if
|
||||
inline_edge_summary_vec is NULL.
|
||||
|
||||
* ipa-split.c (execute_split_functions): Check if a function
|
||||
is inlinable only if inline_edge_summary_vec != NULL.
|
||||
|
||||
* ipa.c (symtab_remove_unreachable_nodes): Restore
|
||||
cgraph_propagate_frequency call when something was changed.
|
||||
(free_inline_summary): New function.
|
||||
(pass_ipa_free_inline_summary): New pass.
|
||||
|
||||
* passes.c (init_optimization_passes): Add
|
||||
pass_ipa_free_inline_summary before pass_ipa_tree_profile.
|
||||
|
||||
* timevar.def (TV_IPA_FREE_INLINE_SUMMARY): New.
|
||||
|
||||
* tree-pass.h (pass_ipa_free_inline_summary): New.
|
||||
|
||||
2012-08-02 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* arm.c (arm_gen_constant): Use UBFX for some AND operations when
|
||||
|
@ -3242,6 +3242,8 @@ void
|
||||
inline_free_summary (void)
|
||||
{
|
||||
struct cgraph_node *node;
|
||||
if (inline_edge_summary_vec == NULL)
|
||||
return;
|
||||
FOR_EACH_DEFINED_FUNCTION (node)
|
||||
reset_inline_summary (node);
|
||||
if (function_insertion_hook_holder)
|
||||
|
@ -1397,7 +1397,7 @@ execute_split_functions (void)
|
||||
}
|
||||
/* This can be relaxed; function might become inlinable after splitting
|
||||
away the uninlinable part. */
|
||||
if (!inline_summary (node)->inlinable)
|
||||
if (inline_edge_summary_vec && !inline_summary (node)->inlinable)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not splitting: not inlinable.\n");
|
||||
|
33
gcc/ipa.c
33
gcc/ipa.c
@ -448,6 +448,11 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
|
||||
verify_symtab ();
|
||||
#endif
|
||||
|
||||
/* If we removed something, perhaps profile could be improved. */
|
||||
if (changed && optimize && inline_edge_summary_vec)
|
||||
FOR_EACH_DEFINED_FUNCTION (node)
|
||||
cgraph_propagate_frequency (node);
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
@ -960,6 +965,34 @@ struct simple_ipa_opt_pass pass_ipa_function_and_variable_visibility =
|
||||
}
|
||||
};
|
||||
|
||||
/* Free inline summary. */
|
||||
|
||||
static unsigned
|
||||
free_inline_summary (void)
|
||||
{
|
||||
inline_free_summary ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct simple_ipa_opt_pass pass_ipa_free_inline_summary =
|
||||
{
|
||||
{
|
||||
SIMPLE_IPA_PASS,
|
||||
"*free_inline_summary", /* name */
|
||||
NULL, /* gate */
|
||||
free_inline_summary, /* execute */
|
||||
NULL, /* sub */
|
||||
NULL, /* next */
|
||||
0, /* static_pass_number */
|
||||
TV_IPA_FREE_INLINE_SUMMARY, /* tv_id */
|
||||
0, /* properties_required */
|
||||
0, /* properties_provided */
|
||||
0, /* properties_destroyed */
|
||||
0, /* todo_flags_start */
|
||||
TODO_ggc_collect /* todo_flags_finish */
|
||||
}
|
||||
};
|
||||
|
||||
/* Do not re-run on ltrans stage. */
|
||||
|
||||
static bool
|
||||
|
@ -1323,6 +1323,7 @@ init_optimization_passes (void)
|
||||
NEXT_PASS (pass_rebuild_cgraph_edges);
|
||||
NEXT_PASS (pass_inline_parameters);
|
||||
}
|
||||
NEXT_PASS (pass_ipa_free_inline_summary);
|
||||
NEXT_PASS (pass_ipa_tree_profile);
|
||||
{
|
||||
struct opt_pass **p = &pass_ipa_tree_profile.pass.sub;
|
||||
|
@ -89,6 +89,7 @@ DEFTIMEVAR (TV_IPA_PURE_CONST , "ipa pure const")
|
||||
DEFTIMEVAR (TV_IPA_PTA , "ipa points-to")
|
||||
DEFTIMEVAR (TV_IPA_SRA , "ipa SRA")
|
||||
DEFTIMEVAR (TV_IPA_FREE_LANG_DATA , "ipa free lang data")
|
||||
DEFTIMEVAR (TV_IPA_FREE_INLINE_SUMMARY, "ipa free inline summary")
|
||||
/* Time spent by constructing CFG. */
|
||||
DEFTIMEVAR (TV_CFG , "cfg construction")
|
||||
/* Time spent by cleaning up CFG. */
|
||||
|
@ -375,6 +375,7 @@ extern struct simple_ipa_opt_pass pass_ipa_increase_alignment;
|
||||
extern struct simple_ipa_opt_pass pass_ipa_matrix_reorg;
|
||||
extern struct ipa_opt_pass_d pass_ipa_inline;
|
||||
extern struct simple_ipa_opt_pass pass_ipa_free_lang_data;
|
||||
extern struct simple_ipa_opt_pass pass_ipa_free_inline_summary;
|
||||
extern struct ipa_opt_pass_d pass_ipa_cp;
|
||||
extern struct ipa_opt_pass_d pass_ipa_reference;
|
||||
extern struct ipa_opt_pass_d pass_ipa_pure_const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user