58 lines
978 B
C
58 lines
978 B
C
/* 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;
|
|
}
|