aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2015-02-23 23:35:31 +0000
committerMax Filippov <jcmvbkbc@gcc.gnu.org>2015-02-23 23:35:31 +0000
commit637ece3f9ee580884f8d84ed994fdb473c994ec7 (patch)
tree2e92c72cacbb04347e18f4c1d7263fb718ba9fea /gcc
parent708c7f7fb884199b55bede6d00bd7ed6021e6dbf (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/xtensa/xtensa.h5
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))