predict.c (expected_value_to_br_prob): Don't bomb if op1 of the collected condition is not a constant.

* predict.c (expected_value_to_br_prob): Don't bomb if op1 of
        the collected condition is not a constant.

From-SVN: r33340
This commit is contained in:
Richard Henderson 2000-04-22 11:34:59 -07:00 committed by Richard Henderson
parent 1143c0a03f
commit d9490f2f4e
2 changed files with 16 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2000-04-22 Richard Henderson <rth@cygnus.com>
* predict.c (expected_value_to_br_prob): Don't bomb if op1 of
the collected condition is not a constant.
2000-04-22 Gabriel Dos Reis <gdr@codesourcery.com>
* diagnostic.h: New file.

View File

@ -248,9 +248,19 @@ expected_value_to_br_prob ()
}
/* Collect the branch condition, hopefully relative to EV_REG. */
/* ??? At present we'll miss things like
(expected_value (eq r70 0))
(set r71 -1)
(set r80 (lt r70 r71))
(set pc (if_then_else (ne r80 0) ...))
as canonicalize_condition will render this to us as
(lt r70, r71)
Could use cselib to try and reduce this further. */
cond = XEXP (SET_SRC (PATTERN (insn)), 0);
cond = canonicalize_condition (insn, cond, 0, NULL, ev_reg);
if (! cond || XEXP (cond, 0) != ev_reg)
if (! cond
|| XEXP (cond, 0) != ev_reg
|| GET_CODE (XEXP (cond, 1)) != CONST_INT)
continue;
/* Substitute and simplify. Given that the expression we're