<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">