This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Reload Problem in delete_output_reload
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: Erwin dot Unruh at fujitsu-siemens dot com (Unruh, Erwin)
- Cc: gcc at gcc dot gnu dot org (GCC mailing list)
- Date: Tue, 5 Dec 2006 12:55:09 +0100 (CET)
- Subject: Re: Reload Problem in delete_output_reload
Erwin Unruh wrote:
> Sorry, I mislead you. Somehow I did confuse (mem/c:DI (reg:SI 2 2) [0 S8
> A8])
> with (reg:DI 2). Register 2 is used correctly.
> I do not think any reload is inherited in this case.
Ah, right. That did confuse me ;-)
> I did find something which might be the real problem. Within
> delete_output_reload
> there are two calls to count_occurrences. The second one will be called
> with
> parameters
>
> (parallel [
> (set (mem/c:DI (plus:SI (plus:SI (reg/f:SI 15 15)
> (const_int 4080 [0xff0]))
> (const_int 3136 [0xc40])) [0 S8 A8])
> (plus:DI (mem/c:DI (plus:SI (plus:SI (reg/f:SI 15 15)
> (const_int 4080 [0xff0]))
> (const_int 3144 [0xc48])) [0 S8 A8])
> (mem/c:DI (plus:SI (plus:SI (reg/f:SI 15 15)
> (const_int 4080 [0xff0]))
> (const_int 3136 [0xc40])) [0 S8 A8])))
> (clobber (reg:CC 33 %cc))
> ])
>
> (mem/c:DI (plus:SI (reg/f:SI 15 15)
> (const_int 7216 [0x1c30])) [0 S8 A8])
>
> The offset from register 15 is represented in two different ways. In the
>
> first parameter it is split in two constants, in the second it is kept=20
> as a single constant.
>
> Due to this difference, no occurence is found. So the second operand=20
> of the (plus:DI ...) is not counted.
I see. This does look exactly like the problem Alexandre Oliva fixed for
PR target/28146:
http://gcc.gnu.org/ml/gcc-patches/2006-08/msg00592.html
This patch is in mainline, but hasn't been applied to the 4.1 branch.
Could you check whether it fixes your problem?
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com