+2019-01-23 Thomas Schwinge <thomas@codesourcery.com>
+
+ * params.opt (openacc_kernels): Default to decompose.
+
2018-09-05 Cesar Philippidis <cesar@codesourcery.com>
Chung-Lin Tang <cltang@codesourcery.com>
If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization.
-param=openacc-kernels=
-Common Joined Enum(openacc_kernels) Var(param_openacc_kernels) Init(OPENACC_KERNELS_PARLOOPS) Param
+Common Joined Enum(openacc_kernels) Var(param_openacc_kernels) Init(OPENACC_KERNELS_DECOMPOSE) Param
--param=openacc-kernels=[decompose|parloops] Specify mode of OpenACC 'kernels' constructs handling.
Enum
+2019-01-23 Thomas Schwinge <thomas@codesourcery.com>
+
+ * c-c++-common/goacc/classify-kernels-unparallelized.c: Update.
+ * c-c++-common/goacc/classify-kernels.c: Likewise.
+ * c-c++-common/goacc/classify-parallel.c: Likewise.
+ * c-c++-common/goacc/classify-routine.c: Likewise.
+ * c-c++-common/goacc/loop-2-kernels.c: Likewise.
+ * c-c++-common/goacc/note-parallelism-1-kernels-conditional-loop-independent_seq.c:
+ New file.
+ * c-c++-common/goacc/note-parallelism-1-kernels-loop-auto.c:
+ Likewise.
+ * c-c++-common/goacc/note-parallelism-1-kernels-loop-independent_seq.c:
+ Likewise.
+ * c-c++-common/goacc/note-parallelism-1-kernels-loops.c: Likewise.
+ * c-c++-common/goacc/note-parallelism-1-kernels-straight-line.c:
+ Likewise.
+ * c-c++-common/goacc/note-parallelism-combined-kernels-loop-auto.c:
+ Likewise.
+ * c-c++-common/goacc/note-parallelism-combined-kernels-loop-independent_seq.c:
+ Likewise.
+ * c-c++-common/goacc/note-parallelism-kernels-conditional-loop-independent_seq.c:
+ Likewise.
+ * c-c++-common/goacc/note-parallelism-kernels-loop-auto.c:
+ Likewise.
+ * c-c++-common/goacc/note-parallelism-kernels-loop-independent_seq.c:
+ Likewise.
+ * c-c++-common/goacc/note-parallelism-kernels-loops.c: Likewise.
+ * c-c++-common/goacc/note-parallelism.c: Likewise.
+ * c-c++-common/goacc/routine-1.c: Likewise.
+ * c-c++-common/goacc/uninit-dim-clause.c: Likewise.
+
2019-01-30 Thomas Schwinge <thomas@codesourcery.com>
* c-c++-common/goacc/kernels-1.c: Add
/* Check offloaded function's attributes and classification for unparallelized
- OpenACC kernels. */
+ OpenACC 'kernels'. */
/* { dg-additional-options "--param openacc-kernels=decompose" } */
extern unsigned int *__restrict b;
extern unsigned int *__restrict c;
-/* An "extern"al mapping of loop iterations/array indices makes the loop
- unparallelizable. */
extern unsigned int f (unsigned int);
+#pragma acc routine (f) seq
void KERNELS ()
{
/* { dg-optimized {assigned OpenACC seq loop parallelism} {} { target *-*-* } l_compute1 } */
/* { dg-note {beginning 'parloops' part in OpenACC 'kernels' region} {} { target *-*-* } .+1 } */
for (unsigned int i = 0; i < N; i++)
+ /* An "extern"al mapping of loop iterations/array indices makes the loop
+ unparallelizable. */
c[i] = a[f (i)] + b[f (i)];
}
/* Check offloaded function's attributes and classification for OpenACC
- kernels. */
+ 'kernels'. */
/* { dg-additional-options "--param openacc-kernels=decompose" } */
/* Check offloaded function's attributes and classification for OpenACC
- parallel. */
+ 'parallel'. */
/* { dg-additional-options "-O2" }
{ dg-additional-options "-fopt-info-optimized-omp" }
/* Check offloaded function's attributes and classification for OpenACC
- routine. */
+ 'routine'. */
/* { dg-additional-options "-O2" }
{ dg-additional-options "-fopt-info-optimized-omp" }
for (j = 0; j < 10; j++)
{ }
}
-#pragma acc loop seq gang // { dg-error "'seq' overrides" }
+#pragma acc loop seq gang // { dg-error "'seq' overrides" "TODO" { xfail *-*-* } }
for (i = 0; i < 10; i++)
{ }
for (j = 0; j < 10; j++)
{ }
}
-#pragma acc loop seq worker // { dg-error "'seq' overrides" }
+#pragma acc loop seq worker // { dg-error "'seq' overrides" "TODO" { xfail *-*-* } }
for (i = 0; i < 10; i++)
{ }
#pragma acc loop gang worker
for (j = 1; j < 10; j++)
{ }
}
-#pragma acc loop seq vector // { dg-error "'seq' overrides" }
+#pragma acc loop seq vector // { dg-error "'seq' overrides" "TODO" { xfail *-*-* } }
for (i = 0; i < 10; i++)
{ }
#pragma acc loop gang vector
#pragma acc loop auto
for (i = 0; i < 10; i++)
{ }
-#pragma acc loop seq auto // { dg-error "'seq' overrides" }
+#pragma acc loop seq auto // { dg-error "'seq' overrides" "TODO" { xfail *-*-* } }
for (i = 0; i < 10; i++)
{ }
#pragma acc loop gang auto // { dg-error "'auto' conflicts" }
#pragma acc kernels loop worker(num:5)
for (i = 0; i < 10; i++)
{ }
-#pragma acc kernels loop seq worker // { dg-error "'seq' overrides" }
+#pragma acc kernels loop seq worker // { dg-error "'seq' overrides" "TODO" { xfail *-*-* } }
for (i = 0; i < 10; i++)
{ }
#pragma acc kernels loop gang worker
#pragma acc kernels loop vector(length:5)
for (i = 0; i < 10; i++)
{ }
-#pragma acc kernels loop seq vector // { dg-error "'seq' overrides" }
+#pragma acc kernels loop seq vector // { dg-error "'seq' overrides" "TODO" { xfail *-*-* } }
for (i = 0; i < 10; i++)
{ }
#pragma acc kernels loop gang vector
#pragma acc kernels loop auto
for (i = 0; i < 10; i++)
{ }
-#pragma acc kernels loop seq auto // { dg-error "'seq' overrides" }
+#pragma acc kernels loop seq auto // { dg-error "'seq' overrides" "TODO" { xfail *-*-* } }
for (i = 0; i < 10; i++)
{ }
#pragma acc kernels loop gang auto // { dg-error "'auto' conflicts" }
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for an OpenACC 'kernels'
+ construct containing conditionally executed 'loop' constructs with
+ 'independent' or 'seq' clauses. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+extern int c;
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop seq
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent worker
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent vector
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang vector
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang worker
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent worker vector
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang worker vector
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent worker
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent vector
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+ ;
+
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop seq
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop seq
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop seq
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for an OpenACC 'kernels'
+ construct containing 'loop' constructs with explicit or implicit 'auto'
+ clause. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels
+ /* Strangely indented to keep this similar to other test cases. */
+ {
+#pragma acc loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto gang /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto worker /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto gang vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto gang worker /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto worker vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto gang worker vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto gang /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto worker
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto vector
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+ ;
+
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for an OpenACC 'kernels'
+ construct containing 'loop' constructs with 'independent' or 'seq'
+ clauses. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels
+ /* Strangely indented to keep this similar to other test cases. */
+ {
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent worker /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent vector /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang vector /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang worker /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent worker vector /* { dg-message "note: assigned OpenACC worker vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang worker vector /* { dg-message "note: assigned OpenACC gang worker vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent gang /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent worker /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent vector /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+ ;
+
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for an OpenACC 'kernels'
+ construct containing loops. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ {
+ for (x = 0; x < 10; x++) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ ;
+
+ for (x = 0; x < 10; x++)
+ ;
+
+ for (x = 0; x < 10; x++)
+ for (y = 0; y < 10; y++)
+ for (z = 0; z < 10; z++)
+ ;
+
+ for (x = 0; x < 10; x++)
+ ;
+
+ for (x = 0; x < 10; x++)
+ for (y = 0; y < 10; y++)
+ ;
+
+ for (x = 0; x < 10; x++)
+ for (y = 0; y < 10; y++)
+ for (z = 0; z < 10; z++)
+ ;
+
+ for (x = 0; x < 10; x++)
+ for (y = 0; y < 10; y++)
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for an OpenACC 'kernels'
+ construct containing straight-line code. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+#pragma acc routine gang
+extern int
+f_g (int);
+
+#pragma acc routine worker
+extern int
+f_w (int);
+
+#pragma acc routine vector
+extern int
+f_v (int);
+
+#pragma acc routine seq
+extern int
+f_s (int);
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels /* { dg-warning "region contains gang partitoned code but is not gang partitioned" } */
+ {
+ x = 0; /* { dg-message "note: beginning .gang-single. region in OpenACC .kernels. construct" } */
+ y = x < 10;
+ z = x++;
+ ;
+
+ y = 0;
+ z = y < 10;
+ x -= f_g (y++); /* { dg-message "note: assigned OpenACC gang worker vector loop parallelism" } */
+ ;
+
+ x = f_w (0); /* { dg-message "note: assigned OpenACC worker vector loop parallelism" } */
+ z = f_v (x < 10); /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ y -= f_s (x++); /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ ;
+
+ x = 0;
+ y = x < 10;
+ z = (x++);
+ y = 0;
+ x = y < 10;
+ z += (y++);
+ ;
+
+ x = 0;
+ y += f_s (x < 10); /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ x++;
+ y = 0;
+ y += f_v (y < 10); /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ y++;
+ z = 0;
+ y += f_w (z < 10); /* { dg-message "note: assigned OpenACC worker vector loop parallelism" } */
+ z++;
+ ;
+
+ x = 0;
+ y *= f_g ( /* { dg-message "note: assigned OpenACC gang worker vector loop parallelism" } */
+ f_w (x < 10) /* { dg-message "note: assigned OpenACC worker vector loop parallelism" } */
+ + f_g (x < 10) /* { dg-message "note: assigned OpenACC gang worker vector loop parallelism" } */
+ );
+ x++;
+ y = 0;
+ y *= y < 10;
+ y++;
+ z = 0;
+ y *= z < 10;
+ z++;
+ ;
+ }
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for combined OpenACC 'kernels
+ loop' constructs with explicit or implicit 'auto' clause. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto gang /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto worker /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto gang vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto gang worker /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto worker vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto gang worker vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto gang /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto worker
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto vector
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+ ;
+
+#pragma acc kernels loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop
+ for (z = 0; z < 10; z++)
+ ;
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for combined OpenACC 'kernels
+ loop' constructs with 'independent' or 'seq' clauses. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent gang /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent worker /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent vector /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent gang vector /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent gang worker /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent worker vector /* { dg-message "note: assigned OpenACC worker vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent gang worker vector /* { dg-message "note: assigned OpenACC gang worker vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent gang /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent worker /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent vector /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop independent /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+ ;
+
+#pragma acc kernels loop independent /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for OpenACC 'kernels'
+ constructs containing conditionally executed 'loop' constructs with
+ 'independent' or 'seq' clauses. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+extern int c;
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop seq
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent gang
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent worker
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent vector
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent gang vector
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent gang worker
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent worker vector
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent gang worker vector
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent gang
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent worker
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent vector
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop seq
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop seq
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop independent
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* Strangely indented to keep this similar to other test cases. */
+ if (c) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ {
+#pragma acc loop seq
+ /* { dg-message "note: unparallelized loop nest in OpenACC .kernels. region: it's executed conditionally" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq
+ for (z = 0; z < 10; z++)
+ ;
+ }
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for OpenACC 'kernels'
+ constructs containing 'loop' constructs with explicit or implicit 'auto'
+ clause. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels
+#pragma acc loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto gang /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto worker /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto gang vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto gang worker /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto worker vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto gang worker vector /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto gang /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto worker
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto vector
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop
+ for (y = 0; y < 10; y++)
+#pragma acc loop auto
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop auto /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: forwarded loop nest in OpenACC .kernels. construct to .parloops. for analysis" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop auto
+ for (y = 0; y < 10; y++)
+#pragma acc loop
+ for (z = 0; z < 10; z++)
+ ;
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for OpenACC 'kernels'
+ constructs containing 'loop' constructs with 'independent' or 'seq'
+ clauses. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent gang /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent worker /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent vector /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent gang vector /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent gang worker /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent worker vector /* { dg-message "note: assigned OpenACC worker vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent gang worker vector /* { dg-message "note: assigned OpenACC gang worker vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent gang /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent worker /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent vector /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang worker loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ /* { dg-message "note: parallelized loop nest in OpenACC .kernels. construct" "" { target *-*-* } .-1 } */
+ for (x = 0; x < 10; x++)
+#pragma acc loop independent /* { dg-message "note: assigned OpenACC gang vector loop parallelism" } */
+ for (y = 0; y < 10; y++)
+#pragma acc loop seq /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (z = 0; z < 10; z++)
+ ;
+
+ return 0;
+}
--- /dev/null
+/* Test the output of "-fopt-info-optimized-omp" for an OpenACC 'kernels'
+ construct containing loops. */
+
+/* { dg-additional-options "-fopt-info-optimized-omp" } */
+
+//TODO update accordingly
+/* See also "../../gfortran.dg/goacc/note-parallelism.f90". */
+
+int
+main ()
+{
+ int x, y, z;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (x = 0; x < 10; x++) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ ;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (x = 0; x < 10; x++) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ ;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (x = 0; x < 10; x++) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ for (y = 0; y < 10; y++)
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (x = 0; x < 10; x++) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ ;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (x = 0; x < 10; x++) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ for (y = 0; y < 10; y++)
+ ;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (x = 0; x < 10; x++) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ for (y = 0; y < 10; y++)
+ for (z = 0; z < 10; z++)
+ ;
+
+#pragma acc kernels /* { dg-message "note: assigned OpenACC seq loop parallelism" } */
+ for (x = 0; x < 10; x++) /* { dg-message "note: beginning .parloops. region in OpenACC .kernels. construct" } */
+ for (y = 0; y < 10; y++)
+ for (z = 0; z < 10; z++)
+ ;
+
+ return 0;
+}
-/* Test the output of "-fopt-info-optimized-omp". */
+/* Test the output of "-fopt-info-optimized-omp" for OpenACC 'parallel'
+ constructs. */
/* { dg-additional-options "-fopt-info-optimized-omp" } */
int main ()
{
-#pragma acc kernels num_gangs (32) num_workers (32) vector_length (32)
+#pragma acc kernels num_gangs (32) num_workers (32) vector_length (32) /* { dg-warning "region contains gang partitoned code but is not gang partitioned" } */
{
gang ();
worker ();
/* { dg-note {'j' was declared here} {} { target *-*-* } .-2 } */
/* { dg-note {'k' was declared here} {} { target *-*-* } .-3 } */
- #pragma acc kernels num_gangs(i) /* { dg-warning "is used uninitialized" } */
+ #pragma acc kernels num_gangs(i) /* { dg-warning "is used uninitialized" "TODO" { xfail *-*-* } } */
;
- #pragma acc kernels num_workers(j) /* { dg-warning "is used uninitialized" } */
+ #pragma acc kernels num_workers(j) /* { dg-warning "is used uninitialized" "TODO" { xfail *-*-* } } */
;
- #pragma acc kernels vector_length(k) /* { dg-warning "is used uninitialized" } */
+ #pragma acc kernels vector_length(k) /* { dg-warning "is used uninitialized" "TODO" { xfail *-*-* } } */
;
}