rs6000.c (IN_NAMED_SECTION): New macro.
* 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. From-SVN: r205308
This commit is contained in:
parent
e07ded7bf9
commit
cf77a18016
2 changed files with 26 additions and 3 deletions
|
@ -1,3 +1,11 @@
|
|||
2013-11-23 David Edelsohn <dje.gcc@gmail.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2013-11-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/59154
|
||||
|
|
|
@ -28588,10 +28588,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))
|
||||
|
@ -28629,10 +28642,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))))
|
||||
|
|
Loading…
Add table
Reference in a new issue