<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/71078>71078</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [X86] X86FixupVectorConstantsPass - add support for VPMOVSX/VPMOVZX constant extension
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          RKSimon
      </td>
    </tr>
</table>

<pre>
    X86FixupVectorConstantsPass currently just handles folding full vector loads to broadcasts, but we're missing the opportunity to use sign/zero extension loads for non-uniform cases.
```c
void foo(const int *src, float *dst) {
    for (int i = 0; i != 16; ++i) {
        *dst++ = (float)(*src++ + ((i % 8) + 1));
 }
}
```
llc -mcpu=x86-64-v3
```asm
foo(int const*, float*): # @foo(int const*, float*)
  vmovdqa .LCPI0_0(%rip), %ymm0 # ymm0 = [1,2,3,4,5,6,7,8]
  vpaddd (%rdi), %ymm0, %ymm1
  vcvtdq2ps %ymm1, %ymm1
  vmovups %ymm1, (%rsi)
  vpaddd 32(%rdi), %ymm0, %ymm0
 vcvtdq2ps %ymm0, %ymm0
  vmovups %ymm0, 32(%rsi)
  vzeroupper
 retq
```
We can reduce the size of the constant pool entry by replacing the vmovdqa load with vpmovzxbd
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVE1v4zYQ_TXjy8CGNPqwdNDBlmGgaIsGXSANeikokra5pUSFpLRxfn1B-iPdbLAxbHhGevMe30gzzDl1HKRsoNhCsVuwyZ-Mbf789YvqzbDojDg3T1W5Vy_T-Ci5N7Y1g_Ns8O6BOYd8slYOXp_x6-Q8ntggtHR4MFqo4YiHSWucYx1qw4RDb7CzhgnOnHdALXaTx28SaG0l9sq5UOZPEs04GuunQflzKJqcxHBUoP2rtAbli5eDU2a48h6MxcEMy2lQB2N75MxJt4JkB8kGyuTy5Zd8NkrgwRigigc3qAaPQBtneTjRQRsWc-E8UI2w3l7qEDHqAFWhQiFkO0wg24aQ0pClZUiBtkBb9UNx-Nx4AyISAFVREagGqm7HuNyOvyroIVCBVWSkLaYRXEN2I4f17ur1HtxMX1KtOS57Pk6Q7V6qclnmyzl7h2Suv1y59CZ4jP0B2tz7EuMasg0CZQh58jn2an_uzSyeGa5-ax9-Sf5JorHCqjF6aYPBc98nkfcShOYU2xSoJaA2A2pzoLYAakugdg3UVlDs7vwjE0LglVao72nfwvRewGcvnml09xsfYHozT-8RUcCp_3u7aGf0qfr1cfwg_gHknXhE3BW-lw8jMY2jtNcrVvrnD1-DvyRyNqCVYuIyzplTrxLNIcb8Ots4GqNRDt6esTujlaNm_DaYt-cY5g6_KX_CeezN_PrSiYVoMlFnNVvIJi3rqs6zdZ0sTg3LRMbLlKUZZwderPOUEpkQr2RS1IwnC9VQQlmaJpSWeV0kK8rras0E5emhKLuMQZ7Inim90nruV8YeF8q5STbrNFlXC806qV1cYkQd4__KQUC2eapKIAp7zTahbtlNRwd5opXz7o3JK6_jBgz4Yoc_W3hLZEKgm-J2itvg8eH3Px6_PAHtY_T301sb70tqMVndnLwfHWQboD3Q_qj8aepW3PRA-3CU699ytOar5B5oHx06oH00-V8AAAD___puqs0">