On Thu, 2008-05-08 at 11:38 -0700, Steve Ellcey wrote: > The psuedo for %r8 does have REG_POINTER set and the psuedo for %r19 > does not. I first see REG_POINTER set for ivtmp___1536 (the psuedo for > %r8) in flow.c.138r.loop2_invariant. This seems interesting because > Peter's patch, that fixes this problem without undoing Andrews patch, > includes a change to loop-invariant.c, though that change should be > preserving REG_POINTER's during optimization not preventing them.
Similar to hppa, power6 cares about knowing whether a pseudo is a pointer or not, because for regA + regB load/store addressing, we get much better performance if regA is the pointer and regB is the offset rather than the other way around. What I found, was that the loop invariant and GCSE code were creating some pseudos to copy expressions into, but was failing to copy the REG_POINTER/MEM_POINTER attribute along with it. The hunk from: http://gcc.gnu.org/ml/gcc-patches/2008-04/msg00693.html which replaced the rtlanal.c from the first commit was needed at -O0, because the only chance to order the operands at -O0 is at expand time. Peter