cgraph.c (cgraph_local_info): Call cgraph_get_node instead of cgraph_node, handle NULL return value.

2011-04-11  Martin Jambor  <mjambor@suse.cz>

gcc/
	* cgraph.c (cgraph_local_info): Call cgraph_get_node instead
	of cgraph_node,	handle NULL return value.
	(cgraph_global_info): Likewise.
	(cgraph_rtl_info): Likewise.
	* tree-inline.c (estimate_num_insns): Likewise.
	* gimplify.c (unshare_body): Likewise.
	(unvisit_body): Likewise.
	(gimplify_body): Likewise.
	* predict.c (optimize_function_for_size_p): Likewise.
	* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Likewise.
	(call_may_clobber_ref_p_1): Likewise.
	* varasm.c (function_section_1): Likewise.
	(assemble_start_function): Likewise.

gcc/java/
	* decl.c (java_mark_decl_local): Call cgraph_get_node instead of
	cgraph_node and handle returned NULL.

From-SVN: r172258
This commit is contained in:
Martin Jambor 2011-04-11 17:17:44 +02:00 committed by Martin Jambor
parent 581985d710
commit 9f9ebcdfc6
9 changed files with 77 additions and 29 deletions

View File

@ -1,3 +1,19 @@
2011-04-11 Martin Jambor <mjambor@suse.cz>
* cgraph.c (cgraph_local_info): Call cgraph_get_node instead
of cgraph_node, handle NULL return value.
(cgraph_global_info): Likewise.
(cgraph_rtl_info): Likewise.
* tree-inline.c (estimate_num_insns): Likewise.
* gimplify.c (unshare_body): Likewise.
(unvisit_body): Likewise.
(gimplify_body): Likewise.
* predict.c (optimize_function_for_size_p): Likewise.
* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Likewise.
(call_may_clobber_ref_p_1): Likewise.
* varasm.c (function_section_1): Likewise.
(assemble_start_function): Likewise.
2011-04-11 Martin Jambor <mjambor@suse.cz>
* except.c (set_nothrow_function_flags): Call cgraph_get_node instead

View File

@ -1766,7 +1766,9 @@ cgraph_local_info (tree decl)
struct cgraph_node *node;
gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
node = cgraph_node (decl);
node = cgraph_get_node (decl);
if (!node)
return NULL;
return &node->local;
}
@ -1778,7 +1780,9 @@ cgraph_global_info (tree decl)
struct cgraph_node *node;
gcc_assert (TREE_CODE (decl) == FUNCTION_DECL && cgraph_global_info_ready);
node = cgraph_node (decl);
node = cgraph_get_node (decl);
if (!node)
return NULL;
return &node->global;
}
@ -1790,9 +1794,10 @@ cgraph_rtl_info (tree decl)
struct cgraph_node *node;
gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
node = cgraph_node (decl);
if (decl != current_function_decl
&& !TREE_ASM_WRITTEN (node->decl))
node = cgraph_get_node (decl);
if (!node
|| (decl != current_function_decl
&& !TREE_ASM_WRITTEN (node->decl)))
return NULL;
return &node->rtl;
}

View File

@ -959,11 +959,11 @@ copy_if_shared (tree *tp)
static void
unshare_body (tree *body_p, tree fndecl)
{
struct cgraph_node *cgn = cgraph_node (fndecl);
struct cgraph_node *cgn = cgraph_get_node (fndecl);
copy_if_shared (body_p);
if (body_p == &DECL_SAVED_TREE (fndecl))
if (cgn && body_p == &DECL_SAVED_TREE (fndecl))
for (cgn = cgn->nested; cgn; cgn = cgn->next_nested)
unshare_body (&DECL_SAVED_TREE (cgn->decl), cgn->decl);
}
@ -1000,11 +1000,11 @@ unmark_visited (tree *tp)
static void
unvisit_body (tree *body_p, tree fndecl)
{
struct cgraph_node *cgn = cgraph_node (fndecl);
struct cgraph_node *cgn = cgraph_get_node (fndecl);
unmark_visited (body_p);
if (body_p == &DECL_SAVED_TREE (fndecl))
if (cgn && body_p == &DECL_SAVED_TREE (fndecl))
for (cgn = cgn->nested; cgn; cgn = cgn->next_nested)
unvisit_body (&DECL_SAVED_TREE (cgn->decl), cgn->decl);
}
@ -7695,6 +7695,7 @@ gimplify_body (tree *body_p, tree fndecl, bool do_parms)
gimple_seq parm_stmts, seq;
gimple outer_bind;
struct gimplify_ctx gctx;
struct cgraph_node *cgn;
timevar_push (TV_TREE_GIMPLIFY);
@ -7712,7 +7713,8 @@ gimplify_body (tree *body_p, tree fndecl, bool do_parms)
unshare_body (body_p, fndecl);
unvisit_body (body_p, fndecl);
if (cgraph_node (fndecl)->origin)
cgn = cgraph_get_node (fndecl);
if (cgn && cgn->origin)
nonlocal_vlas = pointer_set_create ();
/* Make sure input_location isn't set to something weird. */

View File

@ -1,3 +1,8 @@
2011-04-11 Martin Jambor <mjambor@suse.cz>
* decl.c (java_mark_decl_local): Call cgraph_get_node instead of
cgraph_node and handle returned NULL.
2011-03-25 Kai Tietz <ktietz@redhat.com>
* jcf-parse.c (java_read_sourcefilenames): Use filename_cmp

View File

@ -1928,7 +1928,10 @@ java_mark_decl_local (tree decl)
#ifdef ENABLE_CHECKING
/* Double check that we didn't pass the function to the callgraph early. */
if (TREE_CODE (decl) == FUNCTION_DECL)
gcc_assert (!cgraph_node (decl)->local.finalized);
{
struct cgraph_node *node = cgraph_get_node (decl);
gcc_assert (!node || !node->local.finalized);
}
#endif
gcc_assert (!DECL_RTL_SET_P (decl));
}

View File

@ -214,10 +214,17 @@ probably_never_executed_bb_p (const_basic_block bb)
bool
optimize_function_for_size_p (struct function *fun)
{
return (optimize_size
|| (fun && fun->decl
&& (cgraph_node (fun->decl)->frequency
== NODE_FREQUENCY_UNLIKELY_EXECUTED)));
struct cgraph_node *node;
if (optimize_size)
return true;
if (!fun || !fun->decl)
return false;
node = cgraph_get_node (fun->decl);
if (node && (node->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED))
return true;
else
return false;
}
/* Return true when current function should always be optimized for speed. */

View File

@ -3470,10 +3470,11 @@ estimate_num_insns (gimple stmt, eni_weights *weights)
case GIMPLE_CALL:
{
tree decl = gimple_call_fndecl (stmt);
struct cgraph_node *node;
/* Do not special case builtins where we see the body.
This just confuse inliner. */
if (!decl || cgraph_node (decl)->analyzed)
if (!decl || !(node = cgraph_get_node (decl)) || node->analyzed)
;
/* For buitins that are likely expanded to nothing or
inlined do not account operand costs. */

View File

@ -1245,14 +1245,18 @@ ref_maybe_used_by_call_p_1 (gimple call, ao_ref *ref)
/* Check if base is a global static variable that is not read
by the function. */
if (TREE_CODE (base) == VAR_DECL
if (callee != NULL_TREE
&& TREE_CODE (base) == VAR_DECL
&& TREE_STATIC (base))
{
struct cgraph_node *node = cgraph_get_node (callee);
bitmap not_read;
if (callee != NULL_TREE
&& (not_read
= ipa_reference_get_not_read_global (cgraph_node (callee)))
/* FIXME: Callee can be an OMP builtin that does not have a call graph
node yet. We should enforce that there are nodes for all decls in the
IL and remove this check instead. */
if (node
&& (not_read = ipa_reference_get_not_read_global (node))
&& bitmap_bit_p (not_read, DECL_UID (base)))
goto process_args;
}
@ -1512,10 +1516,11 @@ call_may_clobber_ref_p_1 (gimple call, ao_ref *ref)
&& TREE_CODE (base) == VAR_DECL
&& TREE_STATIC (base))
{
struct cgraph_node *node = cgraph_get_node (callee);
bitmap not_written;
if ((not_written
= ipa_reference_get_not_written_global (cgraph_node (callee)))
if (node
&& (not_written = ipa_reference_get_not_written_global (node))
&& bitmap_bit_p (not_written, DECL_UID (base)))
return false;
}

View File

@ -573,11 +573,14 @@ function_section_1 (tree decl, bool force_cold)
if (decl)
{
struct cgraph_node *node = cgraph_node (decl);
struct cgraph_node *node = cgraph_get_node (decl);
freq = node->frequency;
startup = node->only_called_at_startup;
exit = node->only_called_at_exit;
if (node)
{
freq = node->frequency;
startup = node->only_called_at_startup;
exit = node->only_called_at_exit;
}
}
if (force_cold)
freq = NODE_FREQUENCY_UNLIKELY_EXECUTED;
@ -1575,11 +1578,12 @@ assemble_start_function (tree decl, const char *fnname)
}
else if (DECL_SECTION_NAME (decl))
{
struct cgraph_node *node = cgraph_get_node (current_function_decl);
/* Calls to function_section rely on first_function_block_is_cold
being accurate. */
first_function_block_is_cold
= (cgraph_node (current_function_decl)->frequency
== NODE_FREQUENCY_UNLIKELY_EXECUTED);
first_function_block_is_cold = (node
&& node->frequency
== NODE_FREQUENCY_UNLIKELY_EXECUTED);
}
in_cold_section_p = first_function_block_is_cold;