From d9490f2f4ebedc6c568b963b230f20b298a22159 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 22 Apr 2000 11:34:59 -0700 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/predict.c | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6ca390b1269..be2cd8a000a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-04-22 Richard Henderson + + * 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 * diagnostic.h: New file. diff --git a/gcc/predict.c b/gcc/predict.c index 7ed470929af..57b71e2d9c2 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -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 -- 2.30.2