diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2017-05-19 10:52:26 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2017-05-19 08:52:26 +0000 |
commit | 263e19c786a411cfa647a460cb7a484046195e8c (patch) | |
tree | b12d5c2d813ff45036f743653212bf86759e0d06 /gcc/ipa-inline.h | |
parent | 035ab82621cd702bb7fc566ca7ccbcb6a9567058 (diff) | |
download | gcc-263e19c786a411cfa647a460cb7a484046195e8c.zip gcc-263e19c786a411cfa647a460cb7a484046195e8c.tar.gz gcc-263e19c786a411cfa647a460cb7a484046195e8c.tar.bz2 |
ipa-inline-analysis.c (cgraph_2edge_hook_list, [...]): Remove.
* ipa-inline-analysis.c (cgraph_2edge_hook_list, cgraph_edge_hook_list,
inline_edge_removal_hook, inline_edge_duplication_hook): Remove.
(inline_edge_summary_vec): Turn into ...
(ipa_call_summaries): ... this one.
(redirect_to_unreachable, edge_set_predicate,
evaluate_properties_for_edge, inline_summary_alloc,
reset_ipa_call_summary, reset_inline_summary,
inline_summary_t::duplicate): Update.
(inline_edge_duplication_hook): Turn to ...
(ipa_call_summary_t::duplicate): ... this one.
(inline_edge_removal_hook): Turn to ...
(ipa_call_summary_t::remove): ... this one.
(dump_inline_edge_summary): Turn to ...
(dump_ipa_call_summary): ... this one.
(estimate_function_body_sizes): Update.
(inline_update_callee_summaries): Update.
(remap_edge_change_prob): Update.
(remap_edge_summaries): Update.
(inline_merge_summary): Update.
(do_estimate_edge_time): Update.
(inline_generate_summary): Update.
(inline_read_section): Update.
(inline_read_summary): Update.
(inline_free_summary): Update.
* ipa-inline.c (can_inline_edge_p): Update.
(compute_inlined_call_time): Update.
(want_inline_small_function_p): Update.
(edge_badness): Update.
(early_inliner): Update.
* ipa-inline.h (inline_edge_summary): Turn to ...
(ipa_call_summary): ... this one.
(ipa_call_summary_t): New class.
(inline_edge_summary_t, inline_edge_summary_vec): Remove.
(ipa_call_summaries): New.
(inline_edge_summary): Remove.
(estimate_edge_growth): Update.
* ipa-profile.c (ipa_propagate_frequency_1): Update.
* ipa-prop.c (ipa_make_edge_direct_to_target): Update.
* ipa-split.c (execute_split_functions): Update.
* ipa.c (symbol_table::remove_unreachable_nodes): Update.
From-SVN: r248262
Diffstat (limited to 'gcc/ipa-inline.h')
-rw-r--r-- | gcc/ipa-inline.h | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/gcc/ipa-inline.h b/gcc/ipa-inline.h index f7dd312..14517c0 100644 --- a/gcc/ipa-inline.h +++ b/gcc/ipa-inline.h @@ -183,24 +183,33 @@ public: extern GTY(()) function_summary <inline_summary *> *inline_summaries; /* Information kept about callgraph edges. */ -struct inline_edge_summary +struct ipa_call_summary { - /* Estimated size and time of the call statement. */ - int call_stmt_size; - int call_stmt_time; - /* Depth of loop nest, 0 means no nesting. */ - unsigned short int loop_depth; class predicate *predicate; - /* Array indexed by parameters. - 0 means that parameter change all the time, REG_BR_PROB_BASE means - that parameter is constant. */ + /* Vector indexed by parameters. */ vec<inline_param_summary> param; + /* Estimated size and time of the call statement. */ + unsigned int call_stmt_size; + unsigned int call_stmt_time; + /* Depth of loop nest, 0 means no nesting. */ + unsigned int loop_depth; }; -/* Need a typedef for inline_edge_summary because of inline function - 'inline_edge_summary' below. */ -typedef struct inline_edge_summary inline_edge_summary_t; -extern vec<inline_edge_summary_t> inline_edge_summary_vec; +class ipa_call_summary_t: public call_summary <ipa_call_summary *> +{ +public: + ipa_call_summary_t (symbol_table *symtab, bool ggc): + call_summary <ipa_call_summary *> (symtab, ggc) {} + + /* Hook that is called by summary when an edge is duplicated. */ + virtual void remove (cgraph_edge *cs, ipa_call_summary *); + /* Hook that is called by summary when an edge is duplicated. */ + virtual void duplicate (cgraph_edge *src, cgraph_edge *dst, + ipa_call_summary *src_data, + ipa_call_summary *dst_data); +}; + +extern call_summary <ipa_call_summary *> *ipa_call_summaries; /* Data we cache about callgraph edges during inlining to avoid expensive re-computations during the greedy algorithm. */ @@ -256,12 +265,6 @@ void clone_inlined_nodes (struct cgraph_edge *e, bool, bool, int *, extern int ncalls_inlined; extern int nfunctions_inlined; -static inline struct inline_edge_summary * -inline_edge_summary (struct cgraph_edge *edge) -{ - return &inline_edge_summary_vec[edge->uid]; -} - /* Return estimated size of the inline sequence of EDGE. */ @@ -280,10 +283,10 @@ estimate_edge_size (struct cgraph_edge *edge) static inline int estimate_edge_growth (struct cgraph_edge *edge) { - gcc_checking_assert (inline_edge_summary (edge)->call_stmt_size + gcc_checking_assert (ipa_call_summaries->get (edge)->call_stmt_size || !edge->callee->analyzed); return (estimate_edge_size (edge) - - inline_edge_summary (edge)->call_stmt_size); + - ipa_call_summaries->get (edge)->call_stmt_size); } /* Return estimated callee runtime increase after inlining |