OSDN Git Service

2011-08-19 Andrew Stubbs <ams@codesourcery.com>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / pr46880.c
1 /* PR target/46880 */
2 /* { dg-do run } */
3 /* { dg-options "-O2 -fno-strict-aliasing -msse2" } */
4 /* { dg-require-effective-target sse2_runtime } */
5
6 typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__));
7 typedef double (*T)[2];
8
9 static __attribute__ ((noinline, noclone)) __m128d
10 foo (__m128d c, __m128d d)
11 {
12   T cp = (T) &c;
13   T dp = (T) &d;
14   __m128d e = { (*cp)[1], (*dp)[1] };
15   return e;
16 }
17
18 int
19 main ()
20 {
21   __m128d c = { 1.0, 2.0 };
22   __m128d d = { 3.0, 4.0 };
23   union { __m128d x; double d[2]; } u;
24   u.x = foo (c, d);
25   if (u.d[0] != 2.0 || u.d[1] != 4.0)
26     __builtin_abort ();
27   return 0;
28 }