> -----Original Message----- > From: Richard Guenther [mailto:richard.guent...@gmail.com] > Sent: 25 April 2012 15:32 > To: Greta Yorsh > Cc: gcc-patches@gcc.gnu.org; mikest...@comcast.net; r...@cebitec.uni- > bielefeld.de; Richard Earnshaw > Subject: Re: [Patch, testsuite] fix failure in test gcc.dg/vect/slp- > perm-8.c > > On Wed, Apr 25, 2012 at 4:27 PM, Greta Yorsh <greta.yo...@arm.com> > wrote: > > Richard Guenther wrote: > >> On Wed, Apr 25, 2012 at 3:34 PM, Greta Yorsh <greta.yo...@arm.com> > >> wrote: > >> > Richard Guenther wrote: > >> >> On Wed, Apr 25, 2012 at 1:51 PM, Greta Yorsh > <greta.yo...@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? > > If arm cannot handle 9 * i then the approrpiate condition would be > vect_int_mult, not arm_neon_ok.
It's the other way around: arm can handle this multiplication, but powerpc does not handle it for some reason. Thank you, Greta > > Ok with that change. > > Richard. > > > Thank you, > > Greta > > > > gcc/testsuite/ChangeLog > > > > 2012-04-25 Greta Yorsh <greta.yo...@arm.com> > > > > * gcc.dg/vect/slp-perm-8.c (main): Prevent > > vectorization of initialization loop. > > (dg-final): Adjust the expected number of > > vectorized loops. > > > > > > > >