cgraph.c (cgraph_local_info): Call cgraph_get_node instead of cgraph_node, handle...
authorMartin Jambor <mjambor@suse.cz>
Mon, 11 Apr 2011 15:17:44 +0000 (17:17 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Mon, 11 Apr 2011 15:17:44 +0000 (17:17 +0200)
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

gcc/ChangeLog
gcc/cgraph.c
gcc/gimplify.c
gcc/java/ChangeLog
gcc/java/decl.c
gcc/predict.c
gcc/tree-inline.c
gcc/tree-ssa-alias.c
gcc/varasm.c

index dee374f6d6370cf66c297da49e91fc4d3b1efd36..1533847975f44c383492c9f775bf993e5d00104d 100644 (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
index a6217e9af35bc6e26ac79a26547a246541bfbbad..80f7c7c34f71fbce80b9c8d46b9deaf2b7335ea6 100644 (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;
 }
index 633e613da9f88080f55063c781900ca42a11e9f0..598fe9cfb9786df9b1fd8fa9bfebcfd99b8f5f94 100644 (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.  */
index 61b24187337fbc5d91e17e742c887083e3240caf..3f81762c9011908efced3db922cf7e29b1a731fc 100644 (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
index a17b826696b165ec094b1804788d8ef1c0b31ba8..75f44c97585eaa573f0d328ad638215d18fa3f8b 100644 (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));
 }
index b9a4063073b8d2ac97f05762d5335c8d994b27cf..f210428fca1fddfb2f182fa315cf39bc11843040 100644 (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.  */
index 25d3e26badf194bf09cbcf1fbedcad3588de7ddc..140d7781c8438334a10fc5d499f25638cce4b900 100644 (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.  */
index f7fc7d2088152bd9d619a61c2abcbefe519fd911..4edacb56ba628c6ecf61c0f947f0af7faf1d2dde 100644 (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;
     }
index 332f0f46033c62ff3e7eb62dd497e0857a99e8d0..8365612e5f37d473978b3a8643039343d3bcb28b 100644 (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;