aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2015-02-20 17:44:37 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2015-02-20 17:44:37 +0100
commit8b0487010cf07edbb687ff160f396c7ff6b4634a (patch)
tree1aac1fdd174fd5584d63847f808a929765efc3ec /gcc
parentfc3b4ab3432e471e6ea666702b3375f59e039b11 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/ipa-icf.c15
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;