varasm.c (default_function_section): Fix confused tests for tp_first_run reordering.
authorJan Hubicka <hubicka@ucw.cz>
Tue, 10 Dec 2019 17:46:33 +0000 (18:46 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 10 Dec 2019 17:46:33 +0000 (17:46 +0000)
* varasm.c (default_function_section): Fix confused tests for
tp_first_run reordering.

From-SVN: r279176

gcc/ChangeLog
gcc/varasm.c

index f848de6b65c6822ab96afb5f6e0cf4902171c89a..627d1bc0d718a685b3ca26fc374bf11b3715e39c 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-10  Jan Hubicka  <hubicka@ucw.cz>
+
+       * varasm.c (default_function_section): Fix confused tests for
+       tp_first_run reordering.
+
 2019-12-10  Richard Sandiford  <richard.sandiford@arm.com>
 
        * config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Don't
index d9d02b3b2633d1178915b92d723f5a240457c392..f6ed0eadf1f1b8348838c3cda6f91237815ad7f9 100644 (file)
@@ -589,9 +589,13 @@ default_function_section (tree decl, enum node_frequency freq,
      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)
+    /* During LTO the tp_first_run profiling will naturally place all
+       initialization code first.  Using separate section is counter-productive
+       because startup only code may call functions which are no longer
+       startup only.  */
+    if (!in_lto_p
+        || !cgraph_node::get (decl)->tp_first_run
+       || !opt_for_fn (decl, flag_profile_reorder_functions))
       return get_named_text_section (decl, ".text.startup", NULL);
     else
       return NULL;
@@ -607,10 +611,7 @@ default_function_section (tree decl, enum node_frequency freq,
       case NODE_FREQUENCY_UNLIKELY_EXECUTED:
        return get_named_text_section (decl, ".text.unlikely", NULL);
       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 get_named_text_section (decl, ".text.hot", NULL);
+        return get_named_text_section (decl, ".text.hot", NULL);
        /* FALLTHRU */
       default:
        return NULL;