diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-02-20 17:44:37 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-02-20 17:44:37 +0100 |
commit | 8b0487010cf07edbb687ff160f396c7ff6b4634a (patch) | |
tree | 1aac1fdd174fd5584d63847f808a929765efc3ec | |
parent | fc3b4ab3432e471e6ea666702b3375f59e039b11 (diff) | |
download | gcc-8b0487010cf07edbb687ff160f396c7ff6b4634a.zip gcc-8b0487010cf07edbb687ff160f396c7ff6b4634a.tar.gz gcc-8b0487010cf07edbb687ff160f396c7ff6b4634a.tar.bz2 |
re PR target/63892 (gcc.dg/sibcall-3.c fails on darwin with -m32)
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.
Co-Authored-By: Martin Liska <mliska@suse.cz>
From-SVN: r220875
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/ipa-icf.c | 15 |
2 files changed, 17 insertions, 9 deletions
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 <jakub@redhat.com> + Martin Liska <mliska@suse.cz> + + 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 <kyrylo.tkachov@arm.com> * config/aarch64/aarch64.md (*aarch64_lshr_sisd_or_int_<mode>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; |