summaryrefslogtreecommitdiff
path: root/gcc/cgraph.h
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2003-07-12 01:07:40 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2003-07-12 01:07:40 +0000
commitd7c6d889a1e94af0a28def617d281c6efd93691a (patch)
treef057de333fbf0a3f853e92f6e52227b3713693c6 /gcc/cgraph.h
parenta2d0abf6dc0036048725d9cd9a49c700c696225e (diff)
downloadgcc-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.h31
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 */