| diff -durN gcc-3.4.6.orig/gcc/flow.c gcc-3.4.6/gcc/flow.c |
| --- gcc-3.4.6.orig/gcc/flow.c 2005-09-01 22:51:09.000000000 +0200 |
| +++ gcc-3.4.6/gcc/flow.c 2007-08-15 23:00:30.000000000 +0200 |
| @@ -1884,6 +1884,7 @@ |
| rtx set_src = SET_SRC (pc_set (BB_END (bb))); |
| rtx cond_true = XEXP (set_src, 0); |
| rtx reg = XEXP (cond_true, 0); |
| + enum rtx_code inv_cond; |
| |
| if (GET_CODE (reg) == SUBREG) |
| reg = SUBREG_REG (reg); |
| @@ -1892,11 +1893,13 @@ |
| in the form of a comparison of a register against zero. |
| If the condition is more complex than that, then it is safe |
| not to record any information. */ |
| - if (GET_CODE (reg) == REG |
| + inv_cond = reversed_comparison_code (cond_true, BB_END (bb)); |
| + if (inv_cond != UNKNOWN |
| + && GET_CODE (reg) == REG |
| && XEXP (cond_true, 1) == const0_rtx) |
| { |
| rtx cond_false |
| - = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)), |
| + = gen_rtx_fmt_ee (inv_cond, |
| GET_MODE (cond_true), XEXP (cond_true, 0), |
| XEXP (cond_true, 1)); |
| if (GET_CODE (XEXP (set_src, 1)) == PC) |