Commit 2dfd63de by Martin Jambor Committed by Martin Jambor

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
parent e0185719
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> 2019-11-28 Jan Hubicka <hubicka@ucw.cz>
* profile-count.h (profile_count::combine_with_ipa_count_within): * profile-count.h (profile_count::combine_with_ipa_count_within):
...@@ -2227,6 +2227,7 @@ static bool ...@@ -2227,6 +2227,7 @@ static bool
cgraph_node_cannot_be_local_p_1 (cgraph_node *node, void *) cgraph_node_cannot_be_local_p_1 (cgraph_node *node, void *)
{ {
return !(!node->force_output return !(!node->force_output
&& !node->ifunc_resolver
&& ((DECL_COMDAT (node->decl) && ((DECL_COMDAT (node->decl)
&& !node->forced_by_abi && !node->forced_by_abi
&& !node->used_from_object_file_p () && !node->used_from_object_file_p ()
......
...@@ -914,8 +914,10 @@ symtab_node::dump_base (FILE *f) ...@@ -914,8 +914,10 @@ symtab_node::dump_base (FILE *f)
if (DECL_STATIC_DESTRUCTOR (decl)) if (DECL_STATIC_DESTRUCTOR (decl))
fprintf (f, " destructor"); fprintf (f, " destructor");
} }
if (ifunc_resolver)
fprintf (f, " ifunc_resolver");
fprintf (f, "\n"); fprintf (f, "\n");
if (same_comdat_group) if (same_comdat_group)
fprintf (f, " Same comdat group as: %s\n", fprintf (f, " Same comdat group as: %s\n",
same_comdat_group->dump_asm_name ()); same_comdat_group->dump_asm_name ());
......
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> 2019-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/92645 PR tree-optimization/92645
......
/* { 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" } } */
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