[Bug ipa/84833] New: [8 Regression] target_clones regression since r251047
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 12 17:38:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84833
Bug ID: 84833
Summary: [8 Regression] target_clones regression since r251047
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ipa
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
CC: marxin at gcc dot gnu.org
Target Milestone: ---
__attribute__((noipa)) void
baz (void (*fn) (void))
{
asm volatile ("" : "+g" (fn) : : "memory");
fn ();
}
__attribute__((target_clones("arch=sandybridge", "default"))) static void
bar (void)
{
}
__attribute__((target_clones("arch=sandybridge", "default"))) void
foo (void)
{
baz (bar);
}
int
main ()
{
}
no longer links. Even previously it has been quite broken, as
57: 0000000000400ae0 35 FUNC GLOBAL DEFAULT 13
bar._GLOBAL___baz.resolver
59: 0000000000400ae0 35 IFUNC GLOBAL DEFAULT 13 bar
were exported symbols even when the function actually were declared static, but
no it doesn't even link.
Another (though preexisting) bug is lack of optimization, if we have a call or
reference of a target_clones dispatcher in a function with the same
target_clones attribute (or maybe even just target attribute or similar), we
should optimize it at compile time into a reference to a particular target
clone.
Got into this from PR78808, the above is just an approximation of why PR78808
doesn't work on the trunk either.
More information about the Gcc-bugs
mailing list