This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Patch x86/darwin] fix PR51784 'PIC register not correctly preserved...'
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: Iain Sandoe <iain at codesourcery dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Mike Stump <mikestump at comcast dot net>, Richard Henderson <rth at redhat dot com>
- Date: Thu, 18 Jul 2013 13:39:54 +0200
- Subject: Re: [Patch x86/darwin] fix PR51784 'PIC register not correctly preserved...'
- References: <CAFULd4Z+dQJfKOq-qx2aJt2-6cPjyZ6rmNU0yd47GLyjHbB3SQ at mail dot gmail dot com> <0809E02A-4977-46C5-A97F-83DBDC05B460 at codesourcery dot com>
On Thu, Jul 18, 2013 at 12:12 PM, Iain Sandoe <iain@codesourcery.com> wrote:
>> This should be implemented as an expander. You also won't need
>> UNSPEC_NLGR that way.
>
> Now I reload the state from this PR, I recall why this did not work.
>
> in the case:
>
> foo ()
> {
>
> do stuff that doesn't use the pic reg
>
> call nested function
>
> nonlocal_label:
>
> do stuff that uses the pic register.
>
> }
>
> +{
> + if (crtl->uses_pic_offset_table)
> + {
> + rtx xops[3];
>
> crtl->uses_pic_offset_table is not set at the point that "nonlocal_label:" is evaluated.
>
> So, I think we have to use the define_insn_and_split, or am I still missing something?
Just a wild guess, do you also need "&& reload_completed" in the split
condition?
Uros.