Hi!

On Thu, 30 Oct 2014 17:11:04 -0700, Cesar Philippidis <ce...@codesourcery.com> 
wrote:
> This patch add support for OpenACC's enter/exit data directive. [...]

>       gcc/
>       * gimple.h (enum gf_mask): Add GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA.

In r218567, I committed the following to gomp-4_0-branch:

commit 86724db93ad780106102573f2cfadd6f884e8650
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Wed Dec 10 09:52:14 2014 +0000

    Fix OpenACC enter/exit data ICE.
    
        [...]: In function 'f_acc_data':
        [...]:4:1: internal compiler error: in expand_gimple_stmt_1, at 
cfgexpand.c:3413
         f_acc_data (void)
         ^
        0x70cad3 expand_gimple_stmt_1
                [...]/source-gcc/gcc/cfgexpand.c:3413
        0x70cad3 expand_gimple_stmt
                [...]/source-gcc/gcc/cfgexpand.c:3440
        0x712b3d expand_gimple_basic_block
                [...]/source-gcc/gcc/cfgexpand.c:5273
        0x71479e execute
                [...]/source-gcc/gcc/cfgexpand.c:5882
    
        gcc/
        * 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.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gomp-4_0-branch@218567 
138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog.gomp                           |  7 +++++++
 gcc/omp-low.c                                |  8 ++++++--
 gcc/testsuite/c-c++-common/goacc/nesting-2.c | 11 +++++++++++
 3 files changed, 24 insertions(+), 2 deletions(-)

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  <tho...@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  <ce...@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)
+  }
+}


Grüße,
 Thomas

Attachment: signature.asc
Description: PGP signature

Reply via email to