#include <emmintrin.h> __m128d foo (double *x, __m128i y) { return _mm_load_pd (x + _mm_cvtsi128_si32 (_mm_srli_si128 (_mm_slli_epi32 (y, 2), 0))); } ICEs on i686-linux with -O2 -m32 -msse2, starting in between r166288 and r166429.
Confirmed.
Created attachment 23284 [details] gcc46-pr47665.patch Untested patch.
Author: jakub Date: Thu Feb 10 11:15:23 2011 New Revision: 170000 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=170000 Log: PR target/47665 * combine.c (make_compound_operation): Only change shifts into multiplication for SCALAR_INT_MODE_P. * gcc.target/i386/pr47665.c: New test. Added: trunk/gcc/testsuite/gcc.target/i386/pr47665.c Modified: trunk/gcc/ChangeLog trunk/gcc/combine.c trunk/gcc/testsuite/ChangeLog
Fixed.
Author: jakub Date: Fri Feb 11 14:19:44 2011 New Revision: 170050 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=170050 Log: PR target/47665 * combine.c (make_compound_operation): Only change shifts into multiplication for SCALAR_INT_MODE_P. * gcc.target/i386/pr47665.c: New test. Added: trunk/gcc/testsuite/gcc.dg/pr47684.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-predcom.c