<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67054>67054</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
X86 rejects inlining of target-feature-wise compatible functions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
kazutakahirata
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kazutakahirata
</td>
</tr>
</table>
<pre>
This is an offshoot from https://github.com/llvm/llvm-project/issues/65205. Consider:
```
#include <immintrin.h>
__attribute__((target("avx512bw")))
static inline __m512i MM512_MASK_ADD_EPI8(__m512i src,
__mmask64 k,
__m512i a,
__m512i b) {
__asm__("vpaddb\t{%3, %2, %0 %{%1%}" : "+v"(src) : "Yk"(k), "v"(a), "v"(b));
return src;
}
__attribute__((target("avx512bw,avx512dq")))
__m512i G(__m512i src, __mmask64 k, __m512i a, __m512i b) {
return MM512_MASK_ADD_EPI8(src, k, a, b);
}
```
The credit for the testcase goes to @kalcutter.
clang refuses to inline:
```
$ clang -O2 -S target_feature.cc -o /dev/stdout | grep call
callq _ZL19MM512_MASK_ADD_EPI8Dv8_xyS_S_
```
We should be able to inline the callee into the caller because the caller is allowed to use a superset of the instruction set that the callee is allowed to use.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVF2vozYQ_TXOyygRDCHAAw-5yaaq2lUr3ZW67QsazBDcEJy1h9zd_vqKjzT3Y_uhboRsM_YcM-dMDnlvjh1zruIHhXiiP3qhEzXGkZBCVPF-Qb001uUv9xalrb7kHxrjwXigDmxd-8ZagdrZMzQiF6-ircKDwsPRSNOXK23PCg9te71Ny4uzv7MWhQfjfc9e4WETYxCvYGc7byp2A0awV8Ft3ATzM71iZDrd9hWDinbmfDadONOtGhW9e55WFCTiTNkLF4XCVGEq5I4s4xrp-jkOsXwaCsZsfsZELyRGg-la0zEUxTkO0cD793GIxfvt4w_Fdr8v3v38_YB42_VOK9xN-UPKmfxps4bTPfiffzdI-obcUmEGKnn464PIn2cS8HqhqipVvJPhAMaRwh0ojHGeg2GYtsJxtVeIoKItjFQ9XMcpHSvObvFfT1P0NBI54OB8jt5Eypns6OFenmPpXTfSeAsPF_8fOXfTsvr0VtkbPd-9Ue6VZi9E-DtW75_99d6YkUe8Ead8XvW9vFftPY4fGgbtuDICtXUgDYOwF02e4WjZg1hQ6-BEre5F2K2eJ-uWuiM4rns_nZxa-d_-VmuYEpc_ISwfYWK3qJmkd7zSGpYWFB4qvio8eKlsL6CSHRwdX0BT277s1iHyCYrffgyzr_Czv6bF5y-PxWPxDyz8wuAb27cVlAxUtnwvZqRkuIIZTCf2_u6gZE295-ehwa_a1j5xNUAMmwS-v7DzLGDr8ajpvLhei7EdDGFpSF5c8xpjJn1R5VGVRRktOA83WRxhlGThoskxrXWYBFzROgw4Id5UYRYEaZamZYBhtjA5BhgFGYZhFm6icEVVkiRJHRPFca1LrdYBn8m0q8E5V9YdF6Nn5pskiNeLlkpu_WzjJekTd5WKth_TzeziLh8dt-yPXq2D1njxdyQx0nL-Md2A48GQ_cSs6Y4jIaP6y1n95ZPxDNqeLyRm0KHuu5Eov-hdm3-D8w-F_BkAAP__xAbkxQ">