| /* APPLE LOCAL file 4332318 mainline candidate */ |
| /* { dg-do run { target i?86-*-* x86_64-*-* } } */ |
| /* { dg-options "-O2 -msse2" } */ |
| #include <xmmintrin.h> |
| extern void abort(); |
| int untrue = 0; |
| typedef union { |
| __v4sf v; |
| float f[4]; |
| } u; |
| void foo (u, u) __attribute__((noinline)); |
| void foo (u a, u b) { |
| if (b.f[0] != 7.0 || b.f[1] != 8.0 || b.f[2] != 3.0 || b.f[3] != 4.0) |
| abort(); |
| } |
| void bar (__v4sf, __v4sf) __attribute__((noinline)); |
| void bar (__v4sf a __attribute((unused)), __v4sf b __attribute((unused))) { untrue = 0;} |
| __v4sf setupa () __attribute((noinline)); |
| __v4sf setupa () { __v4sf t = { 1.0, 2.0, 3.0, 4.0 }; return t; } |
| __v4sf setupb () __attribute((noinline)); |
| __v4sf setupb () { __v4sf t = { 5.0, 6.0, 7.0, 8.0 }; return t; } |
| main() { |
| u a, b; |
| a.v = setupa (); |
| b.v = setupb (); |
| if (untrue) |
| bar(a.v, b.v); |
| b.v = (__v4sf) _mm_movehl_ps ((__m128)a.v, (__m128)b.v); |
| foo (a, b); |
| return 0; |
| } |