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
  [EMAIL PROTECTED]

Reply via email to