<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/143211>143211</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: fold a-b > a+b to b<0
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Cancelll
</td>
</tr>
</table>
<pre>
```
define i1 @src(i8 %0, i8 %1) {
%3 = sub nsw i8 %1, %0
%4 = add nsw i8 %1, %0
%5 = icmp sgt i8 %3, %4
ret i1 %5
}
define i1 @tgt(i8 %0, i8 %1) {
%3 = icmp slt i8 %0, 0
ret i1 %3
}
```
Alive2: https://alive2.llvm.org/ce/z/pt1WOK
godbolt: https://godbolt.org/z/sPYv63zdo
Patterns found in llvm-opt-benchmark:
ffmpeg/optimized/flacenc.ll
%3 = sub nsw i8 %1, %0 -> %302 = sub nsw i32 %.8542.i, %.0331543.i
%4 = add nsw i8 %1, %0 -> %303 = add nsw i32 %.8542.i, %.0331543.i
%5 = icmp sgt i8 %3, %4 -> %.not358535.i = icmp sgt i32 %302, %303
ffmpeg/optimized/g722enc.ll
%3 = sub nsw i8 %1, %0 -> %125 = sub nsw i32 %124, %99
%4 = add nsw i8 %1, %0 -> %126 = add nsw i32 %124, %99
%5 = icmp sgt i8 %3, %4 -> %127 = icmp sle i32 %125, %126
zxing/optimized/AZEncoder.ll
%3 = sub nsw i8 %1, %0 -> %79 = sub nsw i32 %1, %.05496
%4 = add nsw i8 %1, %0 -> %80 = add nsw i32 %.05496, %1
%5 = icmp sgt i8 %3, %4 -> %.not94 = icmp sgt i32 %79, %80
darktable/optimized/introspection_sharpen.ll
%3 = sub nsw i8 %1, %0 -> %164 = sub nsw i64 %indvars.iv287, %94
%4 = add nsw i8 %1, %0 -> %165 = add nsw i64 %indvars.iv287, %94
%5 = icmp sgt i8 %3, %4 -> %.not217247 = icmp sgt i64 %164, %165
darktable/optimized/ext_preprocess.ll
%3 = sub nsw i8 %1, %0 -> %50 = sub nsw i32 %.ph, %.04182
%4 = add nsw i8 %1, %0 -> %51 = add nsw i32 %.ph, %.04182
%5 = icmp sgt i8 %3, %4 -> %.not5873 = icmp sgt i32 %50, %51
opencv/optimized/cornersubpix.ll
%3 = sub nsw i8 %1, %0 -> %168 = sub nsw i32 %.sroa.10.0.extract.trunc, %.sroa.5.0.extract.trunc
%4 = add nsw i8 %1, %0 -> %169 = add nuw nsw i32 %.sroa.5.0.extract.trunc, %.sroa.10.0.extract.trunc
%5 = icmp sgt i8 %3, %4 -> %.not228323 = icmp sgt i32 %168, %169
opencv/optimized/msd.ll
%3 = sub nsw i8 %1, %0 -> %236 = sub nsw i64 %indvars.iv761, %168
%4 = add nsw i8 %1, %0 -> %237 = add nsw i64 %indvars.iv761, %168
%5 = icmp sgt i8 %3, %4 -> %.not408573 = icmp sgt i64 %236, %237
opencv/optimized/stardetector.ll
%3 = sub nsw i8 %1, %0 -> %2708 = sub nsw i32 %.sroa.10211.2.us.i, %2658
%4 = add nsw i8 %1, %0 -> %2709 = add nsw i32 %.sroa.10211.2.us.i, %2658
%5 = icmp sgt i8 %3, %4 -> %.not134259.us.i = icmp sgt i32 %2708, %2709
opencv/optimized/descriptor.ll
%3 = sub nsw i8 %1, %0 -> %85 = sub nsw i32 %indvars191, %indvars167
%4 = add nsw i8 %1, %0 -> %86 = add nsw i32 %indvars167, %indvars191
%5 = icmp sgt i8 %3, %4 -> %.not100111 = icmp sgt i32 %85, %86
opencv/optimized/fuzzy_F0_math.ll
%3 = sub nsw i8 %1, %0 -> %95 = sub nsw i64 %indvars.iv450, %91
%4 = add nsw i8 %1, %0 -> %indvars.iv.next451 = add nsw i64 %indvars.iv450, %91
%5 = icmp sgt i8 %3, %4 -> %.not219373.us = icmp sgt i64 %95, %indvars.iv.next451
opencv/optimized/AKAZEFeatures.ll
%3 = sub nsw i8 %1, %0 -> %98 = sub nsw i64 %97, %91
%4 = add nsw i8 %1, %0 -> %99 = add nsw i64 %97, %91
%5 = icmp sgt i8 %3, %4 -> %.not4350.i = icmp slt i64 %98, %99
opencv/optimized/edgeboxes.ll
%3 = sub nsw i8 %1, %0 -> %119 = sub nsw i32 %118, %.064210
%4 = add nsw i8 %1, %0 -> %120 = add nsw i32 %118, %.064210
%5 = icmp sgt i8 %3, %4 -> %.not202 = icmp sgt i32 %119, %120
openvdb/optimized/LevelSetFilter.ll
%3 = sub nsw i8 %1, %0 -> %sub.i18 = sub nsw i32 %98, %99
%4 = add nsw i8 %1, %0 -> %add.i = add nsw i32 %99, %98
%5 = icmp sgt i8 %3, %4 -> %cmp.not5.i = icmp sgt i32 %sub.i18, %add.i
openvdb/optimized/Filter.ll
%3 = sub nsw i8 %1, %0 -> %sub.i14 = sub nsw i32 %93, %94
%4 = add nsw i8 %1, %0 -> %add.i = add nsw i32 %94, %93
%5 = icmp sgt i8 %3, %4 -> %cmp.not5.i = icmp sgt i32 %sub.i14, %add.i
14 Occurrences
openvdb/optimized/LevelSetFilter.ll
%3 = sub nsw i8 %1, %0 -> %sub.i18 = sub nsw i32 %98, %99
%4 = add nsw i8 %1, %0 -> %add.i = add nsw i32 %99, %98
%5 = icmp sgt i8 %3, %4 -> %cmp.not5.i = icmp sgt i32 %sub.i18, %add.i
openvdb/optimized/Filter.ll
%3 = sub nsw i8 %1, %0 -> %sub.i14 = sub nsw i32 %93, %94
%4 = add nsw i8 %1, %0 -> %add.i = add nsw i32 %94, %93
%5 = icmp sgt i8 %3, %4 -> %cmp.not5.i = icmp sgt i32 %sub.i14, %add.i
14 Occurrences
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkmEuPozgXhn-Ns0GF7OML9iKLdFVn09-nbmkWo-lNyYCTeJoAwiZVnV8_4pI7RYUatTSjkUqVBI7fYz9-7WPQztl1bswc8U-IP8107TdFNX_UeWKyLJvFRfpzjgTu__AiNSubm8CSADHsqgSBtDJAwDGCx6D7ShCoAEWfEF4EzW8aIPoUuDoOcvdyinnsmvVBrA3SaToWxNsgm2zLwK19H0X7KNZGVca3vQPOEV6g6Kn5f9Vvv_b397vLlh2ytfH4KhU9pTpjtcjszgCii2DjfekQXSBYIljq9nqYZbttWFRrBMvEIFjuESxLT37_-gXhxbpI4yLzt437G33Dpo379sdO0H1adCP9pr03Ve6CVVHnaWDzoEn0UJT-ITZ5stnq6kej1gavVtvSNEJF6e3W7k2KYLnKdGLyJMyyJuid-QseEP3c4cJwGUihuRxKziC0fXyIKSWc0dB22qPTHnTirTa9DLxHe9wtJ_EwLzzlklMe2qsmXRqKoW9FMR0Bt44A7gd3IkeAD5EjwPpgpe6hdaYnhmjd6t1FqGsanS8Gc5LkfTQB0ZHZv9r8Gszi--c8KVJTTfVUpAbBHCecMyXuN1LzXeJBI3VK_VAmwmn8o9igcyLVx0vc70O6-uF1nJkrQjb3VeFKk3hb5M9uo6vS5FNpEcEuA5vfwG2e7nTlQrsDGR0cwKZhI4JfRr4vPYkfkAhYdNWiy0HEwbZE8HGK5tU_l5UpqyIxzk1ehxwPbmDl5ug3RiRMWoqcDNptUHISMC4jOmi5rkK1qTtYRWnyZHdFKimq3FSujkv7On2_EnIQlKsKHRIc4tC8-konPvRVnSeHoba3-c3diT5Up8j65Tb9rf559oHO3YP-0qogKQyzJ0IerapG6G9dOhk6UDG-uCNBjsnlNKpAo_HVPaA9ya0MS37j1y4J0MO-CzQaYea8rlLjTeKLe8vI2QAjPGpZICSEsHbHswQIPpVhhNXgWn8_xZSDCqEMuGp1Bi3YjPSQIMJjJkyNSypbfgSnHDyv9HYh6tDkcEFEE2v04PHlTO1SXn2kYBOMCSGDCOXhTCPFCL5Vvd__fF7i5632m8kEFR9fzOy4jR9Gd-dJ-SQR5ubVs-sC9H6iiXVb0YiGtRtc24pfTtVZr0bILr4svn9eGu3rykwv4koOkVXRB3C28WqI343ctN2QcnyxfLMTMXlxRH-DkEnXJi5eP0CHkOETNZHHA4lgQPDEqgyDp-o3VKcZrH-qvCm1RB2fPPAJ1S6Nr1j9z-xM9pvxS5v5ux9AjsvJ1XFoyWDtuJqq-2npNO1n_4qXOgxJTa2xybZsD4VvFIV-FH3DNv8Ysr-Dig2ioh987Hgb1fFRlv4KVOwWFWHB1ySpq8rkiXG_yHH_Esv9Exz3n7PcLJ3TVFGlZ2ZOIqaASaLkbDNnioJgkVpJQkyaSh1FOuJCiFgIDiSa2Tlg4FhgAUAElSFEkqQCayZXRHIiEcNmq212fCc5s87VZk4YBUJmmY5N5tp3xAC5eQnauwgA8adZNW_fL8b12iGGM-u8O8l46zMz_791zqRBP-Ha2yJHdBGsiiwN9EMcNJw0gk9x4IsgRvQRz-oqm1-9-LR-U8dhUmwRLJsE_cdDWRV_msQjWLbdcgiWfb93c_grAAD__6x2-vk">