| Issue |
91754
|
| Summary |
Failure to spot bitmask building loop idiom
|
| Labels |
missed-optimization
|
| Assignees |
|
| Reporter |
Kmeakin
|
These two functions (which calculate the mask necessary to extract the n lowest bits from a 64-bit int) are equivalent, but LLVM fails to optimize the first into the second:
[godbolt](https://godbolt.org/z/zdrbaxonT), [alive](https://alive2.llvm.org/ce/z/LuaWSV)
```c
#include <stdint.h>
uint64_t src(uint8_t n) {
uint64_t mask = 0;
for (uint8_t i = 0; i < n; i++) {
mask |= UINT64_C(1) << i;
}
return mask;
}
uint64_t tgt(uint8_t n) {
return (n == 64) ? UINT64_MAX : (UINT64_C(1) << n) - 1;
}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs