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

    <tr>
        <th>Summary</th>
        <td>
            Suboptimal code gen in Clang for _mm_setzero_ps with #pragma STDC FENV_ACCESS ON on x64
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    _mm_setzero_ps() is supposed to generate `xorps   xmm0, xmm0` but if STDC FENV_ACCESS ON is set (it get set by -ffp-model=strict)
than it generates 
`  xor     eax, eax
   cvtsi2ss        xmm0, eax
   shufps  xmm0, xmm0, 0 `

This happens only on Clang, with GCC or MSVC this doesn't happen.
Below are code snippets for STDC FENV_ACCESS OFF/ON
https://godbolt.org/z/nqx9ejKre 
https://godbolt.org/z/7hKzh95E4
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNU01zmzAQ_TXishMPCIPMgUOCQw-ZJgdncvUIsRhlBKJIOE5-fRdwpk3bQzWgRfvx9u1qqWz9nh-77ujQf-Boj4NjfMd4BtqBm4bBOqzBWzhhj6P0CCwNL3YcHABcui5kvFhlGkI1edANHJ73BZT3jy_H26K4Pxzg6XFBQw-ErT1h-eVUvcNN0ww3na3RsHjv_KiVp-Qs3LPw1reyh8V9Te1g1c-pgDjAvFBeZgqzWIykUmfvNHcOruuT5u8-rp2auYYvJZAM5_quaZb9uSXqrRwG7B3Y3rzTBoWR_Wl2f9O-hW9FAcTm--GlAD-71xZdz7jw18DNCnWHxr6BHBEUFQyu12T0DhoK_rtnZcl4-fS4hrbe08XEt6Si52Tryhq_sSORKD_o7X9cMnx9IOj_8xftw0ebJffbAPMoTXci2m1FFtR5XGdxJgOvvcH8MFV28LqTZmVMFwH6Wv3C-uvgrN1gPB5GeerkP-eAmndJt8E0mvwPjhQ7VRtlOzoYc_4UN8NoX3GeilI7NyGNZ5lkYcKDNq-UlInaqbARW8GFUIJzEad1VdUqVXIXGFmhcTlL7hjnPb7BAkHfLNkHOuch51EUCR4m2zjbqCiJuGpQ7ISsa_oLtiF2UpvNzGNuXjDmC6VqOjkyGu28-2WUzulTj7ikI3w5-daO-SDPBl-t04M9axUsDPKlgp9Vlhfv">