From 12651dc6dcaafb3c8a5cdfc10b7bc25e6f62cb33 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Tue, 10 Dec 2019 18:46:33 +0100 Subject: [PATCH] varasm.c (default_function_section): Fix confused tests for tp_first_run reordering. * varasm.c (default_function_section): Fix confused tests for tp_first_run reordering. From-SVN: r279176 --- gcc/ChangeLog | 5 +++++ gcc/varasm.c | 15 ++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f848de6b65c..627d1bc0d71 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-12-10 Jan Hubicka + + * varasm.c (default_function_section): Fix confused tests for + tp_first_run reordering. + 2019-12-10 Richard Sandiford * config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Don't diff --git a/gcc/varasm.c b/gcc/varasm.c index d9d02b3b263..f6ed0eadf1f 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -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; -- 2.30.2