From 5d20321177a3ef53a7051e5d7e97d2e89573f2bc Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Fri, 3 Oct 2014 00:46:16 +0000 Subject: [PATCH] tree-ssa-threadupdate.c (freqs_to_counts_path): Scale frequencies up when synthesizing counts to avoid rounding errors. 2014-10-02 Teresa Johnson * tree-ssa-threadupdate.c (freqs_to_counts_path): Scale frequencies up when synthesizing counts to avoid rounding errors. From-SVN: r215830 --- gcc/ChangeLog | 5 +++++ gcc/tree-ssa-threadupdate.c | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bbdef99c7e1..75dd0b5ceac 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-10-02 Teresa Johnson + + * tree-ssa-threadupdate.c (freqs_to_counts_path): Scale frequencies + up when synthesizing counts to avoid rounding errors. + 2014-10-02 Teresa Johnson PR middle-end/63422 diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index e3e77cf2558..d660fdba6a9 100644 --- a/gcc/tree-ssa-threadupdate.c +++ b/gcc/tree-ssa-threadupdate.c @@ -977,15 +977,25 @@ freqs_to_counts_path (struct redirection_data *rd) edge ein; edge_iterator ei; FOR_EACH_EDGE (ein, ei, e->dest->preds) - ein->count = EDGE_FREQUENCY (ein); + { + /* Scale up the frequency by REG_BR_PROB_BASE, to avoid rounding + errors applying the probability when the frequencies are very + small. */ + ein->count = apply_probability (ein->src->frequency * REG_BR_PROB_BASE, + ein->probability); + } for (unsigned int i = 1; i < path->length (); i++) { edge epath = (*path)[i]->e; edge esucc; + /* Scale up the frequency by REG_BR_PROB_BASE, to avoid rounding + errors applying the edge probability when the frequencies are very + small. */ + epath->src->count = epath->src->frequency * REG_BR_PROB_BASE; FOR_EACH_EDGE (esucc, ei, epath->src->succs) - esucc->count = EDGE_FREQUENCY (esucc); - epath->src->count = epath->src->frequency; + esucc->count = apply_probability (esucc->src->count, + esucc->probability); } } -- 2.30.2