1  /* PR c/81887 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-fno-openmp -fopenmp-simd -fdump-tree-gimple" } */
       4  /* { dg-final { scan-tree-dump-times "#pragma omp simd" 2 "gimple" } } */
       5  /* { dg-final { scan-tree-dump-times "#pragma omp ordered simd\[ \t]*\[\n\r]" 2 "gimple" } } */
       6  /* { dg-final { scan-tree-dump-times "#pragma omp" 4 "gimple" } } */
       7  
       8  void
       9  f1 (int *x)
      10  {
      11    int i;
      12  #pragma omp simd
      13    for (i = 0; i < 100; i++)
      14    #pragma omp ordered simd
      15      x[i / 2] = i;
      16  }
      17  
      18  void
      19  f2 (int *x)
      20  {
      21    int i;
      22  #pragma omp parallel for simd ordered
      23    for (i = 0; i < 100; i++)
      24      #pragma omp ordered threads simd
      25        x[i / 2] = i;
      26  }
      27  
      28  void
      29  f3 (int *x)
      30  {
      31    int i;
      32  #pragma omp parallel for ordered
      33    for (i = 0; i < 100; i++)
      34      #pragma omp ordered
      35        x[i / 2] = i;
      36  }
      37  
      38  void
      39  f4 (int *x)
      40  {
      41    int i;
      42  #pragma omp parallel for ordered
      43    for (i = 0; i < 100; i++)
      44      #pragma omp ordered threads
      45        x[i / 2] = i;
      46  }
      47  
      48  void
      49  f5 (int n, int ***x)
      50  {
      51    int i, j, k;
      52  #pragma omp parallel for ordered(3)
      53    for (i=0; i < n; i++)
      54      for (j=0; j < n; ++j)
      55        for (k=0; k < n; ++k)
      56  	{
      57  #pragma omp ordered depend(sink:i-8,j-2,k+2) depend(sink:i, j-1,k) depend(sink:i-4,j-3,k+6) depend(sink:i-6,j-4,k-6)
      58  	  x[i][j][k] = i + j + k;
      59  #pragma omp ordered depend(source)
      60  	}
      61  }