/* PR target/54703 */ /* { dg-do run { target sse2_runtime } } */ /* { dg-options "-O -msse2" } */ /* { dg-additional-options "-mavx -mtune=bdver1" { target avx_runtime } } */ extern void abort (void); typedef double V __attribute__((vector_size(16))); union { unsigned long long m[2]; V v; } u = { { 0xffffffffff000000ULL, 0xffffffffff000000ULL } }; static inline V foo (V x) { V y = __builtin_ia32_andpd (x, u.v); V z = __builtin_ia32_subpd (x, y); return __builtin_ia32_mulpd (y, z); } void test (V *x) { V a = { 2.1, 2.1 }; *x = foo (foo (a)); } int main () { test (&u.v); if (u.m[0] != 0x3acbf487f0a30550ULL || u.m[1] != u.m[0]) abort (); return 0; }