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

    <tr>
        <th>Summary</th>
        <td>
            [X86] Failure to consolidate integer/double loads of the same bit constant
        </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>
    Reduced: https://godbolt.org/z/q1qW9xd4o

clang -g0 -O3 -march=znver2
```
#include <x86intrin.h>
__m256d foo(__m256d x, __m256i sign) {
    sign = _mm256_andnot_si256( _mm256_set1_epi64x( 0x7fffffffffffffffULL ), sign );
    __m256i offset = _mm256_or_si256( _mm256_set1_epi64x( 0x3fe0000000000000ULL ), sign );
    __m256d base = _mm256_mul_pd( x, _mm256_set1_pd( 0.5 ) );
    return _mm256_add_pd( base, _mm256_castsi256_pd( offset ) );
}

define <4 x double> @foo(<4 x double> %x, <4 x i64> %sign)  {
entry:
  %and.i = and <4 x i64> %sign, <i64 -9223372036854775808, i64 -9223372036854775808, i64 -9223372036854775808, i64 -9223372036854775808>
  %or.i = or <4 x i64> %and.i, <i64 4602678819172646912, i64 4602678819172646912, i64 4602678819172646912, i64 4602678819172646912>
  %mul.i = fmul <4 x double> %x, <double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01>
  %0 = bitcast <4 x i64> %or.i to <4 x double>
  %add.i = fadd <4 x double> %mul.i, %0
  ret <4 x double> %add.i
}

.LCPI0_0:
        .quad   -9223372036854775808 # 0x8000000000000000
.LCPI0_1:
        .quad   4602678819172646912 # 0x3fe0000000000000
foo(double __vector(4), long long __vector(4)):                       # @foo(double __vector(4), long long __vector(4))
        vbroadcastsd    .LCPI0_1(%rip), %ymm3   # ymm3 = [4602678819172646912,4602678819172646912,4602678819172646912,4602678819172646912]
 vbroadcastsd    .LCPI0_0(%rip), %ymm2   # ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
 vbroadcastsd    .LCPI0_1(%rip), %ymm4   # ymm4 = [4602678819172646912,4602678819172646912,4602678819172646912,4602678819172646912]
 vmulpd  %ymm3, %ymm0, %ymm0
        vandpd  %ymm2, %ymm1, %ymm1
 vorpd   %ymm4, %ymm1, %ymm1
        vaddpd  %ymm1, %ymm0, %ymm0
 retq
```
We've broadcast the same constant twice - 128-bit variants sometimes do something similar (although not usually as broadcasts)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8Vk1v4zYQ_TX0hbBBjUh9HHxI4jVQNECLLYrtzaBE2mZLkQ5Juc7--oL6iOVE2S2aRYlAEYfDN2_ejGhy79XBSLlG7B6xzYK34Wjd-vPPv6nGmkVlxfP6sxRtLQVK7_AxhJNH6R2CLYLtwYrK6rCy7oBg-xXB9il5-lJeBLWIbBC565-15uaAlweCl7-keNlwVx9RuvlqztLB4JiR4a-fQqpMrVshMUofLkWmTHDKrI4o_dR77HYNsEzgvbUIinF2QfCA-4nCMTEEJUb5fb8HY9wZMUo3eNdErx03wtiw8wpYhqAYzV6GZCdPKqOXaCWXfH87fn98xAjKGK-HhBKlkzgjCbvfexmmEa37frR0L8l0_LtoAlfcy2msptW7k4iYvTKTcL2ZrBjuNHoF6GRonXkRSYjBPwaYINXchy6ZYXnM9hUiyjfTfhByr0xXWYovWNi20hKlnzCipC_n2xVgXQLDgsroYB1rfC2yNME9xw4dckHAuBEr1cnCjXgPowNXGcXLEiBNcyBpVjCa56wgRVz-4WtjK3ccrRsoWveWYZfAhCLNCGR5USRlkkNGszKBMdKPW7qh17R64LdvWj1TumuBeiNmq7515ZIkceXj5htCpCNTqRBb8K1inZzBviE67QoxdsWeCzGbUpd1lxYwMm51Msw6d3iz_b56fPj1J7Ijk67sx-qp5QLj2fbACFJMLgW5HTeIybuIMwUdAF8fLf3-_rsbVN_tzrIO1iEo6HDqaGsO_ePNYhl_F-ZHjPjyUf9H8Jv0zpWzXHSnjujSHXWAAgFz6jQgImDPTZMOFLrXWGjE7uc_go9a2VDv9wiSeYJwJQgjwflT5KPW7xF8R0F6JUj_LwWbVp8EHkt45UKmr7ddwY24boGrXzJ9HeCti65jft_0fYEXE_jkm4ycDE-zN5ovEkF-lvhFfhyOEnveSFxb4wM3AYe_VS3xEidQLCsV8Jk7xU3w2NtGBtVIj4XtJ0dlDtirRmnuMIKC63C07eGIjQ249S3X-hlzfw3nEZQLsU5FmZZ8IddJlhPIoCzY4riGkiaFEKQmjFJaVZBzqFKaJUTIhIp0odZAABIgLMlZBmxFyz1lZVrSmuQVzymiRDZc6ZXW5ybeBxfK-1auWZlSutC8ktp3V0yAitd_SRNvk38UGYJY-oVbx33Lqj14RIlWPvgrUlBBd_fT6M82eMuVbp2Mx3uUzmoleJBYmSAP0iHYDieNtlx4bPdXpaOoo9qL1un1q-usCse2WtW2QbCN4Yd_y5Ozf8o6INh2WXkE2y6xfwIAAP__eGT6_A">