On Mon, Mar 6, 2017 at 6:51 PM, Segher Boessenkool <seg...@kernel.crashing.org> wrote: > As Shmuel reported in <https://gcc.gnu.org/ml/gcc-help/2017-03/msg00009.html>, > on x86-64 small structures in automatic storage are aligned to 16 bytes. > This seems to be because of a mix-up between bits and bytes in the i386 > target code. > > Is this okay for trunk? > > > Segher > > > 2017-03-06 Segher Boessenkool <seg...@kernel.crashing.org> > > * gcc/config/i386/i386.c (ix86_local_alignment): Align most aggregates > of 16 bytes and more to 16 bytes, not those of 16 bits and more.
OK for trunk and backports. Thanks, Uros. > --- > gcc/config/i386/i386.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index 754c016..f03e71a 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -30467,7 +30467,7 @@ ix86_local_alignment (tree exp, machine_mode mode, > != TYPE_MAIN_VARIANT (va_list_type_node))) > && TYPE_SIZE (type) > && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST > - && wi::geu_p (TYPE_SIZE (type), 16) > + && wi::geu_p (TYPE_SIZE (type), 128) > && align < 128) > return 128; > } > -- > 1.9.3 >