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]

RE: [Patch, testsuite] fix failure in test gcc.dg/vect/slp-perm-8.c


Richard Guenther wrote:
> On Wed, Apr 25, 2012 at 3:34 PM, Greta Yorsh <Greta.Yorsh@arm.com>
> wrote:
> > Richard Guenther wrote:
> >> On Wed, Apr 25, 2012 at 1:51 PM, Greta Yorsh <Greta.Yorsh@arm.com>
> >> wrote:
> >> > The test gcc.dg/vect/slp-perm-8.c fails on arm-none-eabi with neon
> >> enabled:
> >> > FAIL: gcc.dg/vect/slp-perm-8.c scan-tree-dump-times vect
> "vectorized
> >> 1
> >> > loops" 2
> >> >
> >> > The test expects 2 loops to be vectorized, while gcc successfully
> >> vectorizes
> >> > 3 loops in this test using neon on arm. This patch adjusts the
> >> expected
> >> > output. Fixed test passes on qemu for arm and powerpc.
> >> >
> >> > OK for trunk?
> >>
> >> I think the proper fix is to instead of
> >>
> >> ? for (i = 0; i < N; i++)
> >> ? ? {
> >> ? ? ? input[i] = i;
> >> ? ? ? output[i] = 0;
> >> ? ? ? if (input[i] > 256)
> >> ? ? ? ? abort ();
> >> ? ? }
> >>
> >> use
> >>
> >> ? for (i = 0; i < N; i++)
> >> ? ? {
> >> ? ? ? input[i] = i;
> >> ? ? ? output[i] = 0;
> >> ? ? ? __asm__ volatile ("");
> >> ? ? }
> >>
> >> to prevent vectorization of initialization loops.
> >
> > Actually, it looks like both arm and powerpc vectorize this
> initialization loop (line 31), because the control flow is hoisted
> outside the loop by previous optimizations. In addition, arm with neon
> vectorizes the second loop (line 39), but powerpc does not:
> >
> > 39: not vectorized: relevant stmt not supported: D.2163_8 = i_40 * 9;
> >
> > If this is the expected behaviour for powerpc, then the patch I
> proposed is still needed to fix the test failure on arm. Also, there
> would be no need to disable vectorization of the initialization loop,
> right?
> 
> Ah, I thought that was what changed.  Btw, the if () abort () tries to
> disable
> vectorization but does not succeed in doing so.
> 
> Richard.

Here is an updated patch. It prevents vectorization of the initialization
loop, as Richard suggested, and updates the expected number of vectorized
loops accordingly. This patch assumes that the second loop in main (line 39)
should only be vectorized on arm with neon.  The test passes for arm and
powerpc.

OK for trunk?

Thank you,
Greta

gcc/testsuite/ChangeLog

2012-04-25  Greta Yorsh  <Greta.Yorsh@arm.com>

        * gcc.dg/vect/slp-perm-8.c (main): Prevent
        vectorization of initialization loop. 
        (dg-final): Adjust the expected number of 
        vectorized loops.




Attachment: test-slp-perm-8.v3.patch.txt
Description: Text document


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