int a[256];

__attribute__((noinline, noclone)) int
f1 (int i)
{
  #pragma omp parallel for linear (i: 4)
  for (int j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) short int
f2 (short int i, char k)
{
  #pragma omp parallel for linear (i: k + 1)
  for (long j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) long long int
f3 (long long int i, long long int k)
{
  #pragma omp parallel for linear (i: k)
  for (short j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) int
f4 (int i)
{
  #pragma omp parallel for linear (i: 4) schedule(static, 3)
  for (int j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) short int
f5 (short int i, char k)
{
  #pragma omp parallel for linear (i: k + 1) schedule(static, 5)
  for (long j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) long long int
f6 (long long int i, long long int k)
{
  #pragma omp parallel for linear (i: k) schedule(static, 7)
  for (short j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) int
f7 (int i)
{
  #pragma omp parallel for linear (i: 4) schedule(dynamic, 3)
  for (int j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) short int
f8 (short int i, char k)
{
  #pragma omp parallel for linear (i: k + 1) schedule(dynamic, 5)
  for (long j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) long long int
f9 (long long int i, long long int k)
{
  #pragma omp parallel for linear (i: k) schedule(dynamic, 7)
  for (short j = 16; j < 64; j++)
    {
      a[i] = j;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) int
f10 (int i, long step)
{
  #pragma omp parallel for linear (i: 4)
  for (int j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) short int
f11 (short int i, char k, char step)
{
  #pragma omp parallel for linear (i: k + 1)
  for (long j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) long long int
f12 (long long int i, long long int k, int step)
{
  #pragma omp parallel for linear (i: k)
  for (short j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) int
f13 (int i, long long int step)
{
  #pragma omp parallel for linear (i: 4) schedule(static, 3)
  for (int j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) short int
f14 (short int i, char k, int step)
{
  #pragma omp parallel for linear (i: k + 1) schedule(static, 5)
  for (long j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) long long int
f15 (long long int i, long long int k, long int step)
{
  #pragma omp parallel for linear (i: k) schedule(static, 7)
  for (short j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) int
f16 (int i, long long int step)
{
  #pragma omp parallel for linear (i: 4) schedule(dynamic, 3)
  for (int j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) short int
f17 (short int i, char k, int step)
{
  #pragma omp parallel for linear (i: k + 1) schedule(dynamic, 5)
  for (long j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

__attribute__((noinline, noclone)) long long int
f18 (long long int i, long long int k, long int step)
{
  #pragma omp parallel for linear (i: k) schedule(dynamic, 7)
  for (short j = 16; j < 112; j += step)
    {
      a[i] = j / 2 + 8;
      i += 4;
    }
  return i;
}

int
main ()
{
#define TEST(x) \
  if (x != 8 + 48 * 4)				\
    __builtin_abort ();				\
  for (int i = 0; i < 256; i++)			\
    if (a[i] != (((i & 3) == 0 && i >= 8	\
		  && i < 8 + 48 * 4)		\
		 ? ((i - 8) / 4) + 16 : 0))	\
      __builtin_abort ();			\
  __builtin_memset (a, 0, sizeof (a))
  TEST (f1 (8));
  TEST (f2 (8, 3));
  TEST (f3 (8LL, 4LL));
  TEST (f4 (8));
  TEST (f5 (8, 3));
  TEST (f6 (8LL, 4LL));
  TEST (f7 (8));
  TEST (f8 (8, 3));
  TEST (f9 (8LL, 4LL));
  TEST (f10 (8, 2));
  TEST (f11 (8, 3, 2));
  TEST (f12 (8LL, 4LL, 2));
  TEST (f13 (8, 2));
  TEST (f14 (8, 3, 2));
  TEST (f15 (8LL, 4LL, 2));
  TEST (f16 (8, 2));
  TEST (f17 (8, 3, 2));
  TEST (f18 (8LL, 4LL, 2));
  return 0;
}
