<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/124738>124738</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Vectorization. Reduce with min seems weird for floats (with ffast math)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DenisYaroshevskiy
</td>
</tr>
</table>
<pre>
I'm looking at (with -march=haswell -ffast-math)
```
float tst(std::span<const float> x) {
return std::reduce(x.begin(), x.end(), x[0], [](float a, float b) {
return std::min(a, b);
});
}
```
https://godbolt.org/z/1EjWG4x6f
The codegen does a lot of shuffles. I'm very confused by that
In eve library the main loop is just:
```
.LBB0_21:
vminps ymm0, ymm0, ymmword ptr [rdi]
vminps ymm3, ymm3, ymmword ptr [rdi + 32]
vminps ymm4, ymm4, ymmword ptr [rdi + 64]
vminps ymm2, ymm2, ymmword ptr [rdi + 96]
vminps ymm0, ymm0, ymmword ptr [rdi + 128]
vminps ymm3, ymm3, ymmword ptr [rdi + 160]
vminps ymm4, ymm4, ymmword ptr [rdi + 192]
vminps ymm2, ymm2, ymmword ptr [rdi + 224]
vminps ymm0, ymm0, ymmword ptr [rdi + 256]
vminps ymm3, ymm3, ymmword ptr [rdi + 288]
vminps ymm4, ymm4, ymmword ptr [rdi + 320]
vminps ymm2, ymm2, ymmword ptr [rdi + 352]
vminps ymm0, ymm0, ymmword ptr [rdi + 384]
vminps ymm3, ymm3, ymmword ptr [rdi + 416]
vminps ymm4, ymm4, ymmword ptr [rdi + 448]
vminps ymm2, ymm2, ymmword ptr [rdi + 480]
add rdi, 512
add r8, -4
jne .LBB0_21
```
https://godbolt.org/z/7hqYTcxEo
Is there a reason that's not what reduce (with ffast math) does? On the first glance I'd expect it to be OK.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVU2P2zYQ_TX0ZWBBHEq2dNBhnV0XQQsEKIIWORWUOLK4kUiXpPyRX19QcrabjZ06KCBAlGceh-8N_UZ6r3eGqGL5huWPCzmGzrrqkYz2n6SzvqOD_6zPi9qqc_We4XqA3trP2uxABmBYHHXoYDlI13RMPHbSH6nvYdm20oflIEPHsGTpQ3xW6eVJH9reygDBB4aFD4qJByYe_F4aJt411vgAUwYTT3BiWAJbb1j6AADgKIzOwAvIkRobYlickpp22jAsYkV8B6eEjHr1yfJNyvLHuJ7ZMizmc8j427ysv612reIwFZkwMZuJr8ls_fjyHdffUu5C2Pu4A24ZbndW1bYPiXU7htsvDLf86fnPX7LTqp3V-tgRNFbRjgwoSx4k9DaAbcF3Y9v25BOY-3Egd4bGmnb0pKA-Q-hkmDd5b4AOBL2unXQxQDBIbWIL96A9PI8-xCN915_kt80m_Qv5HPyqxGHQZu8BzsOQRvqv3kfrFOyDi9I6paO6V3Hiki-u44DhBgRehZ-HIbugsh-gV9nN4niB4Q_g5eom_D84T3COxQX_k6T5Kr1Z-B7avLyu2r28EW_rdg9xzK8Ldyd9LIr_RV_gbfnuoS9y_L5v9_AWxW3d7iGe8dsX7h7iWXZbuHuIZ8Ub4aRSEP_B-A5yjm8Ckx8WMbbMXoWeDcGLZfyc7a27vz99bE5P9uJYPrqUI5DgSHprZjfDtQdjAxw7GWC2_JfhM40auIyaySuZ2MIHM9ldq50PsOulaWjySwV02lMTQAcIFmqCD78msFCVUKUo5YIqvhZFulpna7HoqixrVa6IZ4LXK1lKrvKm5UXZcCEpJ7HQFaaYpxwLjoJznqgaeS2zsihbquVKsiylQeo-6fvDEIkvtPcjVRyztSgWvayp99P8RTR0hCnKMF7HhasiaFmPO8-ytNc--H-3CTr0VP1BTbBOf5FBW5PA77M2kzCDNuCJBg9H0k5Ba9085fx17Raj66s3_dKhG-uksQPDbax8eS33zj5TExhup_P6OMBmQocK_wkAAP__YKRz7w">