Function multiversioning question

Florian Weimer fweimer@redhat.com
Fri Jan 18 16:57:00 GMT 2019


* Martin Sebor:

> On 10/25/18 7:13 AM, Martin Reinecke wrote:
>>
>>>> This creates a nasty asymmetry in the sense that gcc's own optimizations
>>>> will be able to use all target features (because the compiler knows that
>>>> it is OK to use specific features like AVX instructions) whereas the
>>>> user has no way to hand-optimize where this becomes necessary. At least
>>>> not using this nice mechanism.
>>>
>>> They can, just not based on preprocessor macros.
>>
>> I was thinking about decisions at compile time (along the lines of "ah,
>> I'm in the AVX-specific version of the function, therefore I will call
>> AVX intrinsics"), and I don't see a way to make them without access to
>> macros.
>> At runtime this is of course possible.
>
> Since each of the clones has a target attribute attached to it there
> should be a way to query that attribute at compile time.  GCC 9
> provides a __builtin_has_attribute intrinsic for simple attribute
> introspection so in principle it could be used for this.

Another option: __builtin_cpu_supports could be constant-folded
according to the configured architecture baseline.

Thanks,
Florian



More information about the Gcc-help mailing list