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]