aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Evans <dje@gnu.org>1997-03-28 22:38:24 +0000
committerDoug Evans <dje@gnu.org>1997-03-28 22:38:24 +0000
commita6c383b0d8a2819e3cfaa7ea900e9244acacb666 (patch)
tree999c5704b3c88aeabc57a507f7efc9001f0fad46
parent65f7a65344967d9e30291d99bcb342ad85f37b2c (diff)
downloadgcc-a6c383b0d8a2819e3cfaa7ea900e9244acacb666.zip
gcc-a6c383b0d8a2819e3cfaa7ea900e9244acacb666.tar.gz
gcc-a6c383b0d8a2819e3cfaa7ea900e9244acacb666.tar.bz2
reorg.c (mostly_true_jump): Use REG_BR_PROB notes when flag_branch_probabilities.
* reorg.c (mostly_true_jump): Use REG_BR_PROB notes when flag_branch_probabilities. From-SVN: r13819
-rw-r--r--gcc/reorg.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 8f08afb..8cd4473 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -1350,6 +1350,26 @@ mostly_true_jump (jump_insn, condition)
int rare_dest = rare_destination (target_label);
int rare_fallthrough = rare_destination (NEXT_INSN (jump_insn));
+ /* If branch probabilities are available, then use that number since it
+ always gives a correct answer. */
+ if (flag_branch_probabilities)
+ {
+ rtx note = find_reg_note (jump_insn, REG_BR_PROB, 0);;
+ if (note)
+ {
+ int prob = XINT (note, 0);
+
+ if (prob >= REG_BR_PROB_BASE * 9 / 10)
+ return 2;
+ else if (prob >= REG_BR_PROB_BASE / 2)
+ return 1;
+ else if (prob >= REG_BR_PROB_BASE / 10)
+ return 0;
+ else
+ return -1;
+ }
+ }
+
/* If this is a branch outside a loop, it is highly unlikely. */
if (GET_CODE (PATTERN (jump_insn)) == SET
&& GET_CODE (SET_SRC (PATTERN (jump_insn))) == IF_THEN_ELSE