From: Jan Hubicka Date: Tue, 10 Dec 2019 17:46:33 +0000 (+0100) Subject: varasm.c (default_function_section): Fix confused tests for tp_first_run reordering. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=12651dc6dcaafb3c8a5cdfc10b7bc25e6f62cb33;p=gcc.git 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 --- 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;