From 1a39b3d3e22ba34b750e277fae9634d0af015cae Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 3 Jul 2019 06:51:45 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 ++++ gcc/omp-expand.c | 12 +++++++ gcc/testsuite/ChangeLog | 4 +++ .../gomp/lastprivate-conditional-5.c | 33 +++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-5.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c7fed52b573..58937b0496b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-07-03 Jakub Jelinek + + * 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 PR testsuite/91065 diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 69344f449c9..6902425a3d6 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -4039,6 +4039,12 @@ expand_omp_for_static_nochunk (struct omp_region *region, 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. */ @@ -4696,6 +4702,12 @@ expand_omp_for_static_chunk (struct omp_region *region, 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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9bb683facbd..5abcceec601 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-07-03 Jakub Jelinek + + * c-c++-common/gomp/lastprivate-conditional-5.c: New test. + 2019-07-02 Jeff Law PR tree-optimization/90883 diff --git a/gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-5.c b/gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-5.c new file mode 100644 index 00000000000..51f6b30ffec --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-5.c @@ -0,0 +1,33 @@ +/* { 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]; +} -- 2.30.2