From 3ec32924f699ba537ae29631bc2748155326f850 Mon Sep 17 00:00:00 2001 From: hubicka Date: Fri, 15 Jul 2005 09:46:17 +0000 Subject: * cfg.c (update_bb_profile_for_threading): More diagnostic. * tree-ssa-threadupdate.c (redirect_edges): Update profile of dup_block. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102053 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/cfg.c | 14 ++++++++++++-- gcc/tree-ssa-threadupdate.c | 3 +++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 317e2d75f11..525ad008bb2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-07-15 Jan Hubicka + + * cfg.c (update_bb_profile_for_threading): More diagnostic. + * tree-ssa-threadupdate.c (redirect_edges): Update profile of dup_block. + 2005-07-15 Richard Guenther * c-common.c (handle_flatten_attribute): New function. diff --git a/gcc/cfg.c b/gcc/cfg.c index 2d6a3ca5c33..6aeb79417f9 100644 --- a/gcc/cfg.c +++ b/gcc/cfg.c @@ -850,7 +850,12 @@ update_bb_profile_for_threading (basic_block bb, int edge_frequency, bb->count -= count; if (bb->count < 0) - bb->count = 0; + { + if (dump_file) + fprintf (dump_file, "bb %i count became negative after threading", + bb->index); + bb->count = 0; + } /* Compute the probability of TAKEN_EDGE being reached via threaded edge. Watch for overflows. */ @@ -897,7 +902,12 @@ update_bb_profile_for_threading (basic_block bb, int edge_frequency, gcc_assert (bb == taken_edge->src); taken_edge->count -= count; if (taken_edge->count < 0) - taken_edge->count = 0; + { + if (dump_file) + fprintf (dump_file, "edge %i->%i count became negative after threading", + taken_edge->src->index, taken_edge->dest->index); + taken_edge->count = 0; + } } /* Multiply all frequencies of basic blocks in array BBS of length NBBS diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index a89a438f630..6181b27978d 100644 --- a/gcc/tree-ssa-threadupdate.c +++ b/gcc/tree-ssa-threadupdate.c @@ -609,6 +609,9 @@ redirect_edges (void **slot, void *data) fprintf (dump_file, " Threaded jump %d --> %d to %d\n", e->src->index, e->dest->index, rd->dup_block->index); + rd->dup_block->count += e->count; + rd->dup_block->frequency += EDGE_FREQUENCY (e); + EDGE_SUCC (rd->dup_block, 0)->count += e->count; /* Redirect the incoming edge to the appropriate duplicate block. */ e2 = redirect_edge_and_branch (e, rd->dup_block); -- cgit v1.2.1