<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">