Message ID | 871to796ey.fsf@kepler.schwinge.homeip.net |
---|---|
State | New |
Headers | show |
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. Jakub
diff --git gcc/ChangeLog.gomp gcc/ChangeLog.gomp index af59ada..bece7c1 100644 --- gcc/ChangeLog.gomp +++ gcc/ChangeLog.gomp @@ -1,3 +1,10 @@ +2014-12-10 Thomas Schwinge <thomas@codesourcery.com> + + * omp-low.c (build_omp_regions_1, make_gimple_omp_edges) + <GIMPLE_OMP_TARGET>: Handle + GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA the same as + GF_OMP_TARGET_KIND_OACC_UPDATE. + 2014-11-13 Cesar Philippidis <cesar@codesourcery.com> * omp-low.c (oacc_get_reduction_array_id): Fix whitespace. diff --git gcc/omp-low.c gcc/omp-low.c index 9af3b8a..6fed38f 100644 --- 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)) cur_region = cur_region->outer; break; diff --git gcc/testsuite/c-c++-common/goacc/nesting-2.c gcc/testsuite/c-c++-common/goacc/nesting-2.c new file mode 100644 index 0000000..0d350c6 --- /dev/null +++ gcc/testsuite/c-c++-common/goacc/nesting-2.c @@ -0,0 +1,11 @@ +int i; + +void +f_acc_data (void) +{ +#pragma acc data + { +#pragma acc update host(i) +#pragma acc enter data copyin(i) + } +}