Commit 98503487 by Ramana Radhakrishnan Committed by Ramana Radhakrishnan

[AArch64] Do not increase data alignment at -Os and with -fconserve-stack.

We unnecessarily align data to 8 byte alignments even when -Os is
specified. This brings the logic in the AArch64 backend more in line
with the ARM backend and helps gain some image size in a few
places. Caught by an internal report on the size of rodata sections
being high with aarch64 gcc.

* config/aarch64/aarch64.h (AARCH64_EXPAND_ALIGNMENT): New.
  (DATA_ALIGNMENT): Update to use AARCH64_EXPAND_ALIGNMENT.
  (LOCAL_ALIGNMENT): Update to use AARCH64_EXPAND_ALIGNMENT.

Bootstrapped and regression tested on aarch64-none-linux-gnu with no
regressions.

From-SVN: r249764
parent cffc4a68
2017-06-28 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
* config/aarch64/aarch64.h (AARCH64_EXPAND_ALIGNMENT): New.
(DATA_ALIGNMENT): Update to use AARCH64_EXPAND_ALIGNMENT.
(LOCAL_ALIGNMENT): Update to use AARCH64_EXPAND_ALIGNMENT.
2017-06-28 Sebastian Peryt <sebastian.peryt@intel.com> 2017-06-28 Sebastian Peryt <sebastian.peryt@intel.com>
* config/i386/avx512vlintrin.h (_mm256_permutexvar_epi64) * config/i386/avx512vlintrin.h (_mm256_permutexvar_epi64)
......
...@@ -98,14 +98,24 @@ ...@@ -98,14 +98,24 @@
&& (ALIGN) < BITS_PER_WORD) \ && (ALIGN) < BITS_PER_WORD) \
? BITS_PER_WORD : ALIGN) ? BITS_PER_WORD : ALIGN)
#define DATA_ALIGNMENT(EXP, ALIGN) \ /* Align definitions of arrays, unions and structures so that
((((ALIGN) < BITS_PER_WORD) \ initializations and copies can be made more efficient. This is not
&& (TREE_CODE (EXP) == ARRAY_TYPE \ ABI-changing, so it only affects places where we can see the
|| TREE_CODE (EXP) == UNION_TYPE \ definition. Increasing the alignment tends to introduce padding,
|| TREE_CODE (EXP) == RECORD_TYPE)) \ so don't do this when optimizing for size/conserving stack space. */
? BITS_PER_WORD : (ALIGN)) #define AARCH64_EXPAND_ALIGNMENT(COND, EXP, ALIGN) \
(((COND) && ((ALIGN) < BITS_PER_WORD) \
#define LOCAL_ALIGNMENT(EXP, ALIGN) DATA_ALIGNMENT(EXP, ALIGN) && (TREE_CODE (EXP) == ARRAY_TYPE \
|| TREE_CODE (EXP) == UNION_TYPE \
|| TREE_CODE (EXP) == RECORD_TYPE)) ? BITS_PER_WORD : (ALIGN))
/* Align global data. */
#define DATA_ALIGNMENT(EXP, ALIGN) \
AARCH64_EXPAND_ALIGNMENT (!optimize_size, EXP, ALIGN)
/* Similarly, make sure that objects on the stack are sensibly aligned. */
#define LOCAL_ALIGNMENT(EXP, ALIGN) \
AARCH64_EXPAND_ALIGNMENT (!flag_conserve_stack, EXP, ALIGN)
#define STRUCTURE_SIZE_BOUNDARY 8 #define STRUCTURE_SIZE_BOUNDARY 8
......
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