Function multiversioning question
Martin Reinecke
martin@MPA-Garching.MPG.DE
Thu Oct 25 11:46:00 GMT 2018
Hi,
I'm trying to use gcc's "target_clones" attribute for some functions in
a performance critical library. These functions use gcc builtins and
choose between different sets (standard code, SSE2, AVX) depending on
the predefined macros __SSE2__ and __AVX__.
Unfortunately these macros apparently are not set by the compiler when
it compiles for the individual targets.
Consider the code below:
#include <stdio.h>
__attribute__((target_clones("avx","sse2","default")))
void foo(void)
{
#if defined(__AVX__)
printf("AVX\n");
#elif defined(__SSE2__)
printf("SSE2\n");
#else
printf("nothing special\n");
#endif
}
int main(void)
{
foo();
return 0;
}
Compiling and running this in an AVX-capable CPU prints "SSE2", where I
would have hoped to see "AVX".
Is there a way to achieve what I have in mind?
Thanks,
Martin
More information about the Gcc-help
mailing list