https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110753
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aldyh at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |aldyh at gcc dot gnu.org --- Comment #3 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- The intersection of two mask/value pairs is being pessimized incorrectly. MASK 0x0 VALUE 0x1 (value is known to be 1) MASK 0xfffffffffffffffc VALUE 0x0 (low 2 bits are known to be 1, everything else is unknown). irange_bitmask::intersect() is intersecting these to: MASK 0xffffffffffffffff VALUE 0x0 (i.e. totally unknown value). This is causing union_bitmask() to return a change when none actually occurred, because we end up losing the bitmask. Mine.