re PR target/46880 (generating of shufpd is broken)
PR target/46880 * config/i386/sse.md (sse2_loadlpd, sse2_movsd): Fix shufpd source operand. * gcc.target/i386/pr46880.c: New test. From-SVN: r168135
This commit is contained in:
parent
31e1ba2e2a
commit
401e4feab6
|
@ -1,3 +1,9 @@
|
|||
2010-12-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/46880
|
||||
* config/i386/sse.md (sse2_loadlpd, sse2_movsd): Fix shufpd source
|
||||
operand.
|
||||
|
||||
2010-12-21 Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
PR tree-optimization/47001
|
||||
|
|
|
@ -4990,7 +4990,7 @@
|
|||
movsd\t{%2, %0|%0, %2}
|
||||
movlpd\t{%2, %0|%0, %2}
|
||||
movsd\t{%2, %0|%0, %2}
|
||||
shufpd\t{$2, %2, %0|%0, %2, 2}
|
||||
shufpd\t{$2, %1, %0|%0, %1, 2}
|
||||
movhpd\t{%H1, %0|%0, %H1}
|
||||
#
|
||||
#
|
||||
|
@ -5067,7 +5067,7 @@
|
|||
movsd\t{%2, %0|%0, %2}
|
||||
movlpd\t{%2, %0|%0, %2}
|
||||
movlpd\t{%2, %0|%0, %2}
|
||||
shufpd\t{$2, %2, %0|%0, %2, 2}
|
||||
shufpd\t{$2, %1, %0|%0, %1, 2}
|
||||
movhps\t{%H1, %0|%0, %H1}
|
||||
movhps\t{%1, %H0|%H0, %1}"
|
||||
[(set_attr "type" "ssemov,ssemov,ssemov,sselog,ssemov,ssemov")
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
2010-12-21 Ira Rosen <irar@il.ibm.com>i
|
||||
2010-12-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/46880
|
||||
* gcc.target/i386/pr46880.c: New test.
|
||||
|
||||
2010-12-21 Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
PR tree-optimization/47001
|
||||
* gcc.dg/vect/pr47001.c: New.
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/* PR target/46880 */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -fno-strict-aliasing -msse2" } */
|
||||
/* { dg-require-effective-target sse2_runtime } */
|
||||
|
||||
typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__));
|
||||
typedef double (*T)[2];
|
||||
|
||||
static __attribute__ ((noinline, noclone)) __m128d
|
||||
foo (__m128d c, __m128d d)
|
||||
{
|
||||
T cp = (T) &c;
|
||||
T dp = (T) &d;
|
||||
__m128d e = { (*cp)[1], (*dp)[1] };
|
||||
return e;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
__m128d c = { 1.0, 2.0 };
|
||||
__m128d d = { 3.0, 4.0 };
|
||||
union { __m128d x; double d[2]; } u;
|
||||
u.x = foo (c, d);
|
||||
if (u.d[0] != 2.0 || u.d[1] != 4.0)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue