This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch, committed, Darwin] fix pr bootstrap/59541


I've applied the attached patch as r206348 to fix this bootstrap problem after discussion with Honza last week on irc.
Thanks to Dominique for helping with testing across the platform variants.

Happy New Year!
Iain

gcc:

	PR bootstrap/59541
	* config/darwin.c (darwin_function_section): Adjust return values to
	correspond to optimisation changes made in r206070.


Index: gcc/config/darwin.c
===================================================================
--- gcc/config/darwin.c	(revision 206346)
+++ gcc/config/darwin.c	(working copy)
@@ -3611,57 +3611,36 @@
   if (decl && DECL_SECTION_NAME (decl) != NULL_TREE)
     return get_named_section (decl, NULL, 0);
 
-  /* Default when there is no function re-ordering.  */
-  if (!flag_reorder_functions)
-    return (weak)
-	    ? darwin_sections[text_coal_section]
-	    : text_section;
+  /* We always put unlikely executed stuff in the cold section.  */
+  if (freq == NODE_FREQUENCY_UNLIKELY_EXECUTED)
+    return (weak) ? darwin_sections[text_cold_coal_section]
+		  : darwin_sections[text_cold_section];
 
-  /* Startup code should go to startup subsection unless it is
-     unlikely executed (this happens especially with function splitting
-     where we can split away unnecessary parts of static constructors).  */
-  if (startup && freq != NODE_FREQUENCY_UNLIKELY_EXECUTED)
-  {
-    /* If we do have a profile or(and) LTO phase is executed, we do not need
-       these ELF section.  */
-    if (!in_lto_p || !flag_profile_values)
-      return (weak)
-	      ? darwin_sections[text_startup_coal_section]
-	      : darwin_sections[text_startup_section];
-    else
-      return text_section;
-  }
+  /* If we have LTO *and* feedback information, then let LTO handle
+     the function ordering, it makes a better job (for normal, hot,
+     startup and exit - hence the bailout for cold above).  */
+  if (in_lto_p && flag_profile_values)
+    goto default_function_sections;
 
+  /* Non-cold startup code should go to startup subsection.  */
+  if (startup)
+    return (weak) ? darwin_sections[text_startup_coal_section]
+		  : darwin_sections[text_startup_section];
+
   /* Similarly for exit.  */
-  if (exit && freq != NODE_FREQUENCY_UNLIKELY_EXECUTED)
-    return (weak)
-	    ? darwin_sections[text_exit_coal_section]
-	    : darwin_sections[text_exit_section];
+  if (exit)
+    return (weak) ? darwin_sections[text_exit_coal_section]
+		  : darwin_sections[text_exit_section];
 
-  /* Group cold functions together, similarly for hot code.  */
-  switch (freq)
-    {
-      case NODE_FREQUENCY_UNLIKELY_EXECUTED:
-	return (weak)
-		? darwin_sections[text_cold_coal_section]
-		: darwin_sections[text_cold_section];
-	break;
-      case NODE_FREQUENCY_HOT:
-      {
-        /* If we do have a profile or(and) LTO phase is executed, we do not need
-           these ELF section.  */
-        if (!in_lto_p || !flag_profile_values)
-          return (weak)
-                  ? darwin_sections[text_hot_coal_section]
-                  : darwin_sections[text_hot_section];
-        break;
-      }
-      default:
-	return (weak)
-		? darwin_sections[text_coal_section]
+  /* Place hot code.  */
+  if (freq == NODE_FREQUENCY_HOT)
+    return (weak) ? darwin_sections[text_hot_coal_section]
+		  : darwin_sections[text_hot_section];
+
+  /* Otherwise, default to the 'normal' non-reordered sections.  */
+default_function_sections:
+  return (weak) ? darwin_sections[text_coal_section]
 		: text_section;
-	break;
-    }
 }
 
 /* When a function is partitioned between sections, we need to insert a label


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]