diff options
author | Doug Evans <dje@gnu.org> | 1997-03-28 22:38:24 +0000 |
---|---|---|
committer | Doug Evans <dje@gnu.org> | 1997-03-28 22:38:24 +0000 |
commit | a6c383b0d8a2819e3cfaa7ea900e9244acacb666 (patch) | |
tree | 999c5704b3c88aeabc57a507f7efc9001f0fad46 | |
parent | 65f7a65344967d9e30291d99bcb342ad85f37b2c (diff) | |
download | gcc-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.c | 20 |
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 |