1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fopenmp -fdump-tree-vect-details" } */
       3  /* { dg-additional-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
       4  /* { dg-additional-options "-mavx" { target avx } } */
       5  /* { dg-final { scan-tree-dump-times "vectorized \[1-9]\[0-9]* loops in function" 5 "vect" { target i?86-*-* x86_64-*-* aarch64-*-* } } } */
       6  
       7  int a[10000][128];
       8  
       9  void
      10  foo (void)
      11  {
      12    #pragma omp for simd schedule (simd: dynamic, 32) collapse(2)
      13    for (int i = 0; i < 10000; i++)
      14      for (int j = 0; j < 128; j++)
      15        a[i][j] += 3;
      16  }
      17  
      18  void
      19  bar (void)
      20  {
      21    #pragma omp parallel for simd schedule (simd: dynamic, 32) collapse(2)
      22    for (int i = 0; i < 10000; i++)
      23      for (int j = 0; j < 128; j++)
      24        a[i][j] += 3;
      25  }
      26  
      27  void
      28  baz (void)
      29  {
      30    #pragma omp distribute parallel for simd schedule (simd: dynamic, 32) collapse(2)
      31    for (int i = 0; i < 10000; i++)
      32      for (int j = 0; j < 128; j++)
      33        a[i][j] += 3;
      34  }
      35  
      36  void
      37  qux (void)
      38  {
      39    #pragma omp distribute simd dist_schedule (static, 128) collapse(2)
      40    for (int i = 0; i < 10000; i++)
      41      for (int j = 0; j < 128; j++)
      42        a[i][j] += 3;
      43  }
      44  
      45  void
      46  corge (void)
      47  {
      48    #pragma omp taskloop simd collapse(2)
      49    for (int i = 0; i < 10000; i++)
      50      for (int j = 0; j < 128; j++)
      51        a[i][j] += 3;
      52  }