On 7/18/22 12:36, Daniel Kiss via Gcc wrote:
> Hello,
>
> We are going to add Function Multiversioning [1] support to Arm architectures.
> The specification is made public as beta[2] to ensure toolchain that follows
> Arm
> C Language Extension will implement it in the same way.
>
> A few tweaks considered to make the developers' life easier.
> Since the `target` attribute is used widely on Arm, we would like to
> introduce a
> new attribute `target_version` to avoid confusion and possible deployment
> problems. The `target_clones` attribute will be supported too. Also the
> “default”
> version to be made optional.
>
> We are looking for feedback on the specification (reply, github works too).
>
> Thanks so much,
> Daniel
>
> [1] https://gcc.gnu.org/onlinedocs/gcc/Function-Multiversioning.html
> [2]
> https://github.com/ARM-software/acle/blob/main/main/acle.md#function-multi-versioning
>
Hello.
Thanks for working on the feature, it will be nice to cover the gap in between
x86_64 and powerpc,
which implement the FMV feature.
As the person who's been involved with the current MVC code in the GCC, I have
a few comments/questions
about it:
1) both i386 and Powerpc also allow specifying an equivalent to -march (like
`arch=bdver2`),
in Arm case it seems to me only individual features are considered
2) about 'target_version' attribute - I like the idea as one can have a
completely independent
function implementation optimized for an ISA;
note it's very close to 'target' attribute (supported in C++), where one
needs to provide
a resolver and have the pretty same functionality (see e.g.
gcc/testsuite/g++.target/i386/mv1.C).
However, the feature does not work in C and you will have the very same
problem with target_version
attribute (multiple functions with the same declaration):
mv1.c:76:1: error: redefinition of ‘foo’
76 | foo ()
| ^~~
3) If you will implement 'target_version' attribute, I would like to see it
available also for the
existing targets supporting MVC
4) A small note about the mangling, the existing i386 naming scheme looks like:
...
_Z3foov.avx2_ssse3
...
5) Can you please define how will you evaluate priorities for a situation where
multiple features
are used (e.g. dotprod+sm)?
Note we face the very same problem on i386, where it's very hard to specify
a priority
for the family of avx512 features. That said, an optional priority specifier
might be possible.
6) Note that as opposed to i385 and Powerpc, we don't allow a combination of
ISA flags for target_clone
attribute (like sse2+avx512f).
7) FMV may be disabled in compile time by a compiler flag. In this case the
default version shall be used.
I would like to see the functionality also target agnostic.
Anyway, looking forward to the Arm implementation.
Hope the comments are constructive.
Cheers,
Martin