From 12651dc6dcaafb3c8a5cdfc10b7bc25e6f62cb33 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Tue, 10 Dec 2019 18:46:33 +0100 Subject: 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/varasm.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'gcc/varasm.c') diff --git a/gcc/varasm.c b/gcc/varasm.c index d9d02b3..f6ed0ea 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; -- cgit v1.1