<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/59887>59887</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
correlated value propagation misoptimizing @llvm.abs.i1
</td>
</tr>
<tr>
<th>Labels</th>
<td>
miscompilation,
llvm:optimizations
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
regehr
</td>
</tr>
</table>
<pre>
when this function is invoked as `f(1,1)` the abs call returns 1 and then we select the true branch so the return value must be 1:
```llvm
define i1 @f(i1 %0, i1 %1) {
%3 = call i1 @llvm.abs.i1(i1 %0, i1 false)
%4 = select i1 %1, i1 %3, i1 false
ret i1 %4
}
declare i1 @llvm.abs.i1(i1, i1 immarg) #0
attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
```
however, CVP is incorrectly transforming it to return a constant 0:
https://alive2.llvm.org/ce/z/s5vlDP
cc @nunoplopes
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0U02P6yoM_TVkY92KkO9FFndaZX1Xb-8Qt-ENgQhIq86vf4K0M515ulLVIJtjzjm20Xt1MUQ9q95YdcpwC7N1vaMLzS4b7XTvbzMZCLPycN6MDMoaUB6Uudp3mgA9sJqfmWhzJo45Ex2rOUCYCXD0IFFrcBQ2ZzzkgGaKKQM3Ak-aZEg3g9sIRodGzuBtCu0YuKLeCJbNBxgJclb8ZvzE-PO_5vtP6-uyhyY6K0OgcmBlohVPouJMHGE_Ro7Amrf9PsRQAaw47Vx3YKx3wNEfVP6_EmfUnqLOL3yZ8A9Bn688Hyy-AXeUo-fF8iGlOb0qm0hqdPQXOo-CalnQXZIcUfBXOIbg1LgF8imV6LHmDYyNIkeU72Ds2RGBsf5uJBi7mZsyE_iV5KYx4KgJbkrrRyMWWqy7M9Eaa2h38PSjCa8EZnujK7lI9PjPn31gpHWOZNB3CA6NP1u3KHMBFSDYZ78RpDU-oAnAfzR7DmH1MSYGJgbU6krikJyx0YRBEhPDBxODr6769OcVKmV00WzGrtqu5CGb-mLqig4z6vO6KfKurqo6m_uuzvM6L8aSxupcygInrJFG5DVH2bRdpnrBRcFz3uZ12eX1oS1bwkbyimPRCM5ZyWlBpT-pZcr7jfqqa9sm0ziS9mnbhFiUl3ZZlca4VUwIJo5MiDTMxW-7BrWoj5TzMVmdMtfH5K9xu_g4FsoH__VOUEFTn1zWGGh6LM_q7IqXVAYW5R9lo_PfJyvbnO6_m3xRYd7Gg7QLE0OitX9-rc7-SzIwMSRxnokh6fsvAAD__5UCT9w">