Commit 1a39b3d3 by Jakub Jelinek Committed by Jakub Jelinek

omp-expand.c (expand_omp_for_static_nochunk, [...]): For nowait worksharing loop…

omp-expand.c (expand_omp_for_static_nochunk, [...]): For nowait worksharing loop with conditional lastprivate clause(s)...

	* 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.

	* c-c++-common/gomp/lastprivate-conditional-5.c: New test.

From-SVN: r272956
parent 61a02d1e
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> 2019-07-02 Joern Rennecke <joern.rennecke@riscy-ip.com>
PR testsuite/91065 PR testsuite/91065
......
...@@ -4039,6 +4039,12 @@ expand_omp_for_static_nochunk (struct omp_region *region, ...@@ -4039,6 +4039,12 @@ expand_omp_for_static_nochunk (struct omp_region *region,
else else
gsi_insert_after (&gsi, omp_build_barrier (t), GSI_SAME_STMT); 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); gsi_remove (&gsi, true);
/* Connect all the blocks. */ /* Connect all the blocks. */
...@@ -4696,6 +4702,12 @@ expand_omp_for_static_chunk (struct omp_region *region, ...@@ -4696,6 +4702,12 @@ expand_omp_for_static_chunk (struct omp_region *region,
else else
gsi_insert_after (&gsi, omp_build_barrier (t), GSI_SAME_STMT); 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); gsi_remove (&gsi, true);
/* Connect the new blocks. */ /* 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> 2019-07-02 Jeff Law <law@redhat.com>
PR tree-optimization/90883 PR tree-optimization/90883
......
/* { 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];
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment