From f875410705747d41663d99d930469fd295a47a4b Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Tue, 17 Nov 2009 10:35:51 +0100 Subject: [PATCH] cgraph.c (cgraph_update_edges_for_call_stmt_node): Do not access removed node. * cgraph.c (cgraph_update_edges_for_call_stmt_node): Do not access removed node. * cgraphunit.c (verify_cgraph_node): Verify frequencies for match. From-SVN: r154242 --- gcc/ChangeLog | 6 ++++++ gcc/cgraph.c | 2 +- gcc/cgraphunit.c | 12 ++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index abe9443d6d0..b697ea4ece8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-11-17 Jan Hubicka + + * 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 * config/i386/predicates.md (x86_64_szext_general_operand): Do not diff --git a/gcc/cgraph.c b/gcc/cgraph.c index f2d76091799..391882ed2c8 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -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 { diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 1c13f955cfa..2c232a53ad2 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -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 -- 2.30.2