https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89676
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I wonder if in this case the instruction couldn't replace the current =&r 0n Ic constraints e.g. with =r,&r 0n,0n I,c because if the shift count is constant, then I don't see the point of early-clobber, if the two inputs are n and I, then there are no input registers (arguably that should have been folded earlier), if one input is 0 and the other one is I, then the earlyclobber doesn't make much sense either, the first input is equal to the output and there is no other input. It is just the variable shift count where the count is in %cl register and there we must make sure that the destination register will not overlap %cl even when doing stuff like: unsigned long long x; ... x = x << (char) x; That said, if you can handle it in the RA, it could handle even those variable shift cases better (just make sure it doesn't overlap ecx, but otherwise allow the same reg as the first input).