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

    <tr>
        <th>Summary</th>
        <td>
            [X86] Duplicate XMM/YMM constant data
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    When we are working with different vector widths but the same constant data, we often see cases where the constants are repeated at each vector width:
```c
void fabs_cvt(const double *src, int *dst) {
    for(int i = 0; i != 6; ++i) {
        *dst++ = __builtin_fabs(*src++);
 }
}
```
```ll
define void @fabs_cvt(ptr nocapture noundef readonly %src, ptr nocapture noundef writeonly %dst) {
entry:
 %incdec.ptr.3 = getelementptr inbounds double, ptr %src, i64 4
 %incdec.ptr1.3 = getelementptr inbounds i32, ptr %dst, i64 4
  %0 = load <4 x double>, ptr %src, align 8
  %1 = tail call <4 x double> @llvm.fabs.v4f64(<4 x double> %0)
  %2 = fptosi <4 x double> %1 to <4 x i32>
  store <4 x i32> %2, ptr %dst, align 4
  %3 = load <2 x double>, ptr %incdec.ptr.3, align 8
  %4 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %3)
  %5 = fptosi <2 x double> %4 to <2 x i32>
  store <2 x i32> %5, ptr %incdec.ptr1.3, align 4
  ret void
}
declare <4 x double> @llvm.fabs.v4f64(<4 x double>)
declare <2 x double> @llvm.fabs.v2f64(<2 x double>)
```
AVX1:
```s
.LCPI0_0:
  .quad 0x7fffffffffffffff # double NaN
  .quad 0x7fffffffffffffff # double NaN
  .quad 0x7fffffffffffffff # double NaN
  .quad 0x7fffffffffffffff # double NaN
.LCPI0_1:
  .quad 0x7fffffffffffffff # double NaN
  .quad 0x7fffffffffffffff # double NaN
fabs_cvt(double const*, int*): # @fabs_cvt(double const*, int*)
  vmovupd (%rdi), %ymm0
  vandpd .LCPI0_0(%rip), %ymm0, %ymm0
  vcvttpd2dq %ymm0, %xmm0
  vmovupd %xmm0, (%rsi)
  vmovupd 32(%rdi), %xmm0
  vandpd .LCPI0_1(%rip), %xmm0, %xmm0
  vcvttpd2dq %xmm0, %xmm0
  vmovlpd %xmm0, 16(%rsi)
 retq
```
AVX2:
```
.LCPI0_0:
  .quad 0x7fffffffffffffff # double NaN
.LCPI0_1:
  .quad 0x7fffffffffffffff # double NaN
  .quad 0x7fffffffffffffff # double NaN
fabs_cvt(double const*, int*): # @fabs_cvt(double const*, int*)
  vbroadcastsd .LCPI0_0(%rip), %ymm0 # ymm0 = [NaN,NaN,NaN,NaN]
  vandpd (%rdi), %ymm0, %ymm0
  vcvttpd2dq %ymm0, %xmm0
  vmovupd %xmm0, (%rsi)
  vmovupd 32(%rdi), %xmm0
  vandpd .LCPI0_1(%rip), %xmm0, %xmm0
  vcvttpd2dq %xmm0, %xmm0
  vmovlpd %xmm0, 16(%rsi)
  vzeroupper
  retq
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsV1uP6jYX_TXmZeugxE4gPPAAw0H69HWOqlZqp08jJ96AexI7Y-_AzPn1lc1lCJepWlVVVRWhmThZe3mt5RuR3uu1QZyyfM7yxUB2tLFu-sP_f9SNNYPSqrfpzxs0sEOQDmFn3Vdt1rDTtAGlVyt0aAi2WJF1sNOKNh7KjoA2CF42CJU1nqQhUJIk4w-Bya4IDXhEqKRHD7sNOowlR7SPvTlsURIqkAQoq02vHyZmLFmwZMZGyf5b7dtbqxWsZOmfqy0xXkROULYrawTGZ95VQYc2FFrKE-MTYOP5vhoAYGUd40UAaGBiAQkT83DJ09AahRbjc8bn-qo0fI6sARHrn5_LTtekzXOQxXhxVDGP3wkTRwY2XhxMnS6O7i6adb2_oXClDUI0zbLkzHdLDoytZEudQzC2MwpX4FAqa-o3YDw_JHEbuHOa8Ii8TAkNubfTCASENpXCatiSG4poeo2ENTZoKPBrUwZefxiHY7fvIvQog-wWXfoxnxb8jCzq7JOF20lkqK1UwMRDBq9HGeLztRJZ67WB4qw8jeUkdQ2VrOsrjhB8XW-bYUh_uM1WoywM8hWK50kY7XdiHolXLVmvb7CGnskeHwSn4vOx2pN12H8UGa_D2Ps5j0P04uB34jgf0du5ZNe58A9y4adc-KVP0c8lv8jlCp8dcuH3c-G9XPKbxtJzZ6eEHFJcTxcrUWFVy_fM_-Donwye0fyJsE40F_vC7Ken9HpH9Pv28LuH7_-XPCfvCxaGL51UkLyOV_0PMC6Oe-UX-eUfCD-YSf8mM2cb6uFRPE8Ynx0OkXg1YWIWy_tb8IcVBzXbxm67VkE8FnKnwpkSgIznb02TnGDSqFbBaSj3aN1eoG8UVluiVnH1cgF6PQedROxvR0TswesbWsOee6X29a7a9Iba1ztCemrvgRq7rftq09ENvQ7p5d5q4der5a9ZLP-6-Vk6K1UlPfnfnX6xi_2FWADL50Emf7j8my8u5sm9uf_fbO7p_YbOdm2L7uykupzgAzUVaiImcoDTdDQpipwXWTLYTCfjcY5ZjhlPRJ7LKs9QCZWKYjIZlQLHAz3lCRdpmqRpLrIkGZYyHad5mmBWFFlRpCxLsJG6HsZjyrr1QHvf4XScTLLxoJYl1j6-SHBeyuorGsXE7KkYMR5-lTDOG-09qk-2Jd3ob5K0NeFZvhi4aeD8VHZrH45B7cm_90Ka6viGErjyBSy6ttaVJISnx0fGl788PvZfMwadq6cbotaHRciXjC_XmjZdOaxsw_gyMB_-fWqd_RUrYnwZzXjGl9HPbwEAAP__dMDBCA">