1  void bar (int *);
       2  
       3  void
       4  foo (int *a, int f)
       5  {
       6    int i, j, k, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0;
       7    #pragma omp parallel masked default(none) private (k) filter (f) firstprivate (f)
       8    bar (&k);
       9    #pragma omp parallel masked default(none) private (k)
      10    bar (&k);
      11    #pragma omp parallel default(none) firstprivate(a, f) shared(x, y, z)
      12    {
      13      #pragma omp masked taskloop reduction (+:x) default(none) firstprivate(a) filter (f)
      14      for (i = 0; i < 64; i++)
      15        x += a[i];
      16      #pragma omp masked taskloop simd reduction (+:y) default(none) firstprivate(a) private (i) filter (f)
      17      for (i = 0; i < 64; i++)
      18        y += a[i];
      19      #pragma omp masked taskloop simd reduction (+:y) default(none) firstprivate(a) private (i)
      20      for (i = 0; i < 64; i++)
      21        y += a[i];
      22      #pragma omp masked taskloop simd collapse(2) reduction (+:z) default(none) firstprivate(a) private (i, j) filter (f)
      23      for (j = 0; j < 1; j++)
      24        for (i = 0; i < 64; ++i)
      25  	z += a[i];
      26    }
      27    #pragma omp parallel masked taskloop reduction (+:u) default(none) firstprivate(a, f) filter (f)
      28    for (i = 0; i < 64; i++)
      29      u += a[i];
      30    #pragma omp parallel masked taskloop simd reduction (+:v) default(none) firstprivate(a, f) filter (f)
      31    for (i = 0; i < 64; i++)
      32      v += a[i];
      33    #pragma omp parallel masked taskloop simd collapse(2) reduction (+:w) default(none) firstprivate(a, f) filter (f)
      34    for (j = 0; j < 1; j++)
      35      for (i = 0; i < 64; ++i)
      36        w += a[i];
      37  }