From 18d13f34175f157bc3152afdf48da798452afc1b Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sat, 8 Mar 2003 14:26:37 +0100 Subject: inline-3.c: New test. * gcc.dg/inline-3.c: New test. * c-decl.c: (finish_function): Update call of tree_inlinable_function_p. * cgraph.h: (cgraph_local_info): Add can_inline_once (cgraph_global_info): Add inline_once. (cgraph_node): Add previous. (cgraph_remove_node): New. * cgraphunit.c (cgraph_mark_functions_to_inline_once): New static function. (cgraph_optimize): Call it. (cgraph_finalize_function): Set inlinable flags. (cgraph_finalize_compilation_unit): Actually remove the reclaimed nodes. (cgraph_mark_functions_to_output): Use new inlining heuristics flags. (cgraph_expand_function): Likewise. * cgraph.c (cgraph_node): Put nodes into doubly linked chain. (cgraph_remove_node): New function. * flags.h (flag_inline_functions_called_once): Declare. * tree-inline.c: Include cgraph.h (inlinable_functions_p): Add extra argument to bypass limits. (expand_call_inline): Obey cgraph flag. * tree-inline.h (tree_inlinable_function_p): Update prototype. From-SVN: r63983 --- gcc/cgraph.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'gcc/cgraph.h') diff --git a/gcc/cgraph.h b/gcc/cgraph.h index 6c8c8af..b785e17 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -30,7 +30,11 @@ struct cgraph_local_info /* Set when function function is visiable in current compilation unit only and it's address is never taken. */ bool local; + /* Set when function is small enought 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; }; /* Information about the function that needs to be computed globally @@ -38,8 +42,8 @@ struct cgraph_local_info struct cgraph_global_info { - /* Empty for the moment. */ - int dummy; + /* Set when the function will be inlined exactly once. */ + bool inline_once; }; /* Information about the function that is propagated by the RTL backend. @@ -60,7 +64,7 @@ struct cgraph_node tree decl; struct cgraph_edge *callees; struct cgraph_edge *callers; - struct cgraph_node *next; + struct cgraph_node *next, *previous; /* For nested functions points to function the node is nested in. */ struct cgraph_node *origin; /* Points to first nested function, if any. */ @@ -100,6 +104,7 @@ extern bool cgraph_global_info_ready; /* In cgraph.c */ void dump_cgraph PARAMS ((FILE *)); void cgraph_remove_call PARAMS ((tree, tree)); +void cgraph_remove_node PARAMS ((struct cgraph_node *)); struct cgraph_edge *cgraph_record_call PARAMS ((tree, tree)); struct cgraph_node *cgraph_node PARAMS ((tree decl)); bool cgraph_calls_p PARAMS ((tree, tree)); -- cgit v1.1