This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: ia32: regmove
On Wed, Sep 01, 1999 at 02:59:35AM +0100, Joern Rennecke wrote:
> Maybe this is what you meant?
Nope. This doesn't fix the problem.
We begin with
(insn 33 32 36 (parallel[
(set (reg:SI 29)
(and:SI (reg:SI 26)
(const_int -8 [0xfffffff8])))
(clobber (reg:CC 17 flags))
] ) 232 {*andsi_1}
(expr_list:REG_UNUSED (reg:CC 17 flags)
(nil)))
(insn 37 36 38 (set (reg:CC 17 flags)
(compare:CC (reg:SI 26)
(const_int 24 [0x18]))) 5 {cmpsi_1}
(expr_list:REG_DEAD (reg:SI 26)
(nil)))
(insn 38 37 24 (set (reg:SI 25)
(if_then_else:SI (ge (reg:CC 17 flags)
(const_int 0 [0x0]))
(reg:SI 29)
(reg:SI 25))) 463 {x86_movsicc_0_m1+1}
(expr_list:REG_DEAD (reg:CC 17 flags)
(expr_list:REG_DEAD (reg:SI 29)
(nil))))
As we iterate through the loop, we pick up src_note=(REG_DEAD (reg:SI 26))
from insn 37. Next time round with insn 38, the code path is
1735 /* See if all of DST dies in P. This test is
1736 slightly more conservative than it needs to be. */
1737 if ((dst_note = find_regno_note (p, REG_DEAD, REGNO (dst)))
1738 && (GET_MODE (XEXP (dst_note, 0)) == GET_MODE (dst)))
True.
1740 if (! src_note)
False.
1838 if (validate_replace_rtx (dst, src_subreg, p))
1839 success = 1;
Succeeds.
r~