diff options
Diffstat (limited to 'gcc/predict.c')
-rw-r--r-- | gcc/predict.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/predict.c b/gcc/predict.c index b957e5f6..148d46b 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -202,6 +202,19 @@ estimate_probability (loops_info) break; } + /* If one of the blocks already directly follows the current + block, then predict it as the taken path. This reduces + random block movement. */ + for (e = BASIC_BLOCK (i)->succ; e; e = e->succ_next) + if (e->dest->index == i + 1) + { + if (e->flags & EDGE_FALLTHRU) + prob = 0; + else + prob = REG_BR_PROB_BASE; + goto emitnote; + } + /* If we havn't chosen something by now, predict 50-50. */ prob = REG_BR_PROB_BASE / 2; |