This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix RTL sharing problem in CSE
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- To: dave at hiauly1 dot hia dot nrc dot ca (John David Anglin)
- Cc: roger at www dot eyesopen dot com, gcc-patches at gcc dot gnu dot org
- Date: Fri, 17 Jan 2003 12:15:24 -0500 (EST)
- Subject: Re: [PATCH] Fix RTL sharing problem in CSE
> > 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 [0xffffffffffffffd4]) 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 [0xffffffffffffffd4]) 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.
Dave
--
J. David Anglin dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)