Fix unsharing of GIMPLE_OMP_{SINGLE,TARGET,TEAMS} in gimple_copy
authorTom de Vries <tom@codesourcery.com>
Thu, 26 Oct 2017 20:09:24 +0000 (20:09 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Thu, 26 Oct 2017 20:09:24 +0000 (20:09 +0000)
2017-10-26  Tom de Vries  <tom@codesourcery.com>

PR tree-optimization/82707
* gimple.c (gimple_copy): Fix unsharing of
GIMPLE_OMP_{SINGLE,TARGET,TEAMS}.

From-SVN: r254120

gcc/ChangeLog
gcc/gimple.c

index d5d32b9258ee2d2a34d107847487e468c9e09df0..791f3c169ce0bc6fe64f77538e09574385710e55 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-26  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/82707
+       * gimple.c (gimple_copy): Fix unsharing of
+       GIMPLE_OMP_{SINGLE,TARGET,TEAMS}.
+
 2017-10-26  Olga Makhotina  <olga.makhotina@intel.com>
 
        * config/i386/avx512fintrin.h (_mm512_cmpeq_pd_mask,
index 1f291e10286d4a7a9b66ca0fce84b56b2e826b74..37f2248f224de3f93535fb38d8a35332ed5c606f 100644 (file)
@@ -1840,11 +1840,35 @@ gimple_copy (gimple *stmt)
          gimple_omp_sections_set_clauses (copy, t);
          t = unshare_expr (gimple_omp_sections_control (stmt));
          gimple_omp_sections_set_control (copy, t);
-         /* FALLTHRU  */
+         goto copy_omp_body;
 
        case GIMPLE_OMP_SINGLE:
+         {
+           gomp_single *omp_single_copy = as_a <gomp_single *> (copy);
+           t = unshare_expr (gimple_omp_single_clauses (stmt));
+           gimple_omp_single_set_clauses (omp_single_copy, t);
+         }
+         goto copy_omp_body;
+
        case GIMPLE_OMP_TARGET:
+         {
+           gomp_target *omp_target_stmt = as_a <gomp_target *> (stmt);
+           gomp_target *omp_target_copy = as_a <gomp_target *> (copy);
+           t = unshare_expr (gimple_omp_target_clauses (omp_target_stmt));
+           gimple_omp_target_set_clauses (omp_target_copy, t);
+           t = unshare_expr (gimple_omp_target_data_arg (omp_target_stmt));
+           gimple_omp_target_set_data_arg (omp_target_copy, t);
+         }
+         goto copy_omp_body;
+
        case GIMPLE_OMP_TEAMS:
+         {
+           gomp_teams *omp_teams_copy = as_a <gomp_teams *> (copy);
+           t = unshare_expr (gimple_omp_teams_clauses (stmt));
+           gimple_omp_teams_set_clauses (omp_teams_copy, t);
+         }
+         /* FALLTHRU  */
+
        case GIMPLE_OMP_SECTION:
        case GIMPLE_OMP_MASTER:
        case GIMPLE_OMP_TASKGROUP: