<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/88348>88348</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Fold `zext nneg` into `sext` when an optimization opportunity is identified
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:optimizations,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DianQK
</td>
</tr>
</table>
<pre>
The following transformation is legal after adding `nneg`:
```llvm
define i32 @src(i8 %v) {
%switch.tableidx = add nsw i8 %v, 1
%switch.idx.cast = zext nneg i8 %switch.tableidx to i32
%switch.offset = add nsw i32 %switch.idx.cast, -1
ret i32 %switch.offset
}
define i32 @tgt(i8 %v) {
%ext = sext i8 %v to i32
ret i32 %ext
}
```
Alive2: https://alive2.llvm.org/ce/z/2iCmDs
From: https://github.com/rust-lang/rust/issues/106459#issuecomment-1925647607
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8U01vozAQ_TXDxUpkbD4PHNJGXPa00v4BgweYlbEjbJq0v35lkmbTRqqEwIzn-b2Z51He02gRG8hfID8mag2TW5ojKfv7V9I5_d78mZANzhh3JjuysCjrB7fMKpCzjDwzOCrD1BBwYUrrmAQFtxZHKDjIA_Aj8M93wa-PMW_zNaRxIIuMpGCQcb_0ICqqGIj8DUTNoHy55rEY8mcK_bQPqjNI-sJAHiMns_7M7qBXlj5DSF_2vfJhg3zgJbCo8Ab6fmxwUc_zIW4YPIavrFH3E0sUsburWDB8y7sedOtJeXxs0dd-hDH81I9YR1Tj4-KW9U39Azlenig__XhUcDD0hgLkgU0hnHy0ULQgWrXF99G6vVtGEG2PINoPEK2g1_nor_B2cfMzeKQwrd2-dzOIdll92Bllx9saREver-hBtCkvsrwGIbdI7-YZbdiltciLrCx4mehG6lrWKsEmLVNR8UryIpmaUqZ1XZZFpbo8zxRP-0HWfdppLau0r6qEGsFFxrM05RnPebEXEitVpkNV9yj7TkLGcVZk7iUmm4amqmRWJUZ1aPw2KEJs91ce3CnQTB_bLHgQAsQrCDGT96h3j5txLz8mSxOBu24dPWTckA_-P1mgYLBpndFxgO53FArOyAYXg9Hn-H-e0DJl2SMFc6eTW8JqKbzHuSSNNtBAqJN1Mc0PdmzFXD-70-L-Yv_Fka38fwEAAP__pEhB4Q">