https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117927
Bug ID: 117927 Summary: Invalid rotate optimization Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: kristerw at gcc dot gnu.org Target Milestone: --- The text about rotation in tree.def is not entirely clear, but the conclusion in PR108440 is that it has the same restriction as shift: it is undefined behavior to rotate more than the bit width. "Now, it is unclear if we in the middle-end treat rotates with rotate count equal or larger than precision as UB or not, unlike shifts there are less reasons to do so, but e.g. expansion of X r<< Y if there is no rotate optab for the mode is emitted as (X << Y) | (((unsigned) X) >> ((-Y) & (B - 1))) and so with UB on Y == B." This implies that the optimization implemented in PR109906 is invalid because (for a 32-bit type) x r<< (32 - y) is valid for y = 32, while the optimized x r>> y is UB.