+2019-07-03 Jakub Jelinek <jakub@redhat.com>
+
+ * omp-expand.c (expand_omp_for_static_nochunk,
+ expand_omp_for_static_chunk): For nowait worksharing loop with
+ conditional lastprivate clause(s), emit GOMP_loop_end_nowait call
+ at the end.
+
2019-07-02 Joern Rennecke <joern.rennecke@riscy-ip.com>
PR testsuite/91065
else
gsi_insert_after (&gsi, omp_build_barrier (t), GSI_SAME_STMT);
}
+ else if (fd->have_pointer_condtemp)
+ {
+ tree fn = builtin_decl_explicit (BUILT_IN_GOMP_LOOP_END_NOWAIT);
+ gcall *g = gimple_build_call (fn, 0);
+ gsi_insert_after (&gsi, g, GSI_SAME_STMT);
+ }
gsi_remove (&gsi, true);
/* Connect all the blocks. */
else
gsi_insert_after (&gsi, omp_build_barrier (t), GSI_SAME_STMT);
}
+ else if (fd->have_pointer_condtemp)
+ {
+ tree fn = builtin_decl_explicit (BUILT_IN_GOMP_LOOP_END_NOWAIT);
+ gcall *g = gimple_build_call (fn, 0);
+ gsi_insert_after (&gsi, g, GSI_SAME_STMT);
+ }
gsi_remove (&gsi, true);
/* Connect the new blocks. */
+2019-07-03 Jakub Jelinek <jakub@redhat.com>
+
+ * c-c++-common/gomp/lastprivate-conditional-5.c: New test.
+
2019-07-02 Jeff Law <law@redhat.com>
PR tree-optimization/90883
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fopenmp -fdump-tree-ompexp" } */
+/* { dg-final { scan-tree-dump-times "GOMP_loop_start " 3 "ompexp" } } */
+/* { dg-final { scan-tree-dump-times "GOMP_loop_end_nowait " 3 "ompexp" } } */
+
+int r;
+
+void
+foo (int *a)
+{
+ #pragma omp for nowait lastprivate(conditional: r)
+ for (int i = 0; i < 64; ++i)
+ if (a[i])
+ r = a[i];
+}
+
+void
+bar (int *a)
+{
+ #pragma omp for nowait lastprivate(conditional: r) schedule (static, 4)
+ for (int i = 0; i < 64; ++i)
+ if (a[i])
+ r = a[i];
+}
+
+void
+baz (int *a)
+{
+ #pragma omp for nowait lastprivate(conditional: r) schedule (runtime)
+ for (int i = 0; i < 64; ++i)
+ if (a[i])
+ r = a[i];
+}