This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: POWERPC64_TOC_POINTER_ALIGNMENT


On Wed, Nov 18, 2015 at 10:35:36AM -0500, David Edelsohn wrote:
> On Tue, Nov 17, 2015 at 9:32 PM, Alan Modra <amodra@gmail.com> wrote:
> > On Tue, Nov 17, 2015 at 07:53:18PM -0500, Michael Meissner wrote:
> >> Here is the temporary patch I'm using to get past rs6000.c.  But I suspect the
> >> TOC alignment should never be 256.
> >
> > Yes, it should be.  Recent GNU ld aligns .TOC. to a 256 byte boundary.
> > I have this patch in my tree.
> >
> > diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
> > index abc8eaa..e3ec042 100644
> > --- a/gcc/config/rs6000/rs6000.c
> > +++ b/gcc/config/rs6000/rs6000.c
> > @@ -8059,12 +8059,17 @@ rs6000_cannot_force_const_mem (machine_mode mode ATTRIBUTE_UNUSED, rtx x)
> >  static bool
> >  use_toc_relative_ref (rtx sym, machine_mode mode)
> >  {
> > +  /* Silence complaint that the POWERPC64_TOC_POINTER_ALIGNMENT test
> > +     is always true.  */
> > +#pragma GCC diagnostic push
> > +#pragma GCC diagnostic ignored "-Wtype-limits"
> >    return ((constant_pool_expr_p (sym)
> >            && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (sym),
> >                                                get_pool_mode (sym)))
> >           || (TARGET_CMODEL == CMODEL_MEDIUM
> >               && SYMBOL_REF_LOCAL_P (sym)
> >               && GET_MODE_SIZE (mode) <= POWERPC64_TOC_POINTER_ALIGNMENT));
> > +#pragma GCC diagnostic pop
> >  }
> >
> >  /* Our implementation of LEGITIMIZE_RELOAD_ADDRESS.  Returns a value to
> 
> I have applied Alan's work-around for now until there is a more robust solution.
> 
> Thanks, David
> 

Note, the patch that was applied breaks being compiled with older compilers,
such as the GCC 4.4.7 compiler that is installed on my x86_64 laptop, and which
I build powerpc cross compilers from.  The older GCC does not allow these
pragmas to be used in the middle of a function.

I think the following patch should be applied to move the #pragmas outside of
the function.

Note, you will need the patch that is attached to PR 68393 in order to
bootstrap the compiler.

2015-11-18  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* config/rs6000/rs6000.c (use_toc_relative_ref): Move #pragmas
	outside of the function to accomidate older GCC's.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797

Attachment: gcc-power9.patch048b
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]