https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85669

--- Comment #55 from Douglas Mencken <dougmencken at gmail dot com> ---
(In reply to Wilco from comment #52)
> (In reply to Segher Boessenkool from comment #50)
> > The generic code rounded up the allocation size twice, and that isn't 
> > needed.
> > 
> > The problem has been solved for other targets before; a patch for Darwin is
> > at https://gcc.gnu.org/ml/gcc-testresults/2017-01/msg02971.html , patch 
> > 0001.
> 
> Yes that looks correct indeed. No idea why it wasn't committed... It looks
> like the patch in comment 16 didn't work because rs6000_stack_info does its
> own calculation of this, so aligning when alloca isn't used will get
> incorrect frame offsets:
> 
>   info->fixed_size   = RS6000_SAVE_AREA;
>   info->vars_size    = RS6000_ALIGN (get_frame_size (), 8);
>   if (cfun->calls_alloca)
>     info->parm_size  =
>       RS6000_ALIGN (crtl->outgoing_args_size + info->fixed_size,
>                     STACK_BOUNDARY / BITS_PER_UNIT) - info->fixed_size;
>   else
>     info->parm_size  = RS6000_ALIGN (crtl->outgoing_args_size,
>                                      TARGET_ALTIVEC ? 16 : 8);

Is this logic wrong? So what is this supposed to be?

Reply via email to