This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR79256
- From: Richard Biener <rguenther at suse dot de>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: Uros Bizjak <ubizjak at gmail dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 30 Jan 2017 11:56:25 +0100 (CET)
- Subject: Re: [PATCH] Fix PR79256
- Authentication-results: sourceware.org; auth=none
- References: <CAFULd4YHLfwZ1TGE2gdRdEEEiNXRdGuROJB6wHvNLWa0eH=K8A@mail.gmail.com> <alpine.LSU.2.20.1701301143580.12993@r111.fhfr.qr> <20170130105210.GE13290@tucnak>
On Mon, 30 Jan 2017, Jakub Jelinek wrote:
> On Mon, Jan 30, 2017 at 11:47:51AM +0100, Richard Biener wrote:
> > On Mon, 30 Jan 2017, Uros Bizjak wrote:
> >
> > > > 2017-01-30 Richard Biener <rguenther@suse.de>
> > > >
> > > > PR target/79277
> > > > * config/i386/i386-modes.def: Align DFmode properly.
> > >
> > > Index: gcc/config/i386/i386-modes.def
> > > ===================================================================
> > > --- gcc/config/i386/i386-modes.def (revision 245021)
> > > +++ gcc/config/i386/i386-modes.def (working copy)
> > > @@ -33,6 +33,7 @@ ADJUST_FLOAT_FORMAT (XF, (TARGET_128BIT_
> > > : &ieee_extended_intel_96_format));
> > > ADJUST_BYTESIZE (XF, TARGET_128BIT_LONG_DOUBLE ? 16 : 12);
> > > ADJUST_ALIGNMENT (XF, TARGET_128BIT_LONG_DOUBLE ? 16 : 4);
> > > +ADJUST_ALIGNMENT (DF, !TARGET_64BIT ? 4 : 8);
> > >
> > > Please avoid negative logic, just swap arms of the conditional around.
> >
> > It was just meant as an example fix. I don't think this is appropriate
> > at this stage nor is it complete. A full fix would basically make
> > x86_field_alignment unnecessary which limits most modes alignment
> > to 32bit (but not vector or 128bit float modes). And the conditional
> > needs updating to honor TARGET_ALIGN_DOUBLE.
>
> Yeah, at least for GCC 7 that change (quite major ABI change) is too
> dangerous IMHO.
Yes, __alignof__ (double) would change. But I think for correctness
at least __alignof__ (*(double *)p) needs to change. So another
way to fix this would be to change the FE to use a differently
aligned double type in contexts where the default one is wrong
(but we do have too many == double_type_node checks everywhere...).
Btw, we should eventually change ADJUST_FIELD_ALIGN to take the
type of the field instead of the FIELD_DECL (as said, only frv.c
looks at the field, all others just look at its type).
Richard.