From 44787aabde9f2650b4c9cbb8dfbeb2bf341ef4a7 Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Fri, 4 Apr 2014 15:12:10 +0000 Subject: [PATCH] backport: rs6000.c (IN_NAMED_SECTION): New macro. [gcc] 2014-04-04 Bill Schmidt Backport from mainline r205308 2013-11-23 David Edelsohn * config/rs6000/rs6000.c (IN_NAMED_SECTION): New macro. (rs6000_xcoff_select_section): Place decls with stricter alignment into named sections. (rs6000_xcoff_unique_section): Allow unique sections for uninitialized data with strict alignment. [gcc/testsuite] 2014-04-04 Bill Schmidt Backport from mainline 2013-04-05 David Edelsohn * gcc.target/powerpc/sd-vsx.c: Skip on AIX. * gcc.target/powerpc/sd-pwr6.c: Same. From-SVN: r209115 --- gcc/ChangeLog | 11 +++++++++++ gcc/config/rs6000/rs6000.c | 21 ++++++++++++++++++--- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.target/powerpc/sd-pwr6.c | 2 +- gcc/testsuite/gcc.target/powerpc/sd-vsx.c | 2 +- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 85b32d9efd59..4e964ff7de3c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2014-04-04 Bill Schmidt + + Backport from mainline r205308 + 2013-11-23 David Edelsohn + + * config/rs6000/rs6000.c (IN_NAMED_SECTION): New macro. + (rs6000_xcoff_select_section): Place decls with stricter alignment + into named sections. + (rs6000_xcoff_unique_section): Allow unique sections for + uninitialized data with strict alignment. + 2014-04-04 Bill Schmidt Back port from trunk diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index d8f9354c06cb..b257ab1cc9bb 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -29165,10 +29165,23 @@ rs6000_xcoff_asm_named_section (const char *name, unsigned int flags, name, suffix[smclass], flags & SECTION_ENTSIZE); } +#define IN_NAMED_SECTION(DECL) \ + ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \ + && DECL_SECTION_NAME (DECL) != NULL_TREE) + static section * rs6000_xcoff_select_section (tree decl, int reloc, - unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED) + unsigned HOST_WIDE_INT align) { + /* Place variables with alignment stricter than BIGGEST_ALIGNMENT into + named section. */ + if (align > BIGGEST_ALIGNMENT) + { + resolve_unique_section (decl, reloc, true); + if (IN_NAMED_SECTION (decl)) + return get_named_section (decl, NULL, reloc); + } + if (decl_readonly_section (decl, reloc)) { if (TREE_PUBLIC (decl)) @@ -29206,10 +29219,12 @@ rs6000_xcoff_unique_section (tree decl, int reloc ATTRIBUTE_UNUSED) { const char *name; - /* Use select_section for private and uninitialized data. */ + /* Use select_section for private data and uninitialized data with + alignment <= BIGGEST_ALIGNMENT. */ if (!TREE_PUBLIC (decl) || DECL_COMMON (decl) - || DECL_INITIAL (decl) == NULL_TREE + || (DECL_INITIAL (decl) == NULL_TREE + && DECL_ALIGN (decl) <= BIGGEST_ALIGNMENT) || DECL_INITIAL (decl) == error_mark_node || (flag_zero_initialized_in_bss && initializer_zerop (DECL_INITIAL (decl)))) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8cd3a6fd0c83..a3856675fde8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2014-04-04 Bill Schmidt + + Backport from mainline + 2013-04-05 David Edelsohn + + * gcc.target/powerpc/sd-vsx.c: Skip on AIX. + * gcc.target/powerpc/sd-pwr6.c: Same. + 2014-04-04 Bill Schmidt Back port from trunk diff --git a/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c b/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c index 947382b7f7bc..98f7615daef8 100644 --- a/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c +++ b/gcc/testsuite/gcc.target/powerpc/sd-pwr6.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { powerpc*-*-* } } } */ -/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* powerpc-ibm-aix* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_vsx_ok } */ /* { dg-options "-O2 -mcpu=power6 -mhard-dfp" } */ /* { dg-final { scan-assembler-not "lfiwzx" } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/sd-vsx.c b/gcc/testsuite/gcc.target/powerpc/sd-vsx.c index 7e41e1e84cc9..7a3c6d8777df 100644 --- a/gcc/testsuite/gcc.target/powerpc/sd-vsx.c +++ b/gcc/testsuite/gcc.target/powerpc/sd-vsx.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { powerpc*-*-* } } } */ -/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* powerpc-ibm-aix* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_vsx_ok } */ /* { dg-options "-O2 -mcpu=power7 -mhard-dfp" } */ /* { dg-final { scan-assembler-times "lfiwzx" 2 } } */ -- 2.47.2