mirror of git://gcc.gnu.org/git/gcc.git
multiple_target.c (create_dispatcher_calls): Add target check on ifunc.
2015-11-03 Evgeny Stupachenko <evstupac@gmail.com> gcc/ * multiple_target.c (create_dispatcher_calls): Add target check on ifunc. (create_target_clone): Change assembler name for versioned declarations. gcc/testsuite/ * g++.dg/ext/mvc4.C: Add dg-require-ifunc condition. * gcc.target/i386/mvc5.c: Ditto. * gcc.target/i386/mvc7.c: Add dg-require-ifunc condition and checks on resolver. From-SVN: r229706
This commit is contained in:
parent
4bf9e5a8a2
commit
f947799989
|
|
@ -1,3 +1,9 @@
|
||||||
|
2015-11-03 Evgeny Stupachenko <evstupac@gmail.com>
|
||||||
|
|
||||||
|
* multiple_target.c (create_dispatcher_calls): Add target check
|
||||||
|
on ifunc.
|
||||||
|
(create_target_clone): Change assembler name for versioned declarations.
|
||||||
|
|
||||||
2015-11-03 Thomas Schwinge <thomas@codesourcery.com>
|
2015-11-03 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
Chung-Lin Tang <cltang@codesourcery.com>
|
Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,12 +61,20 @@ create_dispatcher_calls (struct cgraph_node *node)
|
||||||
|| !DECL_FUNCTION_VERSIONED (decl))
|
|| !DECL_FUNCTION_VERSIONED (decl))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!targetm.has_ifunc_p ())
|
||||||
|
{
|
||||||
|
error_at (gimple_location (call),
|
||||||
|
"the call requires ifunc, which is not"
|
||||||
|
" supported by this target");
|
||||||
|
break;
|
||||||
|
}
|
||||||
e_next = e->next_caller;
|
e_next = e->next_caller;
|
||||||
idecl = targetm.get_function_versions_dispatcher (decl);
|
idecl = targetm.get_function_versions_dispatcher (decl);
|
||||||
if (!idecl)
|
if (!idecl)
|
||||||
{
|
{
|
||||||
error_at (gimple_location (call),
|
error_at (gimple_location (call),
|
||||||
"default target_clones attribute was not set");
|
"default target_clones attribute was not set");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
inode = cgraph_node::get (idecl);
|
inode = cgraph_node::get (idecl);
|
||||||
gcc_assert (inode);
|
gcc_assert (inode);
|
||||||
|
|
@ -215,6 +223,10 @@ create_target_clone (cgraph_node *node, bool definition, char *name)
|
||||||
{
|
{
|
||||||
tree new_decl = copy_node (node->decl);
|
tree new_decl = copy_node (node->decl);
|
||||||
new_node = cgraph_node::get_create (new_decl);
|
new_node = cgraph_node::get_create (new_decl);
|
||||||
|
/* Generate a new name for the new version. */
|
||||||
|
symtab->change_decl_assembler_name (new_node->decl,
|
||||||
|
clone_function_name (node->decl,
|
||||||
|
name));
|
||||||
}
|
}
|
||||||
return new_node;
|
return new_node;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
||||||
|
2015-11-03 Evgeny Stupachenko <evstupac@gmail.com>
|
||||||
|
|
||||||
|
* g++.dg/ext/mvc4.C: Add dg-require-ifunc condition.
|
||||||
|
* gcc.target/i386/mvc5.c: Ditto.
|
||||||
|
* gcc.target/i386/mvc7.c: Add dg-require-ifunc condition and checks on
|
||||||
|
resolver.
|
||||||
|
|
||||||
2015-11-03 Thomas Schwinge <thomas@codesourcery.com>
|
2015-11-03 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
* c-c++-common/goacc-gomp/nesting-fail-1.c: Move "atomic" tests
|
* c-c++-common/goacc-gomp/nesting-fail-1.c: Move "atomic" tests
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
||||||
|
/* { dg-require-ifunc "" } */
|
||||||
/* { dg-options "-mavx" } */
|
/* { dg-options "-mavx" } */
|
||||||
|
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
/* { dg-do compile } */
|
/* { dg-do compile } */
|
||||||
|
/* { dg-require-ifunc "" } */
|
||||||
/* { dg-options "-fno-inline" } */
|
/* { dg-options "-fno-inline" } */
|
||||||
/* { dg-final { scan-assembler-times "foo.ifunc" 6 } } */
|
/* { dg-final { scan-assembler-times "foo.ifunc" 6 } } */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
/* { dg-do compile } */
|
/* { dg-do compile } */
|
||||||
|
/* { dg-require-ifunc "" } */
|
||||||
|
/* { dg-final { scan-assembler "foo.resolver" } } */
|
||||||
|
/* { dg-final { scan-assembler "avx" } } */
|
||||||
|
/* { dg-final { scan-assembler "slm" } } */
|
||||||
/* { dg-final { scan-assembler-times "foo.ifunc" 4 } } */
|
/* { dg-final { scan-assembler-times "foo.ifunc" 4 } } */
|
||||||
|
|
||||||
__attribute__((target_clones("avx","default","arch=slm","arch=core-avx2")))
|
__attribute__((target_clones("avx","default","arch=slm","arch=core-avx2")))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue