aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@gcc.gnu.org>2000-05-08 23:15:18 -0700
committerRichard Henderson <rth@gcc.gnu.org>2000-05-08 23:15:18 -0700
commitc66f079e8d2c33f5996fc0b7383153336a957efd (patch)
tree4e267c18c32a4fdd44a7212340170c2318268bd3
parent2ff00dd433d9ad9b342bbaa2eb90ced859a02874 (diff)
downloadgcc-c66f079e8d2c33f5996fc0b7383153336a957efd.zip
gcc-c66f079e8d2c33f5996fc0b7383153336a957efd.tar.gz
gcc-c66f079e8d2c33f5996fc0b7383153336a957efd.tar.bz2
predict.c (PROB_NEVER, [...]): New.
* predict.c (PROB_NEVER, PROB_VERY_UNLIKELY): New. (PROB_UNLIKELY, PROB_EVEN, PROB_LIKELY): New. (PROB_VERY_LIKELY, PROB_ALWAYS): New. (estimate_probability, expected_value_to_br_prob): Use them. From-SVN: r33792
-rw-r--r--gcc/predict.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/gcc/predict.c b/gcc/predict.c
index b957e5f6..85f3ea1 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -48,6 +48,14 @@
#include "expr.h"
+/* Random guesstimation given names. */
+#define PROB_NEVER (0)
+#define PROB_VERY_UNLIKELY (REG_BR_PROB_BASE / 10 - 1)
+#define PROB_UNLIKELY (REG_BR_PROB_BASE * 4 / 10 - 1)
+#define PROB_EVEN (REG_BR_PROB_BASE / 2)
+#define PROB_LIKELY (REG_BR_PROB_BASE - PROB_UNLIKELY)
+#define PROB_VERY_LIKELY (REG_BR_PROB_BASE - PROB_VERY_UNLIKELY)
+#define PROB_ALWAYS (REG_BR_PROB_BASE)
/* Statically estimate the probability that a branch will be taken.
??? In the next revision there will be a number of other predictors added
@@ -89,7 +97,7 @@ estimate_probability (loops_info)
if (! find_reg_note (last_insn, REG_BR_PROB, 0))
REG_NOTES (last_insn)
= gen_rtx_EXPR_LIST (REG_BR_PROB,
- GEN_INT (REG_BR_PROB_BASE),
+ GEN_INT (PROB_VERY_LIKELY),
REG_NOTES (last_insn));
}
}
@@ -124,9 +132,9 @@ estimate_probability (loops_info)
if (e->dest->succ == NULL)
{
if (e->flags & EDGE_FALLTHRU)
- prob = REG_BR_PROB_BASE;
+ prob = PROB_ALWAYS;
else
- prob = 0;
+ prob = PROB_NEVER;
goto emitnote;
}
@@ -142,7 +150,7 @@ estimate_probability (loops_info)
|| (GET_CODE (XEXP (cond, 1)) == REG
&& REGNO_POINTER_FLAG (REGNO (XEXP (cond, 1))))))
{
- prob = REG_BR_PROB_BASE / 10;
+ prob = PROB_UNLIKELY;
goto emitnote;
}
break;
@@ -153,7 +161,7 @@ estimate_probability (loops_info)
|| (GET_CODE (XEXP (cond, 1)) == REG
&& REGNO_POINTER_FLAG (REGNO (XEXP (cond, 1))))))
{
- prob = REG_BR_PROB_BASE - (REG_BR_PROB_BASE / 10);
+ prob = PROB_LIKELY;
goto emitnote;
}
break;
@@ -170,20 +178,20 @@ estimate_probability (loops_info)
{
case CONST_INT:
/* Unconditional branch. */
- prob = (cond == const0_rtx ? 0 : REG_BR_PROB_BASE);
+ prob = (cond == const0_rtx ? PROB_NEVER : PROB_ALWAYS);
goto emitnote;
case EQ:
- prob = REG_BR_PROB_BASE / 10;
+ prob = PROB_UNLIKELY;
goto emitnote;
case NE:
- prob = REG_BR_PROB_BASE - (REG_BR_PROB_BASE / 10);
+ prob = PROB_LIKELY;
goto emitnote;
case LE:
case LT:
if (XEXP (cond, 1) == const0_rtx)
{
- prob = REG_BR_PROB_BASE / 10;
+ prob = PROB_UNLIKELY;
goto emitnote;
}
break;
@@ -193,7 +201,7 @@ estimate_probability (loops_info)
|| (GET_CODE (XEXP (cond, 1)) == CONST_INT
&& INTVAL (XEXP (cond, 1)) == -1))
{
- prob = REG_BR_PROB_BASE - (REG_BR_PROB_BASE / 10);
+ prob = PROB_LIKELY;
goto emitnote;
}
break;
@@ -203,7 +211,7 @@ estimate_probability (loops_info)
}
/* If we havn't chosen something by now, predict 50-50. */
- prob = REG_BR_PROB_BASE / 2;
+ prob = PROB_EVEN;
emitnote:
REG_NOTES (last_insn)
@@ -280,8 +288,10 @@ expected_value_to_br_prob ()
/* Turn the condition into a scaled branch probability. */
if (cond == const1_rtx)
- cond = GEN_INT (REG_BR_PROB_BASE);
- else if (cond != const0_rtx)
+ cond = GEN_INT (PROB_VERY_LIKELY);
+ else if (cond == const0_rtx)
+ cond = GEN_INT (PROB_VERY_UNLIKELY);
+ else
abort ();
REG_NOTES (insn) = alloc_EXPR_LIST (REG_BR_PROB, cond, REG_NOTES (insn));
}