[Bug rtl-optimization/89676] [7/8/9 Regression] Redundant moves for long long shift on 32bit x86

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Mar 20 21:55:00 GMT 2019


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).


More information about the Gcc-bugs mailing list