diff mbox

[committed] Fix alignment for OpenMP mapped array sections with non-zero bias (PR middle-end/63247)

Message ID 20140929052705.GY17454@tucnak.redhat.com
State New
Headers show

Commit Message

Jakub Jelinek Sept. 29, 2014, 5:27 a.m. UTC
Hi!

For OMP_CLAUSE_MAP_POINTER on arrays (rather than pointers), when the
bias is non-zero, we pass map those as a pointer mapping, so need
to request alignment of the pointer variable rather than the array
itself.

Fixed thusly, bootstrapped/tested on x86_64-linux and i686-linux,
committed to trunk/4.9.

2014-09-29  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/63247
	* omp-low.c (lower_omp_target): For OMP_CLAUSE_MAP_POINTER
	of ARRAY_TYPE, if not OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION
	use the alignment of avar rather than ovar.


	Jakub
diff mbox

Patch

--- gcc/omp-low.c.jj	2014-09-22 12:13:21.000000000 +0200
+++ gcc/omp-low.c	2014-09-26 11:40:20.185658337 +0200
@@ -10117,6 +10117,9 @@  lower_omp_target (gimple_stmt_iterator *
 		  continue;
 	      }
 
+	    unsigned int talign = TYPE_ALIGN_UNIT (TREE_TYPE (ovar));
+	    if (DECL_P (ovar) && DECL_ALIGN_UNIT (ovar) > talign)
+	      talign = DECL_ALIGN_UNIT (ovar);
 	    if (nc)
 	      {
 		tree var = lookup_decl_in_outer_ctx (ovar, ctx);
@@ -10131,6 +10134,7 @@  lower_omp_target (gimple_stmt_iterator *
 		      = create_tmp_var (TREE_TYPE (TREE_TYPE (x)), NULL);
 		    mark_addressable (avar);
 		    gimplify_assign (avar, build_fold_addr_expr (var), &ilist);
+		    talign = DECL_ALIGN_UNIT (avar);
 		    avar = build_fold_addr_expr (avar);
 		    gimplify_assign (x, avar, &ilist);
 		  }
@@ -10183,9 +10187,6 @@  lower_omp_target (gimple_stmt_iterator *
 	      default:
 		gcc_unreachable ();
 	      }
-	    unsigned int talign = TYPE_ALIGN_UNIT (TREE_TYPE (ovar));
-	    if (DECL_P (ovar) && DECL_ALIGN_UNIT (ovar) > talign)
-	      talign = DECL_ALIGN_UNIT (ovar);
 	    talign = ceil_log2 (talign);
 	    tkind |= talign << 3;
 	    CONSTRUCTOR_APPEND_ELT (vkind, purpose,