https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118254
Bug ID: 118254 Summary: missed knowing lower bits of a variable when using comparison of shorter type Product: gcc Version: 14.2.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Blocks: 85316 Target Milestone: --- Take: ``` void foo(void); int il=1000; int main(void) { short t = il; unsigned t1 = t; if (t1 == 0) { #if 1 char b = t1; #else char b = il; #endif if (b != 1) __builtin_unreachable(); foo(); } } ``` The call to foo should be optimized away since `b` is never 1. as il&0xffff and therefor b is always 0. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85316 [Bug 85316] [meta-bug] VRP range propagation missed cases