https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108397
Bug ID: 108397 Summary: Missed optimization with [0, 0][-1U,-1U] range arithmetics Product: gcc Version: 13.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: jakub at gcc dot gnu.org CC: hjl.tools at gmail dot com, jakub at gcc dot gnu.org, marxin at gcc dot gnu.org, rguenth at gcc dot gnu.org, unassigned at gcc dot gnu.org, uros at gcc dot gnu.org, yinyuefengyi at gmail dot com, zsojka at seznam dot cz Depends on: 107131 Target Milestone: --- Host: x86_64-pc-linux-gnu Target: x86_64-pc-linux-gnu +++ This bug was initially created as a clone of Bug #107131 +++ __attribute__((noipa)) unsigned long long foo (unsigned char o) { unsigned long long t1 = -(long long) (o == 0); unsigned long long t2 = -(long long) (t1 > 10439075533421201520ULL); unsigned long long t3 = -(long long) (t1 <= t2); return t3; } from comment 8 of that PR could be optimized into return -1ULL. t1 has range [0,0][-1ULL,-1ULL], t2 is set to 0 if t1 is 0 and to -1ULL if t1 is -1ULL and thus t2 could be optimized to t2 = t1. And t1 <= t2 can then trivially fold to t1 <= t1 aka true. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107131 [Bug 107131] [11/12 Regression] wrong code with -Os -fno-ipa-vrp -fno-tree-bit-ccp