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

    <tr>
        <th>Summary</th>
        <td>
            [X86] Failure to simplify 'lower half' <4 x float> masked load/store to VMOVSD load/store
        </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>
    https://gcc.godbolt.org/z/1hvT51h1b
```
define void @copyme1(ptr noundef %src, ptr noalias noundef %dst) {
  %load = tail call <4 x float> @llvm.masked.load.v4f32.p0(ptr %src, i32 1, <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x float> poison)
  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %load, ptr %dst, i32 1, <4 x i1> <i1 true, i1 false, i1 false, i1 false>)
  ret void
}

define void @copyme2(ptr noundef %src, ptr noalias noundef %dst) {
  %load = tail call <4 x float> @llvm.masked.load.v4f32.p0(ptr %src, i32 1, <4 x i1> <i1 true, i1 true, i1 false, i1 false>, <4 x float> poison)
  tail call void @llvm.masked.store.v4f32.p0(<4 x float> %load, ptr %dst, i32 1, <4 x i1> <i1 true, i1 true, i1 false, i1 false>)
  ret void
}

declare <4 x float> @llvm.masked.load.v4f32.p0(ptr nocapture, i32 immarg, <4 x i1>, <4 x float>)
declare void @llvm.masked.store.v4f32.p0(<4 x float>, ptr nocapture, i32 immarg, <4 x i1>)
```
while copyme1 gets simplifed, copyme2 does not:
```
copyme1:                                # @copyme1
        vmovss  (%rdi), %xmm0                   # xmm0 = mem[0],zero,zero,zero
        vmovss  %xmm0, (%rsi)
 retq
.LCPI1_0:
        .long   4294967295                      # 0xffffffff
        .long   4294967295                      # 0xffffffff
        .long   0                               # 0x0
 .long   0                               # 0x0
copyme2: # @copyme2
        vmovaps .LCPI1_0(%rip), %xmm0           # xmm0 = [4294967295,4294967295,0,0]
        vmaskmovps      (%rdi), %xmm0, %xmm1
        vmaskmovps      %xmm1, %xmm0, (%rsi)
 retq
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVk2P2zYQ_TXjCxGBGoqWffDBa0dA0RYtmiLoraBEymaXElWScnbz6wt9-dtJsGgOEWyIosg3b96MHii817taqRXwJ-DbmWjD3rrVHz9_0JWtZ7mVr6t9CI0HtgbMALNdUUQ7K3NrQmTdDjD7DJjF-8OfPN7HOdAt0DXM6fjrH6Uqda3IwWpJIKGFbV4rFQMumuBIbdtaqpIAcu8KwA0ZZoXRwp-_lT4ALgmkTwMq6SaNFZIA25IgtCGFMIYA2yTkhZTGigDsfRfRmEMVVcI_Kxl1O6JDUjKMGjpyOMXWDEncDUYUHfcQbKNjElyr-jUxKYXxj8fs_RnCkUdjtbc14HKif6I8KXPO0wfr1DnRm7yG7CfFJoX-xxyOTJ0KPcexuul2HDyuLv7I1f2iSD9Gcb-awrfWtjDCqbeoXttCNKF1amKtq0p0hnFJ_Y6YR3JT9LcoeGq1b6SxvGtdn_baKDI6Ftmp4InXVWN0qfrijN1OpFVdO4fOJ-_hTJ7H1uQrFyA7N8mxSsN1qOzB-27NApA7qTvaXSbIX6qKPkDrX3VfUaUq4E8U-BZw81k5e3V7EKvHHsL0Yb0-tY9T4d9hGP2y-f2n-G96VGACioytd4SQBJfJcp7ikj9OnL6U4_X9MO7JdIsx1u1tuyYPZOvLcuKtxKLx5CjdoK9uHpb1opzAn056AG4uHmj_59vriMI_V_bQ-AnvbiOdhjcNeL1_WHS99Qt9cvwwZnLF5JItxUyt4nmaIC7SOJ3tVzJPloxxLBNeJkU8LwuhuKKCzrFI5krM9AopMhojjTmLeRpJxQsupaTpgso8zyGhqhLaRL1jWLebae9btZrTOKUzI3JlfH_kQcxF8axqCWz912IOiN0pyK26fe_yduc719E--BNS0MH056VuPd-STGjTOkWCnZzhlQCmxn5SjuyFKQHTG_8cTIwMFp_1XtYBfPz1t48fthfTs9aZ6yOYDvs2jwpbAWYdr_H2rnH2H1UEwKxP1wNmfcb_BQAA__-lKr1p">