Another switch testcase failure with enable-checking
Jan Hubicka
jh@suse.cz
Sat Aug 10 10:44:00 GMT 2002
> Jan Hubicka wrote:
> >>All,
> >>
> >>I've stumbled on another interesting switch testcase which triggers an
> >>enable-checking abort
> >>on all the ports I've tried so far x86, mips, sh, s390.
> >>
> >>For this testcase I get at -O2 with enable-checking enabled
> >>
> >>bug2.c: In function `foo':
> >>bug2.c:28: warning: verify_flow_info: Wrong probability of edge 1->19
> >>10008
> >>bug2.c:28: internal compiler error: verify_flow_info failed
> >>
> >>Jan any ideas what's wrong with the edge probability calcs
> >
> >
> >This is commonly just some roundoff error around. I will track it down
> >tomorrow.
> >
> Yes it's an around-off error somewhere I tracked down where rhe bad
> probability is
> being set. It's in cfg.c:redirect_edge_succ_nodup the stmt
>
> "s->probability += e->probability;"
>
> results in a probability > 10000 because s->probability is 9942 and
> e->probaility
> is 566 which add up to 10008.
>
> This happens on any target where the switch gets collapsed to an
> if-then-else.
Hi,
I am attaching patch I will install shortly.
Regstested/bootstrapped i386
Honza
Sat Aug 10 19:43:09 CEST 2002 Jan Hubicka <jh@suse.cz>
Graham Scott
* cfg.c (redirect_edge_succ_nodup): Avoid overflows due to roundoff
errors.
*** cfg.c.old Sat Aug 10 20:55:22 2002
--- cfg.c Sat Aug 10 20:55:46 2002
*************** redirect_edge_succ_nodup (e, new_succ)
*** 455,460 ****
--- 455,462 ----
{
s->flags |= e->flags;
s->probability += e->probability;
+ if (s->probability > REG_BR_PROB_BASE)
+ s->probability = REG_BR_PROB_BASE;
s->count += e->count;
remove_edge (e);
e = s;
More information about the Gcc-bugs
mailing list