From 5d20321177a3ef53a7051e5d7e97d2e89573f2bc Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Fri, 3 Oct 2014 00:46:16 +0000 Subject: 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 bbdef99..75dd0b5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 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 * tree-ssa-threadupdate.c (freqs_to_counts_path): Remove asserts to handle incoming insanities. diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index e3e77cf..d660fdb 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); } } -- cgit v1.1