https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106523
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So, from the matched patterns described in the comment above simplify_rotate, I'm afraid ((T) ((T2) X << Y)) | ((T) ((T2) X >> ((-Y) & (B - 1)))) ((T) ((T2) X << (int) Y)) | ((T) ((T2) X >> (int) ((-Y) & (B - 1)))) aren't valid, unless we can prove that Y < B (say through ranger), because if Y is >= B, then the left shift is valid but doesn't leave any bits from X in the return value. If ranger can't prove Y < B, then the only supportable patterns for those cases I'm afraid are what is accepted since PR62263 change, those patterns with Y & (B - 1) even for the first operand.