diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2017-03-07 12:53:32 +0100 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2017-03-07 12:53:32 +0100 |
commit | 2413298e2df06c6013fb5533b7e01d6bdb38e4c7 (patch) | |
tree | eef07105615dd38f69e663f083a633dc4165891e /gcc | |
parent | c242d6154c5969ee742f03eaf32a12b8362d7f90 (diff) | |
download | gcc-2413298e2df06c6013fb5533b7e01d6bdb38e4c7.zip gcc-2413298e2df06c6013fb5533b7e01d6bdb38e4c7.tar.gz gcc-2413298e2df06c6013fb5533b7e01d6bdb38e4c7.tar.bz2 |
i386: Do not align small stack slots to 16 bytes
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.
* 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.
From-SVN: r245949
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b09e49f..8298ebb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-03-07 Segher Boessenkool <segher@kernel.crashing.org> + + * 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. + 2017-03-07 Kyrylo Tkachov <kyrylo.tkachov@arm.com> PR c/79855 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index e705a3e..5fcd51f 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; } |