https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119731
--- Comment #16 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #15) > (In reply to Andrew Pinski from comment #14) > > Just a quick update. It looks like undefined code in the verifier producing > > a verification error. > > Sorry this is incorrect. basically the problem is we have: > a <<= 32 > a s>>= 32 > > which is a sign extend but the verifier loses track of what the value a > contained originally. And a quick other update to my understanding of the verifier. It has support to track both min/max and value/mask. Just for shifts it just does the min/max tracking. I don't know the history of that code to understand why it did do both though. Basically you update the min/max values and the value/mask by doing the shifts. And I think the rest will fall out.