<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/143957>143957</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: fold (icmp eq a, c1) | (icmp ult f(a), c2) to icmp ult f(a), c2
</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>
```llvm
define i1 @src(i64 %arg0) {
%1 = lshr i64 %arg0, 32
%2 = trunc nuw i64 %1 to i32
%3 = xor i32 %2, 55296
%4 = add i32 %3, -1114112
%5 = icmp ult i32 %4, -1112064
%6 = icmp eq i64 %1, 1114112
%7 = or i1 %6, %5
ret i1 %7
}
define i1 @tgt(i64 %arg0) {
%1 = lshr i64 %arg0, 32
%2 = trunc nuw i64 %1 to i32
%3 = xor i32 %2, 55296
%4 = add i32 %3, -1114112
%5 = icmp ult i32 %4, -1112064
ret i1 %5
}
```
alive2: https://alive2.llvm.org/ce/z/wc2PXT
godbolt: https://godbolt.org/z/o8nqYz577
Occurrences in llvm-opt-benchmarks:
typst-rs/optimized/18cop7j4xops9f9h.ll
%1 = lshr i64 %arg0, %c0 -> %.sroa.510.0.extract.shift = lshr i64 %.fr39, 32
%2 = trunc nuw i64 %1 to i32 -> %.sroa.510.0.extract.trunc = trunc nuw i64 %.sroa.510.0.extract.shift to i32
%3 = xor i32 %2, %c1 -> %130 = xor i32 %.sroa.510.0.extract.trunc, 55296
%4 = add i32 %3, %c2 -> %131 = add i32 %130, -1114112
%5 = icmp ult i32 %4, %c3 -> %132 = icmp ult i32 %131, -1112064
%6 = icmp eq i64 %1, %c4 -> %133 = icmp eq i64 %.sroa.510.0.extract.shift, 1114112
%7 = or i1 %6, %5 -> %or.cond38 = or i1 %132, %133
typst-rs/optimized/1mrwywpkq81cby93.ll
%1 = lshr i64 %arg0, %c0 -> %.sroa.514.0.extract.shift = lshr i64 %142, 32
%2 = trunc nuw i64 %1 to i32 -> %.sroa.514.0.extract.trunc = trunc nuw i64 %.sroa.514.0.extract.shift to i32
%3 = xor i32 %2, %c1 -> %145 = xor i32 %.sroa.514.0.extract.trunc, 55296
%4 = add i32 %3, %c2 -> %146 = add i32 %145, -1114112
%5 = icmp ult i32 %4, %c3 -> %147 = icmp ult i32 %146, -1112064
%6 = icmp eq i64 %1, %c4 -> %.not27 = icmp eq i64 %.sroa.514.0.extract.shift, 1114112
%7 = or i1 %6, %5 -> %.not = or i1 %.not27, %147
regex-rs/optimized/1rguw48xrsv49k4z.ll
%1 = lshr i64 %arg0, %c0 -> %.sroa.6.0.extract.shift.i.i = lshr i64 %754, 32
%2 = trunc nuw i64 %1 to i32 -> %.sroa.6.0.extract.trunc.i.i = trunc nuw i64 %.sroa.6.0.extract.shift.i.i to i32
%3 = xor i32 %2, %c1 -> %756 = xor i32 %.sroa.6.0.extract.trunc.i.i, 55296
%4 = add i32 %3, %c2 -> %757 = add i32 %756, -1114112
%5 = icmp ult i32 %4, %c3 -> %758 = icmp ult i32 %757, -1112064
%6 = icmp eq i64 %1, %c4 -> %759 = icmp eq i64 %.sroa.6.0.extract.shift.i.i, 1114112
%7 = or i1 %6, %5 -> %760 = or i1 %759, %758
3 Occurrences
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcl81u6ygUgJ-GbFAsOICxF17ktpPdaGYxi5mlg3HCrWOngJu2Tz_CP2l-nFQ32V2paiX4OAfO-Ypw7pxZ11pnSPxA4nmWt37T2Owpr5Wuqmq2aoqPDMWk_6mqty0ii0KXptbYUIw4cVYhSEzMMQKR2zVBkGIkfyCywGGIYsSeceU2Fp9AT5jByEDHeNvWCtftfgQp9g02XxjrsPfGhsFuXQgjBKTxiPAOyYtiRFhA5pRSTukhkOgoo7Y73FZ-RPmIAon5iMZfqH49bCyQZzFlB4a90W5dQEKqbt5qP4xLRBZIPoffZ4X0a__bFvLr_OLr_KNViCzyyrxpQGyBN97vHGILBEsEy348Ct5FjV0jWCqNYPmJYLlX8Pe__yCyWDfFqqn85eJhYlgY1jRJ_frfp5CyL_9fSrXW6lpph02NQ5Z5s_Pzla7VZpvbly4WWfiPnfNz60KEnTdb86kLBEuaqGYnf_L3ZufSMt1EVRXi3uoUAqEIxnPE_ujqFznb5JGgJCKRfvc2Vz5yG1P6iwhRaVl6aPb3rf4mSb9uMsL1PR0kuqpQOB89Sk0ZOeeu7uZYwasChgRwkoCec5SRM1VvixpCspOQMAlTRs-8vnk9hLD8JCybYq9W-_SKuXHBHOVobKSaumDJKUrZ2BzKWK_-NaW3dv-x3728JlStPlL2gNL8W6Uph8eE5r8m9OWO7hCai2tCX-zmPqF5fCE0F48JzeW00Dx-ROiobjzIW05fFPwep0OaU6pPPBrNh8vc6rV-nzDarts9T96te-PpC_-82-j4_DCRicxFDNm34F6n43OHDkmuWD29q1_3Wg6Nv_B6ckd3mS2Hbh9xUsQPmS1FMglLIR8xW4r0utaTFb9HbBmTU0iKdMCkSHqpGT56o8yKjBUpS_OZzqjkqRSJSPlsk8GqULEWLEmoKIsCBCmZTKGAGPKk1GxmMiAgSEwBCGGUR1qLlRKyLBhPWCEl4kRvc1MdXloz41yrM8pZKuSsyle6ct03AkCt97ibRQDhk8Fm3cNp1a4d4qQyzruvMN74Smd_Gud0gYf_y9ybpg7PtbKpChzevEOd83B8Rft379NhJjS2RJDkCLoCKQhEcHx6dtbaKjt7Chq_aVeRarYIlt1XTP9nvrPNT608gmV3pHB7DGd-y-D_AAAA___wenHP">