diff options
author | Martin Jambor <mjambor@suse.cz> | 2019-11-28 15:39:48 +0000 |
---|---|---|
committer | Martin Jambor <mjambor@suse.cz> | 2019-11-28 15:39:48 +0000 |
commit | e87ceb1a048f9754adf8ee671e031eeb13b6d0a6 (patch) | |
tree | cd9141bc7986db875bf61ac841ff0f056253111b /gcc | |
parent | aa0377d766db2c7ded20346770b2e2ff4255dfe4 (diff) |
cgraph: ifunc resolvers cannot be made local (PR 92697)
2019-11-28 Martin Jambor <mjambor@suse.cz>
PR ipa/92697
* cgraph.c (cgraph_node_cannot_be_local_p_1): Return true for
ifunc_resolvers.
* symtab.c (symtab_node::dump_base): Dump ifunc_resolver flag.
Removed trailig whitespace.
testsuite/
* g++.dg/ipa/pr92697.C: New.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@278812 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cgraph.c | 1 | ||||
-rw-r--r-- | gcc/symtab.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ipa/pr92697.C | 51 |
5 files changed, 68 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 064dd8ef83e..60863539404 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2019-11-28 Martin Jambor <mjambor@suse.cz> + + PR ipa/92697 + * cgraph.c (cgraph_node_cannot_be_local_p_1): Return true for + ifunc_resolvers. + * symtab.c (symtab_node::dump_base): Dump ifunc_resolver flag. + Removed trailig whitespace. + 2019-11-28 Jan Hubicka <hubicka@ucw.cz> * profile-count.h (profile_count::combine_with_ipa_count_within): diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 1f7a5c58d98..dd07516b83e 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -2227,6 +2227,7 @@ static bool cgraph_node_cannot_be_local_p_1 (cgraph_node *node, void *) { return !(!node->force_output + && !node->ifunc_resolver && ((DECL_COMDAT (node->decl) && !node->forced_by_abi && !node->used_from_object_file_p () diff --git a/gcc/symtab.c b/gcc/symtab.c index 3e634e22c86..5a3122fc8bb 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -914,8 +914,10 @@ symtab_node::dump_base (FILE *f) if (DECL_STATIC_DESTRUCTOR (decl)) fprintf (f, " destructor"); } + if (ifunc_resolver) + fprintf (f, " ifunc_resolver"); fprintf (f, "\n"); - + if (same_comdat_group) fprintf (f, " Same comdat group as: %s\n", same_comdat_group->dump_asm_name ()); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a7533838f98..eeb4379b5d0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-11-28 Martin Jambor <mjambor@suse.cz> + + PR ipa/92697 + * g++.dg/ipa/pr92697.C: New. + 2019-11-28 Richard Biener <rguenther@suse.de> PR tree-optimization/92645 diff --git a/gcc/testsuite/g++.dg/ipa/pr92697.C b/gcc/testsuite/g++.dg/ipa/pr92697.C new file mode 100644 index 00000000000..8958bd0dcf2 --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/pr92697.C @@ -0,0 +1,51 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -fdump-ipa-sra" } */ + +extern int have_avx2; +extern int have_ssse3; + +namespace NTL +{ + + static void randomstream_impl_init_base () + { + __builtin_printf ("Frob1\n"); + } + + static void // __attribute__ ((target ("ssse3"))) + randomstream_impl_init_ssse3 () + { + __builtin_printf ("Frob2\n"); + } + + static void + //__attribute__ ((target ("avx2,fma,avx,pclmul,ssse3"))) + randomstream_impl_init_avx2 () + { + __builtin_printf ("Frob3\n"); + } + + extern "C" + { + static void (*resolve_randomstream_impl_init (void)) () + { + if (have_avx2) + return &randomstream_impl_init_avx2; + if (have_ssse3) + return &randomstream_impl_init_ssse3; + return &randomstream_impl_init_base; + } + } + static void + __attribute__ ((ifunc ("resolve_" "randomstream_impl_init"))) + randomstream_impl_init (); + void foo () + { + randomstream_impl_init (); + } + +} + + +/* { dg-final { scan-ipa-dump-not "Created new node" "sra" } } */ |