Oust HPPA PIC_OFFSET_TABLE_REGNUM_SAVED
Jeffrey A Law
law@redhat.com
Wed, 17 Jan 2001 09:09:11 -0700
In message <Pine.LNX.4.21.0101171802240.9957-100000@front.linuxcare.com.au>yo
u write:
> What I was trying to do here is test whether the pseudo has been allocated
> a register, or the case where register pressure causes it to spill to a
> stack slot.
But the code in question is executed during insn expansion time -- long long
before we know anything about whether or not a particular pseudo register
will be allocated to a hard register or stack slot.
> There seemed to be three cases:
> - register isn't used so appears as a pseudo
> - register is allocated a hard reg
> - register is allocated a stack slot
But I can't see how the final two cases could happen at that stage in
compilation. If you actually saw these under the debugger, I'd like you to
investigate them further since I don't believe they can/should happen.
[ Note that I'm not convinced the old check to avoid the restore was
correct either. ]
> > I think we should just emit the insn unconditionally unless you're aware
> > of some reason we can't shouldn't.
>
> That causes an error when no dlt save register is needed - prologue
> instruction would be deleted.
If we emit a call, then we must reload the PIC register. There's no iffs
ands or butts about it. If that's causing aborts/warnings, then we've likely
got a bug _elsewhere_. It's entirely possible that getting the use on the
return insn will fix that problem.
> > We're probably also going to need to emit a use of the %r19 and maybe %r2
> 7
> > on the return insns to ensure the pic register is restored after the
> > final call in any given function.
>
> I've a "use" in the epilogue in my tree. Hadn't posted that patch as I
> wasn't sure it's correct in the face of tail calls.
We can't perform tail calls when we're generating PIC code right now
(right now PIC == code suitable for shared library on the PA). Consider
linkage issues.
What makes this interesting is that we don't need/want the use on the trivial
return, but we do want it on the return_internal pattern. Furthermore, the
register we want to use varies depending on PA32 vs PA64 ABIs.
I've got a patch which handles that stuff in my local tree that I'm testing
right now.
jeff