/* PR rtl-optimization/64316 */ /* { dg-do compile } */ /* { dg-options "-O3" } */ /* { dg-additional-options "-mavx2" { target { i?86-*-* x86_64-*-* } } } */ struct S { unsigned int s; unsigned long w[]; }; struct S **s; int foo (struct S *x, struct S *y, struct S *z) { unsigned int i; unsigned long *a, *b, *c; int r = 0; for (a = x->w, b = y->w, c = z->w, i = 0; i < x->s; i++, a++) { unsigned long d = *b++ & *c++; if (*a != d) { r = 1; *a = d; } } return r; } void bar (int x) { int p = x - 1; do { foo (s[x], s[x], s[p]); p--; } while (p > 0); }