middle-end: Disable section anchors for VAR_DECLs if -fdata-sections
authorDavid Edelsohn <dje.gcc@gmail.com>
Thu, 29 Apr 2021 18:44:01 +0000 (14:44 -0400)
committerDavid Edelsohn <dje.gcc@gmail.com>
Fri, 30 Apr 2021 16:48:11 +0000 (12:48 -0400)
-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.

gcc/ChangeLog:

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

gcc/varasm.c

index 3ecf9e0..ac256ef 100644 (file)
@@ -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;