This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

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~

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]