From: jakub Date: Fri, 20 Feb 2015 16:44:37 +0000 (+0000) Subject: PR target/63892 X-Git-Tag: upstream/5.3.0~1711 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c80f87ec98c2c7a167610e01ba88149310ef680d;p=platform%2Fupstream%2Flinaro-gcc.git PR target/63892 * ipa-icf.c (sem_function::merge): If DECL_COMDAT_GROUP (alias->decl), don't try to create_thunk if stdarg_p. If !sem_item::target_supports_symbol_aliases_p (), similarly, and try to redirect_callers if possible. (sem_item_optimizer::execute): Call unregister_hooks here... (ipa_icf_driver): ... instead of here. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@220875 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 32cc757..cae6617 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2015-02-20 Jakub Jelinek + Martin Liska + + PR target/63892 + * ipa-icf.c (sem_function::merge): If DECL_COMDAT_GROUP (alias->decl), + don't try to create_thunk if stdarg_p. If + !sem_item::target_supports_symbol_aliases_p (), similarly, and try to + redirect_callers if possible. + (sem_item_optimizer::execute): Call unregister_hooks here... + (ipa_icf_driver): ... instead of here. + 2015-02-20 Kyrylo Tkachov * config/aarch64/aarch64.md (*aarch64_lshr_sisd_or_int_3): diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index 494fdcf..e1af8bf 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -651,7 +651,9 @@ sem_function::merge (sem_item *alias_item) section (or we risk link failures when section is discarded). */ if ((original_address_matters && alias_address_matters) - || original_discardable) + || original_discardable + || DECL_COMDAT_GROUP (alias->decl) + || !sem_item::target_supports_symbol_aliases_p ()) { create_thunk = !stdarg_p (TREE_TYPE (alias->decl)); create_alias = false; @@ -659,6 +661,7 @@ sem_function::merge (sem_item *alias_item) the extra thunk wrapper for direct calls. */ redirect_callers = (!original_discardable + && !DECL_COMDAT_GROUP (alias->decl) && alias->get_availability () > AVAIL_INTERPOSABLE && original->get_availability () > AVAIL_INTERPOSABLE && !alias->instrumented_version); @@ -670,13 +673,6 @@ sem_function::merge (sem_item *alias_item) redirect_callers = false; } - if (create_alias && (DECL_COMDAT_GROUP (alias->decl) - || !sem_item::target_supports_symbol_aliases_p ())) - { - create_alias = false; - create_thunk = true; - } - /* We want thunk to always jump to the local function body unless the body is comdat and may be optimized out. */ if ((create_thunk || redirect_callers) @@ -1714,6 +1710,8 @@ void sem_item_optimizer::execute (void) { filter_removed_items (); + unregister_hooks (); + build_hash_based_classes (); if (dump_file) @@ -2482,7 +2480,6 @@ ipa_icf_driver (void) gcc_assert (optimizer); optimizer->execute (); - optimizer->unregister_hooks (); delete optimizer; optimizer = NULL;