/* PR target/80706 */ | |
/* { dg-do run { target sse2_runtime } } */ | |
/* { dg-options "-O2 -msse2" } */ | |
union U { double value; struct S { int lsw; int msw; } parts; }; | |
__attribute__((noinline, noclone)) double | |
foo (void) | |
{ | |
__asm volatile ("" : : : "memory"); | |
return 2.0; | |
} | |
__attribute__((noinline, noclone)) double | |
bar (void) | |
{ | |
double s = foo (); | |
union U z; | |
z.value = s; | |
z.parts.lsw = 0; | |
return z.value * z.value + s * s; | |
} | |
int | |
main () | |
{ | |
if (bar () != 8.0) | |
__builtin_abort (); | |
return 0; | |
} |