Missed optimization: Fold (xor (xor %1, (and %2, -2)), 1) into (xor %1, (or %2, 1))
Open
llvm:optimizations
missed-optimization
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
The following reduced IR is derived from https://github.com/python/cpython/blob/234c12c/Modules/sha1module.c#L166
Godbolt: https://godbolt.org/z/7MhE4Yc6d
alive2 proof: https://alive2.llvm.org/ce/z/bBT2e9
```llvm
define void @update(ptr %0, i32 %1, i32 %2) {
%.masked = and i32 %2, -2
%4 = xor i32 %1, %.masked
%5 = xor i32 %4, 1
store i32 %5, ptr %0, align 4
ret void
}
```
expected:
```llvm
define void @tgt(ptr %0, i32 %1, i32 %2) {
%4 = or i32 %2, 1
%5 = xor i32 %1, %4
store i32 %5, ptr %0, align 4
ret void
}
```
Contributor guide
Assessment
This issue has not been assessed yet.