<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61228>61228</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] reduce absolute diff from min+max+sub
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rotateright
</td>
</tr>
</table>
<pre>
This is similar to the fold added with 74a58499b7c0995b782 :
```ll
declare i8 @llvm.abs.i8(i8, i1)
declare i8 @llvm.smin.i8(i8, i8)
declare i8 @llvm.smax.i8(i8, i8)
; with no-wrap:
; max(a,b) - min(a,b) --> abs(a - b)
define i8 @src(i8 %a, i8 %b) {
%min = call i8 @llvm.smin.i8(i8 %a, i8 %b)
%max = call i8 @llvm.smax.i8(i8 %a, i8 %b)
%ab = sub nsw i8 %max, %min ; this could also be "nuw"
ret i8 %ab
}
define i8 @tgt(i8 %a, i8 %b) {
%diff = sub nsw i8 %a, %b
%abs = call i8 @llvm.abs.i8(i8 %diff, i1 1)
ret i8 %abs
}
```
https://alive2.llvm.org/ce/z/kwCona
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVF2PozoM_TXmxWoF5qPwwMO0vUj3_f4Bh7gldwMZkTCd3V-_Ajoz7aodrYQCOM7x8clJ2HtzHkRqyPeQHyOeQufGenSBg4zm3IVIOf2z_q8zHo1Hb3pjecTgMHSCJ2c1stai8WJCh7uM8zKrKrVr46rK1a4khPQFIT5C_AJFvD7WrgEtreVR0JQIWWztW79l5bemBCrn4YAmAaqeJvveDHfZ5ffZ_P4k-zqm-7WNwW0uI79CejPR8ztQyUAHBVThBnsz3AU2kP6DrPwcxA2qP8C1nMzwwceP7UIDgXJeucyfCxDs9usKnEO9GRDSI7Zs7bPWH6DcIvD7E4QvOb5HYLUA-Enh4C_XnEWPwxfFPYbZI62bZktY71AJAtEwXYDoA22UcF3P6qrO7vhUpnAOfymTNqfTA5J8pajuuvEP9bhx3gfi6kBMbuS4bcA_7ODT5etvF8Krn51EDVDD1rwJbZeCbjwDNa0ANb-Amh-Xgxs40nWqq7TiSOqk2JVJFu-yPOpqKnJuT4lOKom5yFnHaUKkKtEpp0VWRqammNI4jQuiJM7irWRtRVkrLCSFLhLIYunZ2M_qkfF-krpIiMrIshLrl3uAaJALLpPz1uXHaKznNRs1nf0sl_HBf6EEE-xygfw7-HBwvTKDQH7EUfTUynwknJ2C4LJHp9H169HZLw7a-0lF02jre53OJnST2rauB2rmStfX5nV0_0sbgJqFnwdqFv6_AwAA__-nQFgB">