https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79191
--- Comment #7 from Andrew Macleod <amacleod at redhat dot com> --- (In reply to Andrew Macleod from comment #6) > Ranger knows the range of m_3 on entry to BB3 is: > [0, 2][4294967296, 18446744069414584322] > we cant enumerate all the ranges that have [0,2] in the lower words, or > there'd just be too many subranges. > > and sadly, if that code were instead: > _7 = m_3(D) & 4294967295; > _8 = _7 & 4294967292; > > we would again get [0,2] for a range for _8. but no. someone thinks they > are smarter again. Why the heck don't we do that?? > scratch that. we still wouldn't get it. I was delusional. we still dont know that all the upper ranges don't fill some of those bits.. ie 0x100000000 thru 0x1FFFFFFF is in the range of m_3... and so we'd still fail the masking test. only bitmask tracking or precision sensitive equivalence will capture this case.