https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85669
--- Comment #52 from Wilco <wilco at gcc dot gnu.org> --- (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);