On Tue, 17 Jan 2012, David Edelsohn wrote:

> On Tue, Jan 17, 2012 at 5:16 AM, Jakub Jelinek <ja...@redhat.com> wrote:
> > Hi!
> >
> > crtbegin.o is miscompiled on powerpc64-linux with -mminimal-toc (and likely
> > many other sources).  The problem is that when flag_pic is 0, the
> > shrink-wrapping code doesn't consider register r30 being set up by the
> > prologue, so instructions that use r30 (TOC_REGISTER) can be considered
> > usable even without an earlier prologue that computes it.
> > Unfortunately the generic code adds just a couple of selected registers
> > to set_up_by_prologue regset, and I don't see without a target hook a way
> > to add further registers to the hard regset.
> >
> > So, this patch implements such a hook and uses it on rs6000 to indicate that
> > r30 is computed by the prologue if the prologue does that.
> >
> > Bootstrapped/regtested on powerpc64-linux (with -mminimal-toc in
> > CFLAGS/CXXFLAGS/etc., which previously failed to bootstrap) and on
> > x86_64-linux and i686-linux.  Ok for trunk?
> >
> > 2012-01-17  Jakub Jelinek  <ja...@redhat.com>
> >
> >        PR bootstrap/51872
> >        * hard-reg-set.h (struct hard_reg_set_container): New type.
> >        * target.h (struct hard_reg_set_container): Forward declare.
> >        * target.def (set_up_by_prologue): New target hook.
> >        * doc/tm.texi (TARGET_SET_UP_BY_PROLOGUE): Document it.
> >        * function.c (thread_prologue_and_epilogue_insns): Change
> >        set_up_by_prologue HARD_REG_SET into struct hard_reg_set_container.
> >        Call targetm.set_up_by_prologue on it.
> >        * config/rs6000/rs6000.c (rs6000_set_up_by_prologue): New function.
> >        (TARGET_SET_UP_BY_PROLOGUE): Redefine to it.
> 
> The rs6000 bits are okay with me.

The middle-end bits are ok as well.

Thanks,
Richard.

Reply via email to