http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48616
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-04-15 13:07:56 UTC --- The shift corresponding to a = Vec(16); a >>= shifts; is actually there, but a wrong one, V4SImode = V4SImode >> SImode rather than V4SImode = V4SImode >> V4SImode which needs to be done. As the first int in shifts is 0, this means %xmm0 containing {16,16,16,16} initially is shifted down by {0,0,0,0} rather than {0,1,2,3}.