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. From-SVN: r278812
This commit is contained in:
parent
e01857197b
commit
2dfd63ded8
5 changed files with 68 additions and 1 deletions
|
@ -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):
|
||||
|
|
|
@ -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 ()
|
||||
|
|
|
@ -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 ());
|
||||
|
|
|
@ -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
|
||||
|
|
51
gcc/testsuite/g++.dg/ipa/pr92697.C
Normal file
51
gcc/testsuite/g++.dg/ipa/pr92697.C
Normal file
|
@ -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" } } */
|
Loading…
Add table
Reference in a new issue