[Bug rtl-optimization/50088] movzbl is generated instead of movl

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Aug 17 14:54:00 GMT 2011


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50088

--- Comment #17 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-08-17 14:42:11 UTC ---
(In reply to comment #16)
> The testcase has ...
> 
>   int n8 = (arr[7] * 9 + 8) & 15;
> 
>   for (i = 0; i < len; i+=8)
>     {
>       n1 = (n1 + 1) & 15;
> 
>       s += arr[i] << n1;
> 
> The shift count is 32bit, which causes 32bit spill. Since shift/rotate
> instructions only take 8bit register (CL) as shift count, we load 8bit
> into CL. How do we solve this?

Well, always load from the spill slot with the mode the reg was spilled
if the arch says that is prefered.



More information about the Gcc-bugs mailing list