aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-visibility.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2017-07-07 15:28:35 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2017-07-07 13:28:35 +0000
commit29f1e2b173f1701b66410bc3624a989e98e23724 (patch)
treeb2b3db83fc40d137f7bde2edb4558d282d409c6a /gcc/ipa-visibility.c
parent8b42ccf6ddfbb350776d0c1b22bddbe9ff634b48 (diff)
downloadgcc-29f1e2b173f1701b66410bc3624a989e98e23724.zip
gcc-29f1e2b173f1701b66410bc3624a989e98e23724.tar.gz
gcc-29f1e2b173f1701b66410bc3624a989e98e23724.tar.bz2
ipa-comdats.c: Remove optimize check from gate.
* ipa-comdats.c: Remove optimize check from gate. * ipa-fnsummary.c (ipa_fn_summary_generate): do not generate summary for functions not optimized. (ipa_fn_summary_read): Skip optimize check. (ipa_fn_summary_write): Likewise. * ipa-inline-analysis.c (do_estimate_growth_1): Check that caller is optimized. * ipa-inline.c (can_inline_edge_p): Not optimized functions are uninlinable. (can_inline_edge_p): Check flag_pcc_struct_return for match. (check_callers): Give up on caller which is not optimized. (inline_small_functions): Likewise. (ipa_inline): Do not give up when not optimizing. * ipa-visbility.c (function_and_variable_visibility): Do not optimize away unoptimizes cdtors. (whole_program_function_and_variable_visibility): Do ipa_discover_readonly_nonaddressable_vars in LTO mode. * ipa.c (process_references): Do not check optimize. (symbol_table::remove_unreachable_nodes): Update optimize check. (set_writeonly_bit): Update optimize check. (pass_ipa_cdtor_merge::gate): Do not check optimize. (pass_ipa_single_use::gate): Remove. From-SVN: r250048
Diffstat (limited to 'gcc/ipa-visibility.c')
-rw-r--r--gcc/ipa-visibility.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c
index da4a22e..cfd90c6 100644
--- a/gcc/ipa-visibility.c
+++ b/gcc/ipa-visibility.c
@@ -622,9 +622,12 @@ function_and_variable_visibility (bool whole_program)
int flags = flags_from_decl_or_type (node->decl);
/* Optimize away PURE and CONST constructors and destructors. */
- if (optimize
+ if (node->analyzed
+ && (DECL_STATIC_CONSTRUCTOR (node->decl)
+ || DECL_STATIC_CONSTRUCTOR (node->decl))
&& (flags & (ECF_CONST | ECF_PURE))
- && !(flags & ECF_LOOPING_CONST_OR_PURE))
+ && !(flags & ECF_LOOPING_CONST_OR_PURE)
+ && opt_for_fn (node->decl, optimize))
{
DECL_STATIC_CONSTRUCTOR (node->decl) = 0;
DECL_STATIC_DESTRUCTOR (node->decl) = 0;
@@ -876,7 +879,7 @@ static unsigned int
whole_program_function_and_variable_visibility (void)
{
function_and_variable_visibility (flag_whole_program);
- if (optimize)
+ if (optimize || in_lto_p)
ipa_discover_readonly_nonaddressable_vars ();
return 0;
}