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.