aboutsummaryrefslogtreecommitdiff
path: root/gcc/reorg.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-04-17 12:21:09 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-04-17 12:21:09 -0700
commit10f135942226e4ae2bbeb48515be4368d9745d68 (patch)
tree0304d00cbc94155e5757d349d3e7de66029fc4e0 /gcc/reorg.c
parenta73848406c824b7b2f6095c205828e2a1c8427a2 (diff)
downloadgcc-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.c29
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