diff mbox series

Disable section anchors for VAR_DECLs if -fdata-sections

Message ID CAGWvnynKqvKU4iEzBm1x5EtYWZ2knBwP79rzvc+59H6ea67rRg@mail.gmail.com
State New
Headers show
Series Disable section anchors for VAR_DECLs if -fdata-sections | expand

Commit Message

David Edelsohn April 29, 2021, 7:33 p.m. UTC
-fdata-sections places data symbols into their own, unique, named sections.
    -fsection-anchors create an anchor to access neighboring symbols
    within a section.

    When both are enabled, a separate section anchor is created for each
    symbol, which provides no benefit.

    This patch updates the common gating function use_blocks_for_decl_p() to
    return false if -fdata-sections is enabled.  Constants still can
be placed into
    object blocks because constants use a separate, different gating function.

Bootstrapped on powerpc-ibm-aix7.2.3.0

Okay?

Thanks, David

    gcc/ChangeLog:

            * varasm.c (use_blocks_for_decl_p): Don't use section anchors
            for VAR_DECLs if -fdata-sections enabled.

Comments

Richard Sandiford April 30, 2021, 9:20 a.m. UTC | #1
David Edelsohn via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
>     -fdata-sections places data symbols into their own, unique, named sections.
>     -fsection-anchors create an anchor to access neighboring symbols
>     within a section.
>
>     When both are enabled, a separate section anchor is created for each
>     symbol, which provides no benefit.
>
>     This patch updates the common gating function use_blocks_for_decl_p() to
>     return false if -fdata-sections is enabled.  Constants still can
> be placed into
>     object blocks because constants use a separate, different gating function.
>
> Bootstrapped on powerpc-ibm-aix7.2.3.0
>
> Okay?

Yes, thanks.

Richard

> Thanks, David
>
>     gcc/ChangeLog:
>
>             * varasm.c (use_blocks_for_decl_p): Don't use section anchors
>             for VAR_DECLs if -fdata-sections enabled.
>
> diff --git a/gcc/varasm.c b/gcc/varasm.c
> index 3ecf9e039bb..ac256ef65e5 100644
> --- a/gcc/varasm.c
> +++ b/gcc/varasm.c
> @@ -1340,6 +1340,12 @@ use_blocks_for_decl_p (tree decl)
>  {
>    struct symtab_node *snode;
>
> +  /* Don't create object blocks if each DECL is placed into a separate
> +     section because that will uselessly create a section anchor for
> +     each DECL.  */
> +  if (flag_data_sections)
> +    return false;
> +
>    /* Only data DECLs can be placed into object blocks.  */
>    if (!VAR_P (decl) && TREE_CODE (decl) != CONST_DECL)
>      return false;
diff mbox series

Patch

diff --git a/gcc/varasm.c b/gcc/varasm.c
index 3ecf9e039bb..ac256ef65e5 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1340,6 +1340,12 @@  use_blocks_for_decl_p (tree decl)
 {
   struct symtab_node *snode;

+  /* Don't create object blocks if each DECL is placed into a separate
+     section because that will uselessly create a section anchor for
+     each DECL.  */
+  if (flag_data_sections)
+    return false;
+
   /* Only data DECLs can be placed into object blocks.  */
   if (!VAR_P (decl) && TREE_CODE (decl) != CONST_DECL)
     return false;