OSDN Git Service

* cgraph.c (cgraph_update_edges_for_call_stmt_node): Do not access
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Nov 2009 09:35:51 +0000 (09:35 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Nov 2009 09:35:51 +0000 (09:35 +0000)
removed node.
* cgraphunit.c (verify_cgraph_node): Verify frequencies for match.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154242 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cgraph.c
gcc/cgraphunit.c

index abe9443..b697ea4 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-17  Jan Hubicka  <jh@suse.cz>
+
+       * cgraph.c (cgraph_update_edges_for_call_stmt_node): Do not access
+       removed node.
+       * cgraphunit.c (verify_cgraph_node): Verify frequencies for match.
+
 2009-11-17  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/predicates.md (x86_64_szext_general_operand): Do not
index f2d7609..391882e 100644 (file)
@@ -1000,10 +1000,10 @@ cgraph_update_edges_for_call_stmt_node (struct cgraph_node *node,
          /* Otherwise remove edge and create new one; we can't simply redirect
             since function has changed, so inline plan and other information
             attached to edge is invalid.  */
-         cgraph_remove_edge (e);
          count = e->count;
          frequency = e->frequency;
          loop_nest = e->loop_nest;
+         cgraph_remove_edge (e);
        }
       else
        {
index 1c13f95..2c232a5 100644 (file)
@@ -620,6 +620,18 @@ verify_cgraph_node (struct cgraph_node *node)
          error ("caller edge frequency is too large");
          error_found = true;
        }
+      if (gimple_has_body_p (e->caller->decl)
+          && !e->caller->global.inlined_to
+          && (e->frequency
+             != compute_call_stmt_bb_frequency (e->caller->decl,
+                                                gimple_bb (e->call_stmt))))
+       {
+         error ("caller edge frequency %i does not match BB freqency %i",
+                e->frequency,
+                compute_call_stmt_bb_frequency (e->caller->decl,
+                                                gimple_bb (e->call_stmt)));
+         error_found = true;
+       }
       if (!e->inline_failed)
        {
          if (node->global.inlined_to