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: law at redhat dot com
- To: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- Cc: roger at www dot eyesopen dot com, gcc-patches at gcc dot gnu dot org
- Date: Fri, 17 Jan 2003 10:26:51 -0700
- Subject: Re: [PATCH] Fix RTL sharing problem in CSE
- Reply-to: law at redhat dot com
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.
jeff