cgraph.c (cgraph_node_can_be_local_p): New function.

2009-06-10  Martin Jambor  <mjambor@suse.cz>

	* cgraph.c (cgraph_node_can_be_local_p): New function.
	(cgraph_make_node_local): New function.
	* cgraph.h (cgraph_node_can_be_local_p): Declare.
	(cgraph_make_node_local): Declare.

From-SVN: r148349
This commit is contained in:
Martin Jambor 2009-06-10 18:43:24 +02:00 committed by Martin Jambor
parent d8259b07b0
commit a550d677f5
3 changed files with 37 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2009-06-10 Martin Jambor <mjambor@suse.cz>
* cgraph.c (cgraph_node_can_be_local_p): New function.
(cgraph_make_node_local): New function.
* cgraph.h (cgraph_node_can_be_local_p): Declare.
(cgraph_make_node_local): Declare.
2009-06-10 Nathan Froyd <froydnj@codesourcery.com>
* tree.h (tree_base): Add packed_flag and user_align fields.

View File

@ -1871,4 +1871,32 @@ cgraph_add_new_function (tree fndecl, bool lowered)
}
}
/* Return true if NODE can be made local for API change.
Extern inline functions and C++ COMDAT functions can be made local
at the expense of possible code size growth if function is used in multiple
compilation units. */
bool
cgraph_node_can_be_local_p (struct cgraph_node *node)
{
return !node->needed;
}
/* Bring NODE local. */
void
cgraph_make_node_local (struct cgraph_node *node)
{
gcc_assert (cgraph_node_can_be_local_p (node));
if (DECL_COMDAT (node->decl) || DECL_EXTERNAL (node->decl))
{
DECL_COMDAT (node->decl) = 0;
DECL_ONE_ONLY (node->decl) = 0;
TREE_PUBLIC (node->decl) = 0;
DECL_WEAK (node->decl) = 0;
DECL_EXTERNAL (node->decl) = 0;
node->local.externally_visible = false;
node->local.local = true;
gcc_assert (cgraph_function_body_availability (node) == AVAIL_LOCAL);
}
}
#include "gt-cgraph.h"

View File

@ -505,6 +505,8 @@ void dump_varpool_node (FILE *, struct varpool_node *);
void varpool_finalize_decl (tree);
bool decide_is_variable_needed (struct varpool_node *, tree);
enum availability cgraph_variable_initializer_availability (struct varpool_node *);
void cgraph_make_node_local (struct cgraph_node *);
bool cgraph_node_can_be_local_p (struct cgraph_node *);
bool varpool_assemble_pending_decls (void);
bool varpool_assemble_decl (struct varpool_node *node);