Hi! This patch fixes two issues I found on the pr58392.c testcase: 1) we weren't copying decl attributes, so e.g. inside #pragma omp parallel "omp simd array" temporary arrays lost their attribute and weren't adjusted because of that 2) DR_ALIGNED_TO wasn't reset after resetting DR_OFFSET on simd lane access DRs, which resulted in the vectorizer trying to peel for alignment on those. Those are always automatic vars that can be just aligned more.
Ok? 2013-09-16 Jakub Jelinek <ja...@redhat.com> * omp-low.c (copy_var_decl): Copy DECL_ATTRIBUTES. * tree-vect-data-refs.c (vect_analyze_data_refs): For simd_lane_access drs, update also DR_ALIGNED_TO. --- gcc/omp-low.c.jj 2013-09-16 10:08:43.000000000 +0200 +++ gcc/omp-low.c 2013-09-16 15:25:31.683903448 +0200 @@ -888,6 +888,7 @@ copy_var_decl (tree var, tree name, tree TREE_NO_WARNING (copy) = TREE_NO_WARNING (var); TREE_USED (copy) = 1; DECL_SEEN_IN_BIND_EXPR_P (copy) = 1; + DECL_ATTRIBUTES (copy) = DECL_ATTRIBUTES (var); return copy; } --- gcc/tree-vect-data-refs.c.jj 2013-09-13 16:48:28.000000000 +0200 +++ gcc/tree-vect-data-refs.c 2013-09-16 14:47:56.500538758 +0200 @@ -3039,6 +3039,9 @@ again: { DR_OFFSET (newdr) = ssize_int (0); DR_STEP (newdr) = step; + DR_ALIGNED_TO (newdr) + = size_int (highest_pow2_factor + (DR_OFFSET (newdr))); dr = newdr; simd_lane_access = true; } Jakub