Commit 8b048701 by Jakub Jelinek Committed by Jakub Jelinek

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
parent fc3b4ab3
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> 2015-02-20 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/aarch64/aarch64.md (*aarch64_lshr_sisd_or_int_<mode>3): * config/aarch64/aarch64.md (*aarch64_lshr_sisd_or_int_<mode>3):
......
...@@ -651,7 +651,9 @@ sem_function::merge (sem_item *alias_item) ...@@ -651,7 +651,9 @@ sem_function::merge (sem_item *alias_item)
section (or we risk link failures when section is discarded). */ section (or we risk link failures when section is discarded). */
if ((original_address_matters if ((original_address_matters
&& alias_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_thunk = !stdarg_p (TREE_TYPE (alias->decl));
create_alias = false; create_alias = false;
...@@ -659,6 +661,7 @@ sem_function::merge (sem_item *alias_item) ...@@ -659,6 +661,7 @@ sem_function::merge (sem_item *alias_item)
the extra thunk wrapper for direct calls. */ the extra thunk wrapper for direct calls. */
redirect_callers redirect_callers
= (!original_discardable = (!original_discardable
&& !DECL_COMDAT_GROUP (alias->decl)
&& alias->get_availability () > AVAIL_INTERPOSABLE && alias->get_availability () > AVAIL_INTERPOSABLE
&& original->get_availability () > AVAIL_INTERPOSABLE && original->get_availability () > AVAIL_INTERPOSABLE
&& !alias->instrumented_version); && !alias->instrumented_version);
...@@ -670,13 +673,6 @@ sem_function::merge (sem_item *alias_item) ...@@ -670,13 +673,6 @@ sem_function::merge (sem_item *alias_item)
redirect_callers = false; 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 /* We want thunk to always jump to the local function body
unless the body is comdat and may be optimized out. */ unless the body is comdat and may be optimized out. */
if ((create_thunk || redirect_callers) if ((create_thunk || redirect_callers)
...@@ -1714,6 +1710,8 @@ void ...@@ -1714,6 +1710,8 @@ void
sem_item_optimizer::execute (void) sem_item_optimizer::execute (void)
{ {
filter_removed_items (); filter_removed_items ();
unregister_hooks ();
build_hash_based_classes (); build_hash_based_classes ();
if (dump_file) if (dump_file)
...@@ -2482,7 +2480,6 @@ ipa_icf_driver (void) ...@@ -2482,7 +2480,6 @@ ipa_icf_driver (void)
gcc_assert (optimizer); gcc_assert (optimizer);
optimizer->execute (); optimizer->execute ();
optimizer->unregister_hooks ();
delete optimizer; delete optimizer;
optimizer = NULL; optimizer = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment