http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&r1=1.593&r2=1.594 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15068 =================================================================== RCS file: /cvs/gcc/gcc/gcc/flow.c,v retrieving revision 1.593 retrieving revision 1.594 diff -u -r1.593 -r1.594 --- gcc/gcc/flow.c 2004/07/09 03:29:32 1.593 +++ gcc/gcc/flow.c 2004/08/02 13:19:39 1.594 @@ -1865,19 +1865,22 @@ 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); /* We can only track conditional lifetimes if the condition is - 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 (REG_P (reg) + in the form of a reversible comparison of a register against + zero. If the condition is more complex than that, then it is + safe not to record any information. */ + inv_cond = reversed_comparison_code (cond_true, BB_END (bb)); + if (inv_cond != UNKNOWN + && REG_P (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)