On 11/29/08 10:37:33, Eric Botcazou wrote:
> > The conditional jump instruction formed by instructions
> > 56 and 57 above is deleted because GCSE thinks that
> > (reg:SI 61 [ p$thread ]) is non-zero.  It comes to this
> > conclusion when it propagates the
> >    REG_EQUAL (const_int 4294967296 [0x100000000])
> > value listed in instruction 25:
> >
> > (insn 25 24 26 2 (set (reg:SI 61 [ p$thread ])
> >         (subreg:SI (reg:TI 70 [ D.2967 ]) 8)) 40 {*movsi_1} (nil)
> >     (expr_list:REG_EQUAL (const_int 4294967296 [0x100000000])
> >         (nil)))
> >
> > Note that it takes 33 bits to express 0x100000000, and it won't
> > fit into an SImode container.
> 
> Then this note is invalid, REG_EQUAL pertains to the destination register:
[...]

Eric, thanks for the clarification on the role of REG_EQUAL notes.

> IOW the culprit is not GCSE but whoever has created this note.

Agreed.  The routine that creates the errant REG_EQUAL note is
lookup_as_function().  I posted a possible patch:
  http://gcc.gnu.org/ml/gcc-patches/2008-11/msg01466.html
(My FSF assignment is on file.)

- Gary

Reply via email to