InstCombine bitwise AND with range comparison generates a huge constant.
Open
backend:X86
llvm:instcombine
missed-optimization
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
https://godbolt.org/z/3G43n991K
```c++
#include
ssize_t align4(ssize_t len) {
return len & -4;
}
ssize_t align4_1(ssize_t len) {
__builtin_assume(len >= 0);
return align4(len);
}
ssize_t align4_2(ssize_t len) {
auto aligned = align4(len);
__builtin_assume(aligned >= 0);
return aligned;
}
```
```assembly
align4(long):
mov rax, rdi
and rax, -4
ret
align4_1(long):
movabs rax, 9223372036854775804
and rax, rdi
ret
align4_2(long):
movabs rax, 9223372036854775804
and rax, rdi
ret
```
Contributor guide
Assessment
This issue has not been assessed yet.