[prev in list] [next in list] [prev in thread] [next in thread]
List: gcc-fortran
Subject: Re: [gomp4] acc enter/exit data
From: Thomas Schwinge <thomas () codesourcery ! com>
Date: 2014-12-17 22:16:47
Message-ID: 87tx0tudkg.fsf () schwinge ! name
[Download RAW message or body]
Hi!
On Wed, 10 Dec 2014 10:59:34 +0100, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Dec 10, 2014 at 10:54:13AM +0100, Thomas Schwinge wrote:
> > --- gcc/omp-low.c
> > +++ gcc/omp-low.c
> > @@ -9404,7 +9404,9 @@ build_omp_regions_1 (basic_block bb, struct omp_region \
> > *parent, else if (code == GIMPLE_OMP_TARGET
> > && (gimple_omp_target_kind (stmt) == GF_OMP_TARGET_KIND_UPDATE
> > || (gimple_omp_target_kind (stmt)
> > - == GF_OMP_TARGET_KIND_OACC_UPDATE)))
> > + == GF_OMP_TARGET_KIND_OACC_UPDATE)
> > + || (gimple_omp_target_kind (stmt)
> > + == GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA)))
> > new_omp_region (bb, code, parent);
> > else
> > {
> > @@ -12270,7 +12272,9 @@ make_gimple_omp_edges (basic_block bb, struct omp_region \
> > **region, cur_region = new_omp_region (bb, code, cur_region);
> > fallthru = true;
> > if (gimple_omp_target_kind (last) == GF_OMP_TARGET_KIND_UPDATE
> > - || gimple_omp_target_kind (last) == GF_OMP_TARGET_KIND_OACC_UPDATE)
> > + || gimple_omp_target_kind (last) == GF_OMP_TARGET_KIND_OACC_UPDATE
> > + || (gimple_omp_target_kind (last)
> > + == GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA))
>
> I'd say that at this point a
> switch (gimple_omp_target_kind (last))
> {
> case GF_OMP_TARGET_KIND_UPDATE:
> case GF_OMP_TARGET_KIND_OACC_UPDATE:
> case GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA:
> ...
> default:
> ...
> }
> would be cleaner. The first hunk is more questionable, because there is
> else and it would require duplicating of the else body in default:, goto
> or similar, but perhaps it would be better that way too.
Thanks for the suggestion. I found a way to express the first one
differently; committed to gomp-4_0-branch in r218837:
commit c9c55fd5c318f0ed6b866930d445a3df4aa058e8
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed Dec 17 22:14:58 2014 +0000
Simplify multi-line if conditions.
gcc/
* omp-low.c (build_omp_regions_1, make_gimple_omp_edges): Simplify
multi-line if conditions.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gomp-4_0-branch@218837 \
138bc75d-0d04-0410-961f-82ee72b054a4
---
gcc/ChangeLog.gomp | 5 +++++
gcc/omp-low.c | 57 ++++++++++++++++++++++++++++++++++++++----------------
2 files changed, 45 insertions(+), 17 deletions(-)
diff --git gcc/ChangeLog.gomp gcc/ChangeLog.gomp
index 970e744..f925902 100644
--- gcc/ChangeLog.gomp
+++ gcc/ChangeLog.gomp
@@ -1,3 +1,8 @@
+2014-12-17 Thomas Schwinge <thomas@codesourcery.com>
+
+ * omp-low.c (build_omp_regions_1, make_gimple_omp_edges): Simplify
+ multi-line if conditions.
+
2014-12-10 Thomas Schwinge <thomas@codesourcery.com>
* omp-low.c (scan_omp_target): Remove taskreg_nesting_level and
diff --git gcc/omp-low.c gcc/omp-low.c
index a1fbccf..fd117dc 100644
--- gcc/omp-low.c
+++ gcc/omp-low.c
@@ -9379,7 +9379,6 @@ build_omp_regions_1 (basic_block bb, struct omp_region *parent,
region->exit = bb;
parent = parent->outer;
}
-
else if (code == GIMPLE_OMP_CONTINUE)
{
gcc_assert (parent);
@@ -9389,21 +9388,34 @@ build_omp_regions_1 (basic_block bb, struct omp_region \
*parent, {
/* GIMPLE_OMP_SECTIONS_SWITCH is part of
GIMPLE_OMP_SECTIONS, and we do nothing for it. */
- ;
}
- else if (code == GIMPLE_OMP_TARGET
- && (gimple_omp_target_kind (stmt) == GF_OMP_TARGET_KIND_UPDATE
- || (gimple_omp_target_kind (stmt)
- == GF_OMP_TARGET_KIND_OACC_UPDATE)
- || (gimple_omp_target_kind (stmt)
- == GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA)))
- new_omp_region (bb, code, parent);
else
{
- /* Otherwise, this directive becomes the parent for a new
- region. */
region = new_omp_region (bb, code, parent);
- parent = region;
+ /* Otherwise... */
+ if (code == GIMPLE_OMP_TARGET)
+ {
+ switch (gimple_omp_target_kind (stmt))
+ {
+ case GF_OMP_TARGET_KIND_REGION:
+ case GF_OMP_TARGET_KIND_DATA:
+ case GF_OMP_TARGET_KIND_OACC_PARALLEL:
+ case GF_OMP_TARGET_KIND_OACC_KERNELS:
+ case GF_OMP_TARGET_KIND_OACC_DATA:
+ break;
+ case GF_OMP_TARGET_KIND_UPDATE:
+ case GF_OMP_TARGET_KIND_OACC_UPDATE:
+ case GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA:
+ /* ..., other than for those stand-alone directives... */
+ region = NULL;
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ }
+ /* ..., this directive becomes the parent for a new region. */
+ if (region)
+ parent = region;
}
}
@@ -12259,11 +12271,22 @@ make_gimple_omp_edges (basic_block bb, struct omp_region \
**region, case GIMPLE_OMP_TARGET:
cur_region = new_omp_region (bb, code, cur_region);
fallthru = true;
- if (gimple_omp_target_kind (last) == GF_OMP_TARGET_KIND_UPDATE
- || gimple_omp_target_kind (last) == GF_OMP_TARGET_KIND_OACC_UPDATE
- || (gimple_omp_target_kind (last)
- == GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA))
- cur_region = cur_region->outer;
+ switch (gimple_omp_target_kind (last))
+ {
+ case GF_OMP_TARGET_KIND_REGION:
+ case GF_OMP_TARGET_KIND_DATA:
+ case GF_OMP_TARGET_KIND_OACC_PARALLEL:
+ case GF_OMP_TARGET_KIND_OACC_KERNELS:
+ case GF_OMP_TARGET_KIND_OACC_DATA:
+ break;
+ case GF_OMP_TARGET_KIND_UPDATE:
+ case GF_OMP_TARGET_KIND_OACC_UPDATE:
+ case GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA:
+ cur_region = cur_region->outer;
+ break;
+ default:
+ gcc_unreachable ();
+ }
break;
case GIMPLE_OMP_SECTIONS:
Grüße,
Thomas
[Attachment #3 (application/pgp-signature)]
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic