]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR bootstrap/59541 (Revision 206070 breaks bootstrap on Darwin: config/darwin...
authorIain Sandoe <iain@codesourcery.com>
Sun, 5 Jan 2014 21:47:43 +0000 (21:47 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Sun, 5 Jan 2014 21:47:43 +0000 (21:47 +0000)
gcc:

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

From-SVN: r206348

gcc/ChangeLog
gcc/config/darwin.c

index 600c24bed7333d13fb21b3ac5e63a6f188d8d786..1969671af12a614c498e8bb6ca1de52ce8946d57 100644 (file)
@@ -1,3 +1,9 @@
+2014-01-05  Iain Sandoe  <iain@codesourcery.com>
+
+       PR bootstrap/59541
+       * config/darwin.c (darwin_function_section): Adjust return values to
+       correspond to optimisation changes made in r206070.
+
 2014-01-05  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.c (ix86_data_alignment): Calculate max_align
index 63a385c49b880ec2b8b15c00c683ba2645bafab6..adf370d4d072febcf085da6138cc67889159f807 100644 (file)
@@ -3611,57 +3611,36 @@ darwin_function_section (tree decl, enum node_frequency freq,
   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;
-
-  /* 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;
-  }
+  /* 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];
+
+  /* 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];
-
-  /* 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]
+  if (exit)
+    return (weak) ? darwin_sections[text_exit_coal_section]
+                 : darwin_sections[text_exit_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