OSDN Git Service

* predict.c (expected_value_to_br_prob): Don't bomb if op1 of
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 22 Apr 2000 18:34:59 +0000 (18:34 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 22 Apr 2000 18:34:59 +0000 (18:34 +0000)
        the collected condition is not a constant.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33340 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/predict.c

index 6ca390b..be2cd8a 100644 (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.
index 7ed4709..57b71e2 100644 (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