1/* PR target/35907 */ 2/* { dg-do run { target { powerpc*-*-* && vmx_hw } } } */ 3/* { dg-do compile { target { powerpc*-*-* && { ! vmx_hw } } } } */ 4/* { dg-require-effective-target powerpc_altivec_ok } */ 5/* { dg-options "-O2 -maltivec" } */ 6 7#define vector __attribute__((vector_size (16))) 8union 9{ 10 vector int k; 11 int c[16]; 12} u, v, w; 13vector int m; 14 15void __attribute__((noinline)) 16bar (void *i, vector int j) 17{ 18 asm volatile ("" : : "r" (i), "r" (&j) : "memory"); 19} 20 21int __attribute__((noinline)) 22foo (int i, vector int j) 23{ 24 char *p = __builtin_alloca (64 + i); 25 m += u.k; 26 v.k = m; 27 w.k = j; 28 if (__builtin_memcmp (&v.c, &w.c, 16) != 0) 29 __builtin_abort (); 30 j += u.k; 31 bar (p, j); 32 j += u.k; 33 bar (p, j); 34 return 0; 35} 36 37void 38test (void) 39{ 40 vector int l; 41 int i; 42 for (i = 0; i < 4; i++) 43 u.c[i] = i; 44 l = u.k; 45 if (foo (64, l)) 46 __builtin_abort (); 47 l += u.k; 48 if (foo (64, l)) 49 __builtin_abort (); 50} 51 52int 53main () 54{ 55 test (); 56 return 0; 57} 58