/* PR target/35907 */ /* { dg-do run { target { powerpc*-*-* && vmx_hw } } } */ /* { dg-do compile { target { powerpc*-*-* && { ! vmx_hw } } } } */ /* { dg-require-effective-target powerpc_altivec_ok } */ /* { dg-options "-O2 -maltivec" } */ #define vector __attribute__((vector_size (16))) union { vector int k; int c[16]; } u, v, w; vector int m; void __attribute__((noinline)) bar (void *i, vector int j) { asm volatile ("" : : "r" (i), "r" (&j) : "memory"); } int __attribute__((noinline)) foo (int i, vector int j) { char *p = __builtin_alloca (64 + i); m += u.k; v.k = m; w.k = j; if (__builtin_memcmp (&v.c, &w.c, 16) != 0) __builtin_abort (); j += u.k; bar (p, j); j += u.k; bar (p, j); return 0; } void test (void) { vector int l; int i; for (i = 0; i < 4; i++) u.c[i] = i; l = u.k; if (foo (64, l)) __builtin_abort (); l += u.k; if (foo (64, l)) __builtin_abort (); } int main () { test (); return 0; }