<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/88291>88291</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Failure to truncate bitreverse
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:instcombine,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
Two examples (there may be others):
https://alive2.llvm.org/ce/z/NXea2D
```
define i8 @src(i8 %x) {
#0:
%conv2 = zext i8 %x to i32
%elt.bitreverse = bitreverse i32 %conv2
%shr = lshr exact i32 %elt.bitreverse, 24
%conv1 = trunc i32 %shr to i8
ret i8 %conv1
}
=>
define i8 @tgt(i8 %x) {
#0:
%bitreverse = bitreverse i8 %x
ret i8 %bitreverse
}
Transformation seems to be correct!
```
https://alive2.llvm.org/ce/z/jbRPfa
```
define i8 @src(i16 %x) {
#0:
%hi = lshr i16 %x, 8
%conv1 = trunc i16 %hi to i8
%bitreverse = bitreverse i8 %conv1
ret i8 %bitreverse
}
=>
define i8 @tgt(i16 %x) {
#0:
%bitreverse = bitreverse i16 %x
%conv1 = trunc i16 %bitreverse to i8
ret i8 %conv1
}
Transformation seems to be correct!
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVF9vmzAQ_zTHi9UIzvx94KENQ5omTVPXh70aOIIrwJFtsrSffsIlLdmqNpkUJTi-3_n357AwRu5GohyiO4gKT0y2Uzq___ZTDmr0KtU85Q-_FaOjGPY9GQaY2o40sUE8sYqYmlcGMAN-C34B_vLdWbs3839YApailwfCTd8fho3SO8CyJsDyGbD8_osEFmsoxP7yccuGWjkSkymD0De6BkznZ4yOgBmD5G5BIfdfObB5v1bjARnwgj3T0bIFxKxikuOqjnq7qaTVdCBtyAFWS8nxtdkKZDrtKvv5gY6itqfK83aAW4bhAlz6BA5p9TTWJ9DcZSaWno7QdGLsEIvG5GQUL4B_eccfu7MX-_OB5gX_D5eVrnNCD1qMplV6EFaqkRmiwcyCKmK10ppqCxi8G--V4_JY3f9oxZXjEsSX-NHJt0TfIFuW_jVTZ_G91HXyPL0L3F3FepHDn0V-mcYPWJ0afCp2BbpiZP9nQrwm503GM-FRHiQBJnGcZInX5TwOOWY-CR4EYSCaNs6a1A8iEYetIAw9maOPoR8GfhBzHvBN3WDYplET1n7Co7iF0KdByP51yDxpzER5mmIWeL2oqDfuUkScK4DfytHYWg2VHAkQAbeAOEhjqLlReysH-eyUzXtR4el8ht1U085A6PfSWPN2lJW2d1fu19HY7dIzKlgpZD9pZ6tzXFhaR-RNus_P35SdtN1UbWo1AJaO6MvPzV6rR-dp6XQZwNJJ-xMAAP__aYG0Qg">