diff options
author | Richard Henderson <rth@cygnus.com> | 2000-04-17 12:21:09 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-04-17 12:21:09 -0700 |
commit | 10f135942226e4ae2bbeb48515be4368d9745d68 (patch) | |
tree | 0304d00cbc94155e5757d349d3e7de66029fc4e0 /gcc/reorg.c | |
parent | a73848406c824b7b2f6095c205828e2a1c8427a2 (diff) | |
download | gcc-10f135942226e4ae2bbeb48515be4368d9745d68.zip gcc-10f135942226e4ae2bbeb48515be4368d9745d68.tar.gz gcc-10f135942226e4ae2bbeb48515be4368d9745d68.tar.bz2 |
loop.c (canonicalize_condition): Add WANT_REG argument.
* loop.c (canonicalize_condition): Add WANT_REG argument.
Stop the search if we match it.
* expr.h (canonicalize_condition): Update decl.
* predict.c (expected_value_to_br_prob): Use it. Track last
expected value note.
(find_expected_value): Remove.
* reorg.c (mostly_true_jump): Always use BR_PROB if present.
From-SVN: r33214
Diffstat (limited to 'gcc/reorg.c')
-rw-r--r-- | gcc/reorg.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c index 379def7..cce40c0 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -900,30 +900,29 @@ mostly_true_jump (jump_insn, condition) rtx jump_insn, condition; { rtx target_label = JUMP_LABEL (jump_insn); - rtx insn; + rtx insn, note; 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) + note = find_reg_note (jump_insn, REG_BR_PROB, 0); + if (note) { - rtx note = find_reg_note (jump_insn, REG_BR_PROB, 0); - if (note) - { - int prob = XINT (note, 0); + int prob = INTVAL (XEXP (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 (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; } + /* ??? Ought to use estimate_probability instead. */ + /* 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 |