diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2015-02-23 23:35:31 +0000 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gcc.gnu.org> | 2015-02-23 23:35:31 +0000 |
commit | 637ece3f9ee580884f8d84ed994fdb473c994ec7 (patch) | |
tree | 2e92c72cacbb04347e18f4c1d7263fb718ba9fea /gcc | |
parent | 708c7f7fb884199b55bede6d00bd7ed6021e6dbf (diff) | |
download | gcc-637ece3f9ee580884f8d84ed994fdb473c994ec7.zip gcc-637ece3f9ee580884f8d84ed994fdb473c994ec7.tar.gz gcc-637ece3f9ee580884f8d84ed994fdb473c994ec7.tar.bz2 |
xtensa: align data naturally when optimizing for size
gcc for xtensa always aligns data at least to a word boundary, even when
it has smaller natural alignment. This results in unexpectedly high data
section sizes and unreasonable amount of wasted space when linking
objects compiled with -fdata-sections flag.
Align data naturally when optimization for size is enabled.
2015-02-22 Max Filippov <jcmvbkbc@gmail.com>
gcc/
* config/xtensa/xtensa.h (CONSTANT_ALIGNMENT, DATA_ALIGNMENT):
use natural alignment when optimizing for size.
From-SVN: r220923
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.h | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 843716d..02e60b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-02-22 Max Filippov <jcmvbkbc@gmail.com> + + * config/xtensa/xtensa.h (CONSTANT_ALIGNMENT, DATA_ALIGNMENT): + use natural alignment when optimizing for size. + 2015-02-23 Kaz Kojima <kkojima@gcc.gnu.org> PR target/65153 diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index 0de072b..74ca240 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -174,7 +174,8 @@ extern unsigned xtensa_current_frame_size; constants to be word aligned so that 'strcpy' calls that copy constants can be done inline. */ #define CONSTANT_ALIGNMENT(EXP, ALIGN) \ - ((TREE_CODE (EXP) == STRING_CST || TREE_CODE (EXP) == CONSTRUCTOR) \ + (!optimize_size && \ + (TREE_CODE (EXP) == STRING_CST || TREE_CODE (EXP) == CONSTRUCTOR) \ && (ALIGN) < BITS_PER_WORD \ ? BITS_PER_WORD \ : (ALIGN)) @@ -186,7 +187,7 @@ extern unsigned xtensa_current_frame_size; that copy constants to character arrays can be done inline. */ #undef DATA_ALIGNMENT #define DATA_ALIGNMENT(TYPE, ALIGN) \ - ((((ALIGN) < BITS_PER_WORD) \ + (!optimize_size && (((ALIGN) < BITS_PER_WORD) \ && (TREE_CODE (TYPE) == ARRAY_TYPE \ || TREE_CODE (TYPE) == UNION_TYPE \ || TREE_CODE (TYPE) == RECORD_TYPE)) ? BITS_PER_WORD : (ALIGN)) |