Commit 88e18bd5 by Jakub Jelinek Committed by Jakub Jelinek

i386.c (ix86_data_alignment): For compatibility with (incorrect) GCC 4.8 and…

i386.c (ix86_data_alignment): For compatibility with (incorrect) GCC 4.8 and earlier alignment assumptions...

	* config/i386/i386.c (ix86_data_alignment): For compatibility with
	(incorrect) GCC 4.8 and earlier alignment assumptions ensure we align
	decls to at least the GCC 4.8 used alignments.

From-SVN: r206713
parent cc2b0e50
2014-01-17 Jakub Jelinek <jakub@redhat.com> 2014-01-17 Jakub Jelinek <jakub@redhat.com>
* config/i386/i386.c (ix86_data_alignment): For compatibility with
(incorrect) GCC 4.8 and earlier alignment assumptions ensure we align
decls to at least the GCC 4.8 used alignments.
PR fortran/59440 PR fortran/59440
* tree-nested.c (convert_nonlocal_reference_stmt, * tree-nested.c (convert_nonlocal_reference_stmt,
convert_local_reference_stmt): For NAMELIST_DECLs in gimple_bind_vars convert_local_reference_stmt): For NAMELIST_DECLs in gimple_bind_vars
......
...@@ -26433,6 +26433,15 @@ ix86_constant_alignment (tree exp, int align) ...@@ -26433,6 +26433,15 @@ ix86_constant_alignment (tree exp, int align)
int int
ix86_data_alignment (tree type, int align, bool opt) ix86_data_alignment (tree type, int align, bool opt)
{ {
/* GCC 4.8 and earlier used to incorrectly assume this alignment even
for symbols from other compilation units or symbols that don't need
to bind locally. In order to preserve some ABI compatibility with
those compilers, ensure we don't decrease alignment from what we
used to assume. */
int max_align_compat
= optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
/* A data structure, equal or greater than the size of a cache line /* A data structure, equal or greater than the size of a cache line
(64 bytes in the Pentium 4 and other recent Intel processors, including (64 bytes in the Pentium 4 and other recent Intel processors, including
processors based on Intel Core microarchitecture) should be aligned processors based on Intel Core microarchitecture) should be aligned
...@@ -26447,11 +26456,17 @@ ix86_data_alignment (tree type, int align, bool opt) ...@@ -26447,11 +26456,17 @@ ix86_data_alignment (tree type, int align, bool opt)
if (opt if (opt
&& AGGREGATE_TYPE_P (type) && AGGREGATE_TYPE_P (type)
&& TYPE_SIZE (type) && TYPE_SIZE (type)
&& TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
&& (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= (unsigned) max_align {
|| TREE_INT_CST_HIGH (TYPE_SIZE (type))) if ((TREE_INT_CST_LOW (TYPE_SIZE (type)) >= (unsigned) max_align_compat
&& align < max_align) || TREE_INT_CST_HIGH (TYPE_SIZE (type)))
align = max_align; && align < max_align_compat)
align = max_align_compat;
if ((TREE_INT_CST_LOW (TYPE_SIZE (type)) >= (unsigned) max_align
|| TREE_INT_CST_HIGH (TYPE_SIZE (type)))
&& align < max_align)
align = max_align;
}
/* x86-64 ABI requires arrays greater than 16 bytes to be aligned /* x86-64 ABI requires arrays greater than 16 bytes to be aligned
to 16byte boundary. */ to 16byte boundary. */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment