This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[committed] Fix up omp for simd lastprivate (conditional:...) simdlen(1) handling


Hi!

It isn't entirely clear to me why all the tests in the testsuite happen to
pass, but in the simdlen(1)/if(simd:0) for simd loops lastprivate
conditional variables private in the simd need to be copied to the private
variables in the worksharing loop unconditionally at the end of the simd
loop, not only at the end of simd loop which ran the last iteration.

FIxed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
committed to trunk.

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.

--- gcc/omp-low.c.jj	2019-07-06 09:51:48.363290048 +0200
+++ gcc/omp-low.c	2019-07-06 16:48:02.373495843 +0200
@@ -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, g
 	  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,
   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,
       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,
 	  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,
 
   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
 	    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);

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]