On Wed, 4 Jun 2014, Sandra Loosemore wrote:

> On 06/04/2014 06:20 AM, Richard Biener wrote:
> > On Tue, 3 Jun 2014, Richard Sandiford wrote:
> > 
> > > Richi suggested just changing the alignment at output time.  I assume
> > > that would be a case of replacing the DECL_ALIGN in:
> > > 
> > >    /* Tell assembler to move to target machine's alignment for functions.
> > > */
> > >    align = floor_log2 (DECL_ALIGN (decl) / BITS_PER_UNIT);
> > >    if (align > 0)
> > >      {
> > >        ASM_OUTPUT_ALIGN (asm_out_file, align);
> > >      }
> > > 
> > > with a hook.  (Is that right?)
> > 
> > Yeah, kind of.  Of course if DECL_ALIGN on function-decls is "unused"
> > then we may as well initialize it to 1 in tree.c and at an appropriate
> > stage adjust it to the result of a target hook invocation.
> > 
> > Appropriate stage would be the above place (which means DECL_ALIGN
> > is essentially "unused" for FUNCTION_DECLs).
> > 
> > So ... can you massage the DECL_ALIGN macro to ICE on FUNCTION_DECLs
> > and see where we access it?  (generic code will possibly trip on it,
> > but the question is is there any user that cares?)
> 
> Well, offhand, I know that one of the places is in handle_aligned_attribute,
> in c-common/c-common.c, where we handle user-specified alignment attributes.
> Here we are potentially both reading and writing the DECL_ALIGN field of a
> FUNCTION_DECL.

Ok, we definitely need to preserve that (documented) behavior.  I suppose
it also sets DECL_USER_ALIGN.  -falign-functions is probably another
setter of DECL_ALIGN here.

If we add a target hook that may adjust function alignment then it
has to honor any user set alignment, then -falign-functions and
then it may only increase alignment over the default FUNCTION_BOUNDARY.

The point to adjust alignment with the hook may still be output time,
but as we figured it can't simply ignore DECL_ALIGN.

Richard.

Reply via email to