* combine.c (make_compound_operation): Only change shifts into
multiplication for SCALAR_INT_MODE_P.
* gcc.target/i386/pr47665.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170000
138bc75d-0d04-0410-961f-
82ee72b054a4
+2011-02-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/47665
+ * combine.c (make_compound_operation): Only change shifts into
+ multiplication for SCALAR_INT_MODE_P.
+
2011-02-10 Jie Zhang <jie@codesourcery.com>
PR testsuite/47622
an address. */
if (in_code == MEM && CONST_INT_P (XEXP (x, 1))
&& INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT
- && INTVAL (XEXP (x, 1)) >= 0)
+ && INTVAL (XEXP (x, 1)) >= 0
+ && SCALAR_INT_MODE_P (mode))
{
HOST_WIDE_INT count = INTVAL (XEXP (x, 1));
HOST_WIDE_INT multval = (HOST_WIDE_INT) 1 << count;
+2011-02-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/47665
+ * gcc.target/i386/pr47665.c: New test.
+
2011-02-10 Jie Zhang <jie@codesourcery.com>
PR testsuite/47622
--- /dev/null
+/* PR target/47665 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -msse2" } */
+
+#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)));
+}