diff options
author | Martin Jambor <mjambor@suse.cz> | 2011-04-11 17:17:44 +0200 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2011-04-11 17:17:44 +0200 |
commit | 9f9ebcdfc635e94463350898b625e0f3b1431ec0 (patch) | |
tree | 2c3c04107c858150dae9c1fa382093e2fa6bd141 | |
parent | 581985d71026fb5cf52fef156b76a619ce07e88c (diff) | |
download | gcc-9f9ebcdfc635e94463350898b625e0f3b1431ec0.zip gcc-9f9ebcdfc635e94463350898b625e0f3b1431ec0.tar.gz gcc-9f9ebcdfc635e94463350898b625e0f3b1431ec0.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/cgraph.c | 15 | ||||
-rw-r--r-- | gcc/gimplify.c | 12 | ||||
-rw-r--r-- | gcc/java/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/java/decl.c | 5 | ||||
-rw-r--r-- | gcc/predict.c | 15 | ||||
-rw-r--r-- | gcc/tree-inline.c | 3 | ||||
-rw-r--r-- | gcc/tree-ssa-alias.c | 17 | ||||
-rw-r--r-- | gcc/varasm.c | 18 |
9 files changed, 77 insertions, 29 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dee374f..1533847 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,21 @@ 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 of cgraph_node. * final.c (rest_of_clean_state): Likewise. diff --git a/gcc/cgraph.c b/gcc/cgraph.c index a6217e9..80f7c7c 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -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; } diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 633e613..598fe9c 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -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. */ diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 61b2418..3f81762 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -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 diff --git a/gcc/java/decl.c b/gcc/java/decl.c index a17b826..75f44c9 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -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)); } diff --git a/gcc/predict.c b/gcc/predict.c index b9a4063..f210428 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -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. */ diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 25d3e26..140d778 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -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. */ diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index f7fc7d2..4edacb5 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -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; } diff --git a/gcc/varasm.c b/gcc/varasm.c index 332f0f4..8365612 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -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; |