diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-07-12 01:07:40 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-07-12 01:07:40 +0000 |
commit | d7c6d889a1e94af0a28def617d281c6efd93691a (patch) | |
tree | f057de333fbf0a3f853e92f6e52227b3713693c6 /gcc/cgraph.h | |
parent | a2d0abf6dc0036048725d9cd9a49c700c696225e (diff) | |
download | gcc-d7c6d889a1e94af0a28def617d281c6efd93691a.tar.gz |
* cgraph.c (cgraph_max_uid): New global variable.
(cgraph_node): Set uid field.
(create_edge): Keep inline flags consistent.
(dump_cgraph): Dump more info.
* cgraph.h (struct cgraph_local_info): Remove inline_many and
can_inline_once; add inlinable, disgread_inline_limits, and self_insn
(struct cgraph_global_info): Add insns, calls, cloned_times,
will_be_output.
(struct cgraph_node): Add uid.
(struct cgraph_edge): Add inline_call.
(cgraph_max_uid, cgraph_inline_p): Declare.
* cgraph.c: Include params.h and fibheap.h
(cgraph_mark_functions_to_inline_once): Kill.
(INSNS_PER_CALL): New constant.
(ncalls_inlined, nfunctions_inlined, initial_insns, overall_insns): New
static variables.
(cgraph_finalize_function): Do not analyze inlining.
(cgraph_finalize_compilation_unit): Set inlining attributes.
(cgraph_mark_functions_to_output): More consistency checks.
(cgraph_optimize_function): Set current_function_decl to NULL.
(cgraph_expand_function): Use new inline flags.
(cgraph_postorder): Expand from cgraph_expand_functions.
(INLINED_TIMES, SET_INLINED_TIMES): New macros.
(cgraph_inlined_into, cgraph_inlined_callees,
cgraph_estimate_size_after_inlining, cgraph_estimate_growth,
cgraph_mark_inline, cgraph_check_inline_limits,
cgraph_default_inline_p, cgraph_decide_inling_of_small_functions,
cgraph_decide_inlining, cgraph_inline_p): New functions.
* params.def (PARAM_LARGE_FUNCTION_INSNS, PARAM_LARGE_FUNCTION_GROWTH,
PARAM_INLINE_UNIT_GROWTH): New parameters.
* tree-inline.c (struct inline_data): New field current_decl.
(expand_call_inline): Avoid forward declarations; use
inlinable_function_p.
(optimize_inline_calls): Set id.current_decl.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69262 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cgraph.h')
-rw-r--r-- | gcc/cgraph.h | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/gcc/cgraph.h b/gcc/cgraph.h index 7650326d7dd..0a8a2d0d507 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -30,13 +30,15 @@ struct cgraph_local_info GTY(()) /* Set when function function is visible in current compilation unit only and it's address is never taken. */ bool local; - /* Set when function is small enough to be inlinable many times. */ - bool inline_many; - /* Set when function can be inlined once (false only for functions calling - alloca, using varargs and so on). */ - bool can_inline_once; /* Set once it has been finalized so we consider it to be output. */ bool finalized; + + /* False when there is something making inlining impossible (such as va_arg) */ + bool inlinable; + /* True when function should be inlined independently on it's size. */ + bool disgread_inline_limits; + /* Size of the function before inlining. */ + int self_insns; }; /* Information about the function that needs to be computed globally @@ -46,6 +48,20 @@ struct cgraph_global_info GTY(()) { /* Set when the function will be inlined exactly once. */ bool inline_once; + + /* Estimated size of the function after inlining. */ + int insns; + + /* Number of direct calls not inlined into the function body. */ + int calls; + + /* Number of times given function will be cloned during output. */ + int cloned_times; + + /* Set to true for all reachable functions before inlining is decided. + Once we inline all calls to the function and the function is local, + it is set to false. */ + bool will_be_output; }; /* Information about the function that is propagated by the RTL backend. @@ -77,6 +93,8 @@ struct cgraph_node GTY((chain_next ("%h.next"), chain_prev ("%h.previous"))) struct cgraph_node *next_nested; /* Pointer to the next function in cgraph_nodes_queue. */ struct cgraph_node *next_needed; + /* Unique id of the node. */ + int uid; PTR GTY ((skip (""))) aux; /* Set when function must be output - it is externally visible @@ -102,6 +120,7 @@ struct cgraph_edge GTY(()) struct cgraph_node *callee; struct cgraph_edge *next_caller; struct cgraph_edge *next_callee; + bool inline_call; }; /* The cgraph_varpool data strutcture. @@ -124,6 +143,7 @@ struct cgraph_varpool_node GTY(()) extern GTY(()) struct cgraph_node *cgraph_nodes; extern GTY(()) int cgraph_n_nodes; +extern GTY(()) int cgraph_max_uid; extern bool cgraph_global_info_ready; extern GTY(()) struct cgraph_node *cgraph_nodes_queue; extern FILE *cgraph_dump_file; @@ -157,5 +177,6 @@ void cgraph_finalize_compilation_unit PARAMS ((void)); void cgraph_create_edges PARAMS ((tree, tree)); void cgraph_optimize PARAMS ((void)); void cgraph_mark_needed_node PARAMS ((struct cgraph_node *, int)); +bool cgraph_inline_p PARAMS ((tree, tree)); #endif /* GCC_CGRAPH_H */ |