i386: Do not align small stack slots to 16 bytes
authorSegher Boessenkool <segher@kernel.crashing.org>
Tue, 7 Mar 2017 11:53:32 +0000 (12:53 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Tue, 7 Mar 2017 11:53:32 +0000 (12:53 +0100)
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

gcc/ChangeLog
gcc/config/i386/i386.c

index b09e49f..8298ebb 100644 (file)
@@ -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
index e705a3e..5fcd51f 100644 (file)
@@ -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;
     }