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. Thanks, David