<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/84094>84094</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[FMV] Provide some way to explicitly refer to a specific version of a function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
labrinea,
ilinpv
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jroelofs
</td>
</tr>
</table>
<pre>
Contrived example: https://clang.godbolt.org/z/WqMYbhrfv
```
#include <stddef.h>
__attribute__((target_version("simd")))
void saxpy(float *&Y, float A, const float *&X, size_t &elts);
__attribute__((target_version("default")))
void saxpy(float *&Y, float A, const float *&X, size_t &elts);
void saxpy_scalar(float *&Y, float A, const float *&X, size_t &elts) asm("_Z5saxpyRPffRPKfRm.default");
__attribute__((target_version("simd")))
void saxpy(float *&Y, float A, const float *&X, size_t &elts) {
while ((elts -= 4) > 3) {
*Y++ += A * *X++;
*Y++ += A * *X++;
*Y++ += A * *X++;
*Y++ += A * *X++;
}
// It would be nice to have syntax here to refer to
// a specific version, without using `asm()` and thus
// having to know the mangled name.
saxpy_scalar(Y, A, X, elts);
}
__attribute__((target_version("default")))
void saxpy(float *&Y, float A, const float *&X, size_t &elts) {
while (elts--) {
*Y++ += A * *X++;
}
}
void caller(float *Y, float A, const float *X, size_t elts) { saxpy(Y, A, X, elts); }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVU2P2zgP_jX0hUjg0B9JDj5kkgZ48aLAYA67nb0EskXb6spS1pKdSX_9Qk46k-xssUBRFA2UKKJImg_50BTOqcYwF5A9AJEWZa8MCyAC2gKR0socx3DMdpEYfGv74nNvWdvaRaWV52Jrje_VyBL5RXRHzZBssPX-6CDZAO2B9pUWppk3VpZW-7ntG6D9F6D97399fC7bvh4h3kG8uf7m8XVdjpQoU-lBMkKydV5KructJB9ubQ4H4X2vysHz4QC0Alp50TfsDyP3TlkzycipTk7I1tc1GY9WSXTi5XgGWtXaCo9AG6D8GWiLF8Em_K2scR5vNT4FsVNf-BAkOWvvgtvk4TuCk1yLQfufH9-b_4OrhBb9D3oMCtddoB3-yCb_T491_fT4__qpm9-j_a6E_aRqIiyv0SEinlqlGS9BBQWcQbLDdNJLPmDyziB8gDbPQA9ADxi2ZIebIAvfTxf5awZ-QRPEqxEsd7dlujgI_Y3_83iyg5ZYMhpVMXqLrRgZ3dl48YIt95Os55p79PadA4HuyJWqVYWvNd7iSfnWDh4Hp0yDkMdfGbWGPEZhJPp2cO-ctWIM-t7in8ae0LeMnTCNZolGdDx_M_gH6yeKTOSYqPCuXe7x_3J9_Q2mhtvZ7EcQ8y0B95mYkFRCa757d_wHjlsQNwheU_LNatzE8XVWRLJI5DpZi4iLxTJe5yuKkyxqC67TRSXzlIhoLfMyqctFmsWyyhZZFstVpAqKKY2TOKMkjZNsHgteLddMXHJV5oslpDF3Qum51mMXhleknBu4WKXxOo20KFm76_Q0fMLp8jov-yLYzMqhcZDGWjnv3rx45fU0dvcff4Nsh4-9HZVkdLZjPIlz4C-_HLWqlNfn19b5l1ZBW6PAejCVV9ZEQ6-L-_nbKN8O5byyHdA-BHDdZsfefubKA-2nsB3QfoL1dwAAAP__OLBMZg">