[PATCH] Fix RTL sharing problem in CSE
Jan Hubicka
jh@suse.cz
Fri Jan 17 18:25:00 GMT 2003
> In message <200301171715.h0HHFOL0006221@hiauly1.hia.nrc.ca>, "John David Anglin
> " writes:
> >> > 2003-01-16 Roger Sayle <roger@eyesopen.com>
> >> >
> >> > * cse.c (cse_insn): Avoid RTL sharing when updating the RETVAL
> >> > insn's notes following a substitution inside a libcall.
> >>
> >> This doesn't fix the hppa64 problem. I will try to investigate further.
> >
> >This is the insn that causes the ICE:
> >
> >regclass.i.12.loop:
> >(insn 599 598 600 0000000000000000 (set (reg:DI 263)
> > (mult:DI (zero_extend:DI (subreg:SI (reg:DI 262) 4))
> > (zero_extend:DI (subreg:SI (reg/v:DI 157) 4)))) -1 (nil)
> > (nil))
> >
> >regclass.i.13.bypass:
> >(insn 599 598 600 21 0000000000000000 (set (reg:DI 263)
> > (mult:DI (zero_extend:DI (subreg:SI (const_int -44 [0xffffffffffffffd
> >4]) 4))
> > (zero_extend:DI (subreg:SI (reg/v:DI 157) 4)))) -1 (nil)
> > (nil))
> >
> >regclass.i.19.life:
> >(insn 599 598 600 18 0000000000000000 (set (reg:DI 263)
> > (mult:DI (zero_extend:DI (subreg:SI (const_int -44 [0xffffffffffffffd
> >4]) 4))
> > (zero_extend:DI (subreg:SI (reg/v:DI 157) 4)))) -1 (nil)
> > (expr_list:REG_DEAD (reg/v:DI 157)
> > (nil)))
> >
> >The ICE occurs because combine tries to simplify it and it can't because
> >of the constant substitution in the regclass.i.13.bypass pass. It would
> >seem to me that the subreg should be simplified when the substitution for
> >DI 262 is made. After that, the mode information is lost.
> Agreed.
When replacement is made by validate_replace_reg, this is done
automatically. I think bypass pass should use it consistently...
Honza
>
> jeff
More information about the Gcc-patches
mailing list