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.

Reply via email to