omp-low.c (struct omp_context): Rename combined_into_simd_safelen0 member to combined...
authorJakub Jelinek <jakub@redhat.com>
Sat, 6 Jul 2019 21:56:46 +0000 (23:56 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sat, 6 Jul 2019 21:56:46 +0000 (23:56 +0200)
* omp-low.c (struct omp_context): Rename combined_into_simd_safelen0
member to combined_into_simd_safelen1.
(lower_rec_input_clauses, lower_omp_1): Adjust uses.
(lower_lastprivate_clauses): Likewise.  For conditional lastprivate
clauses if ctx->combined_into_simd_safelen1 put statements after the
predicate conditionalized block rather than into it.

From-SVN: r273168

gcc/ChangeLog
gcc/omp-low.c

index 3694a7716f84ea26532bc25526b226fec9caadd1..ae3fbe40e7b215d27e8fcfb1b90e16c9a0a7e4d3 100644 (file)
@@ -1,3 +1,12 @@
+2019-07-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * omp-low.c (struct omp_context): Rename combined_into_simd_safelen0
+       member to combined_into_simd_safelen1.
+       (lower_rec_input_clauses, lower_omp_1): Adjust uses.
+       (lower_lastprivate_clauses): Likewise.  For conditional lastprivate
+       clauses if ctx->combined_into_simd_safelen1 put statements after the
+       predicate conditionalized block rather than into it.
+
 2019-07-06  Richard Sandiford  <richard.sandiford@arm.com>
 
        * config/s390/s390.md (*negabs<FP:mode>2_nocc): Use FP for
index 5d5fb6a8eb2889abd61a50c16ed9c632d5599fc5..b687fe1125b3d888dbcc2f94a5b4f0cad235563d 100644 (file)
@@ -140,7 +140,7 @@ struct omp_context
 
   /* True if lower_omp_1 should look up lastprivate conditional in parent
      context.  */
-  bool combined_into_simd_safelen0;
+  bool combined_into_simd_safelen1;
 
   /* True if there is nested scan context with inclusive clause.  */
   bool scan_inclusive;
@@ -5703,7 +5703,7 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
          if (gimple_omp_for_combined_into_p (ctx->stmt))
            {
              /* Signal to lower_omp_1 that it should use parent context.  */
-             ctx->combined_into_simd_safelen0 = true;
+             ctx->combined_into_simd_safelen1 = true;
              for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
                if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
                    && OMP_CLAUSE_LASTPRIVATE_CONDITIONAL (c))
@@ -6018,6 +6018,7 @@ lower_lastprivate_clauses (tree clauses, tree predicate, gimple_seq *body_p,
   bool par_clauses = false;
   tree simduid = NULL, lastlane = NULL, simtcond = NULL, simtlast = NULL;
   unsigned HOST_WIDE_INT conditional_off = 0;
+  gimple_seq post_stmt_list = NULL;
 
   /* Early exit if there are no lastprivate or linear clauses.  */
   for (; clauses ; clauses = OMP_CLAUSE_CHAIN (clauses))
@@ -6107,7 +6108,7 @@ lower_lastprivate_clauses (tree clauses, tree predicate, gimple_seq *body_p,
       if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
          && OMP_CLAUSE_LASTPRIVATE_CONDITIONAL (c)
          && ctx->lastprivate_conditional_map
-         && !ctx->combined_into_simd_safelen0)
+         && !ctx->combined_into_simd_safelen1)
        {
          gcc_assert (body_p);
          if (simduid)
@@ -6144,6 +6145,12 @@ lower_lastprivate_clauses (tree clauses, tree predicate, gimple_seq *body_p,
          gimple_seq_add_stmt (this_stmt_list, gimple_build_label (lab1));
          gimplify_assign (mem2, v, this_stmt_list);
        }
+      else if (predicate
+              && ctx->combined_into_simd_safelen1
+              && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
+              && OMP_CLAUSE_LASTPRIVATE_CONDITIONAL (c)
+              && ctx->lastprivate_conditional_map)
+       this_stmt_list = &post_stmt_list;
 
       if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
          || (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
@@ -6274,6 +6281,7 @@ lower_lastprivate_clauses (tree clauses, tree predicate, gimple_seq *body_p,
 
   if (label)
     gimple_seq_add_stmt (stmt_list, gimple_build_label (label));
+  gimple_seq_add_seq (stmt_list, post_stmt_list);
 }
 
 /* Lower the OpenACC reductions of CLAUSES for compute axis LEVEL
@@ -12412,7 +12420,7 @@ lower_omp_1 (gimple_stmt_iterator *gsi_p, omp_context *ctx)
            if (tree *v = up->lastprivate_conditional_map->get (lhs))
              {
                tree clauses;
-               if (up->combined_into_simd_safelen0)
+               if (up->combined_into_simd_safelen1)
                  up = up->outer;
                if (gimple_code (up->stmt) == GIMPLE_OMP_FOR)
                  clauses = gimple_omp_for_clauses (up->stmt);