This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Bad code generation on HPPA platform
- From: Peter Bergner <bergner at vnet dot ibm dot com>
- To: Steve Ellcey <sje at cup dot hp dot com>
- Cc: law at redhat dot com, andrew_pinski at playstation dot sony dot com, dave at hiauly1 dot hia dot nrc dot ca, gcc at gcc dot gnu dot org
- Date: Thu, 08 May 2008 13:57:27 -0500
- Subject: Re: Bad code generation on HPPA platform
- References: <200805081838.LAA18678@hpsje.cup.hp.com>
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