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

    <tr>
        <th>Summary</th>
        <td>
            [SROA][Mem2Reg][EarlyCSE] Missing support for store-splat-to-load-scalar forwarding
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:optimizations,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    Alive2: https://alive2.llvm.org/ce/z/riEaBT
```
define float @src(i64 %x) {
 %alloc = alloca <4 x float>, align 16
  store <4 x float> zeroinitializer, ptr %alloc, align 16
  %359 = getelementptr inbounds float, ptr %alloc, i64 %x
  %360 = load float, ptr %359, align 4
  ret float %360
}


define float @tgt(i64 %x) {
  ret float 0.0
}
```

This pattern is extracted from mitsuba3:`mitsuba::Measured<float, drjit::Matrix<mitsuba::Spectrum<float, 4ul>, 4ul> >::sample`.
```
; bin/opt -O3 -disable-loop-unrolling test.ll -S
define void @test() {
entry:
  %alloc = alloca <4 x float>, align 16
  store <4 x float> zeroinitializer, ptr %alloc, align 16
  br label %loop

loop:
  %x = phi i64 [ 0, %entry ], [ %x.inc, %loop ]
  %359 = getelementptr inbounds float, ptr %alloc, i64 %x
  %360 = load float, ptr %359, align 4
  call void @use(float %360)
  %x.inc = add i64 %x, 1
  %cmp = icmp eq i64 %x.inc, 4
  br i1 %cmp, label %exit, label %loop

exit:
  ret void
}

declare void @use(float)

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVctu4zoM_Rp6IziwKT-ShRd5NLtigOn8gGwzjgay5SvJnTRffyHFzaPNXd8BClcUeSidQzIS1spuIKog30C-i8TkjtpUrWtO548_Ua3bj2qt5Dsh8DU7Ojda4GvAPeBehP2FUu_9QpsOcN8Q4P4MuDfyRWx-QbKDZA1FMv8Fs6WDHIgdlBaOQZZY0wAuZZExwPwEuGJQbi6hfkcopRsGfMfCSjDg24ydLnjgL4BbJpTsBpYWM4pZpw19DWRnMloO0kmh5JmMB47OXM94lggw5_kqnN6RI0U9Dc6D5FDraWjtnP1Jqiuhu1RFElIpLdpvQJ6vbjfIPlGG3KdSAT8rWu7mxd33q66uc_-p613eZPEt6WO9Lt9fR2nZKJwjMzBpGZ2cEY2jlh2M7lkvnZ1qwX1vFMlseYOvX0nYyVALfHvl3Jrf0s1u4Yw8Ad8-gN5GapyZ-ntQNqm53pcV81aItqIfFUGRLJ4z4BtWywFwr0fH4h-cxa20olYUK63HeBqMVkoOHXNk3UIpFr89aPquZRskJes1fdCSBmc-_DVudf5fW7Y2TImalA_y7O6LGOyHq57CNcejvPRrvmGJTwqYB14M8l2w802IXsihmf0-V3D_LaPSCKWulZosAS4fJgdX97w9k0uJ2vZ2Adyy9C6q6ccQI_2C_rnGfcqQ3Yku0xnhHdcK0Em6h42vJQkBt5L4ufQcns55S40Shp6RvLL7MgBRW_F2xVcioiotkfMVFmkRHavmgCVm_JA0WZrxojiUB2yQYyZqLJt2GckKE8ySZZqmRZqkxaIsy6JI6iarc2rL4gBZQr2Q6vr7H0lrJ6rSBJeYRoGxDc8Kog8Bvtajk708Cyf1YAERcAuIvbSW2vje6X35LjKVB8b11FnIEiWts7fTnHQqPFtvP3-sfSPmm1fq8Sd1F-NFGPWxfXuBfMdepbV-vu00jto4dtDmMnGxHZVwsdOx77TYNkIJ491_hGnl0EWTUdXjq9dJd5zqRaN7wH0gdvkXj0b_psYB7oMQFnA_a_Fe4b8BAAD__8C_JN8">