This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR tree-optimization/53636 (SLP generates invalid misaligned access)
Richard Guenther writes:
> On Fri, Jun 15, 2012 at 5:00 PM, Ulrich Weigand <uweigand@de.ibm.com> wrote:
> > Richard Guenther wrote:
> >> On Fri, Jun 15, 2012 at 3:13 PM, Ulrich Weigand <uweigand@de.ibm.com> wrote:
> >> > However, there is a second case where we need to check every pass: if
> >> > we're not actually vectorizing any loop, but are performing basic-block
> >> > SLP. ?In this case, it would appear that we need the same check as
> >> > described in the comment above, i.e. to verify that the stride is a
> >> > multiple of the vector size.
> >> >
> >> > The patch below adds this check, and this indeed fixes the invalid access
> >> > I was seeing in the test case (in the final assembler, we now get a
> >> > vld1.16 instead of vldr).
> >> >
> >> > Tested on arm-linux-gnueabi with no regressions.
> >> >
> >> > OK for mainline?
> >>
> >> Ok.
> >
> > Thanks for the quick review; I've checked this in to mainline now.
> >
> > I just noticed that the test case also crashes on 4.7, but not on 4.6.
> >
> > Would a backport to 4.7 also be OK, once testing passes?
>
> Yes. Please leave it on mainline a few days to catch fallout from
> autotesters.
This patch caused
FAIL: gcc.dg/vect/bb-slp-16.c scan-tree-dump-times slp "basic block vectorized using SLP" 1
on sparc64-linux. Comparing the pre and post patch dumps for that file shows
22: vect_compute_data_ref_alignment:
22: misalign = 4 bytes of ref MEM[(unsigned int *)pout_90 + 28B]
22: vect_compute_data_ref_alignment:
-22: force alignment of arr[i_87]
-22: misalign = 0 bytes of ref arr[i_87]
+22: SLP: step doesn't divide the vector-size.
+22: Unknown alignment for access: arr
(lots of stuff that's simply gone)
-22: BASIC BLOCK VECTORIZED
-
-22: basic block vectorized using SLP
+22: not vectorized: unsupported unaligned store.arr[i_87]
+22: not vectorized: unsupported alignment in basic block.
/Mikael