// PR tree-optimization/60023
// { dg-do compile }
// { dg-additional-options "-O3 -std=c++11 -fnon-call-exceptions" }
// { dg-additional-options "-mavx2" { target { i?86-*-* x86_64-*-* } } }

struct A { A (); ~A (); };

void
f1 (int *p, int *q, int *r) noexcept (true)
{
  int i;
  for (i = 0; i < 1024; i++)
    if (r[i])
      p[i] = q[i] + 1;
}

void
f2 (int *p, int *q, int *r)
{
  int i;
  for (i = 0; i < 1024; i++)
    if (r[i])
      p[i] = q[i] + 1;
}

void
f3 (int *p, int *q) noexcept (true)
{
  int i;
  for (i = 0; i < 1024; i++)
    p[i] = q[i] + 1;
}

void
f4 (int *p, int *q)
{
  int i;
  for (i = 0; i < 1024; i++)
    p[i] = q[i] + 1;
}

void
f5 (int *p, int *q, int *r) noexcept (true)
{
  int i;
  A a;
  for (i = 0; i < 1024; i++)
    if (r[i])
      p[i] = q[i] + 1;
}

void
f6 (int *p, int *q, int *r)
{
  int i;
  A a;
  for (i = 0; i < 1024; i++)
    if (r[i])
      p[i] = q[i] + 1;
}

void
f7 (int *p, int *q) noexcept (true)
{
  int i;
  A a;
  for (i = 0; i < 1024; i++)
    p[i] = q[i] + 1;
}

void
f8 (int *p, int *q)
{
  int i;
  A a;
  for (i = 0; i < 1024; i++)
    p[i] = q[i] + 1;
}

