https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96542
Bug ID: 96542
Summary: Failure to optimize simple code to a constant when
storing part of the operation in a variable
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: gabravier at gmail dot com
Target Milestone: ---
uint8_t f(uint32_t x)
{
bool tmp = x;
return (0xFF >> tmp) * 2;
}
This can be optimized to `return -2;`. This transformation is done by LLVM, but
not by GCC. Strangely, this only seems to happen if `(bool)x` is stored in an
intermediate variable, otherwise the transformation is done by GCC.