From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7219 invoked by alias); 15 Apr 2011 12:41:34 -0000 Received: (qmail 7205 invoked by uid 22791); 15 Apr 2011 12:41:31 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,TW_TM,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-ww0-f51.google.com (HELO mail-ww0-f51.google.com) (74.125.82.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 15 Apr 2011 12:41:23 +0000 Received: by wwf26 with SMTP id 26so3040529wwf.8 for ; Fri, 15 Apr 2011 05:41:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.227.169.140 with SMTP id z12mr2056371wby.89.1302871281907; Fri, 15 Apr 2011 05:41:21 -0700 (PDT) Received: by 10.227.0.140 with HTTP; Fri, 15 Apr 2011 05:41:21 -0700 (PDT) In-Reply-To: References: Date: Fri, 15 Apr 2011 12:44:00 -0000 Message-ID: Subject: Re: [8/9] Testsuite: split tests for strided accesses From: Richard Guenther To: gcc-patches@gcc.gnu.org, patches@lianro.org, richard.sandiford@linaro.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-04/txt/msg01176.txt.bz2 On Tue, Apr 12, 2011 at 4:19 PM, Richard Sandiford wrote: > The next patch introduces separate vect_stridedN target selectors > for each tested stride factor N. =A0At the moment, some tests contain > several independent loops that have different stride factors. > It's easier to make the next change if we put these loops into > separate tests. > > Tested on x86_64-linux-gnu and arm-linux-gnueabi. =A0OK to install? Ok. Thanks, Richard. > Richard > > > gcc/testsuite/ > =A0 =A0 =A0 =A0* gcc.dg/vect/slp-11.c: Split into... > =A0 =A0 =A0 =A0* gcc.dg/vect/slp-11a.c, gcc.dg/vect/slp-11b.c, > =A0 =A0 =A0 =A0gcc.dg/vect/slp-11c.c: ...these tests. > =A0 =A0 =A0 =A0* gcc.dg/vect/slp-12a.c: Split 4-stride loop into... > =A0 =A0 =A0 =A0* gcc.dg/vect/slp-12c.c: ...this new test. > =A0 =A0 =A0 =A0* gcc.dg/vect/slp-19.c: Split into... > =A0 =A0 =A0 =A0* gcc.dg/vect/slp-19a.c, gcc.dg/vect/slp-19b.c, > =A0 =A0 =A0 =A0gcc.dg/vect/slp-19c.c: ...these new tests. > > Index: gcc/testsuite/gcc.dg/vect/slp-11.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- gcc/testsuite/gcc.dg/vect/slp-11.c =A02011-04-12 15:18:24.000000000 += 0100 > +++ /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > @@ -1,113 +0,0 @@ > -/* { dg-require-effective-target vect_int } */ > - > -#include > -#include "tree-vect.h" > - > -#define N 8 > - > -int > -main1 () > -{ > - =A0int i; > - =A0unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b= 3, b4, b5, b6, b7; > - =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; > - =A0float out2[N*8]; > - > - =A0/* Different operations - not SLPable. =A0*/ > - =A0for (i =3D 0; i < N; i++) > - =A0 =A0{ > - =A0 =A0 =A0a0 =3D in[i*8] + 5; > - =A0 =A0 =A0a1 =3D in[i*8 + 1] * 6; > - =A0 =A0 =A0a2 =3D in[i*8 + 2] + 7; > - =A0 =A0 =A0a3 =3D in[i*8 + 3] + 8; > - =A0 =A0 =A0a4 =3D in[i*8 + 4] + 9; > - =A0 =A0 =A0a5 =3D in[i*8 + 5] + 10; > - =A0 =A0 =A0a6 =3D in[i*8 + 6] + 11; > - =A0 =A0 =A0a7 =3D in[i*8 + 7] + 12; > - > - =A0 =A0 =A0b0 =3D a0 * 3; > - =A0 =A0 =A0b1 =3D a1 * 2; > - =A0 =A0 =A0b2 =3D a2 * 12; > - =A0 =A0 =A0b3 =3D a3 * 5; > - =A0 =A0 =A0b4 =3D a4 * 8; > - =A0 =A0 =A0b5 =3D a5 * 4; > - =A0 =A0 =A0b6 =3D a6 * 3; > - =A0 =A0 =A0b7 =3D a7 * 2; > - > - =A0 =A0 =A0out[i*8] =3D b0 - 2; > - =A0 =A0 =A0out[i*8 + 1] =3D b1 - 3; > - =A0 =A0 =A0out[i*8 + 2] =3D b2 - 2; > - =A0 =A0 =A0out[i*8 + 3] =3D b3 - 1; > - =A0 =A0 =A0out[i*8 + 4] =3D b4 - 8; > - =A0 =A0 =A0out[i*8 + 5] =3D b5 - 7; > - =A0 =A0 =A0out[i*8 + 6] =3D b6 - 3; > - =A0 =A0 =A0out[i*8 + 7] =3D b7 - 7; > - =A0 =A0} > - > - =A0/* check results: =A0*/ > - =A0for (i =3D 0; i < N; i++) > - =A0 =A0{ > - =A0 =A0 =A0if (out[i*8] !=3D =A0(in[i*8] + 5) * 3 - 2 > - =A0 =A0 =A0 =A0 || out[i*8 + 1] !=3D (in[i*8 + 1] * 6) * 2 - 3 > - =A0 =A0 =A0 =A0 || out[i*8 + 2] !=3D (in[i*8 + 2] + 7) * 12 - 2 > - =A0 =A0 =A0 =A0 || out[i*8 + 3] !=3D (in[i*8 + 3] + 8) * 5 - 1 > - =A0 =A0 =A0 =A0 || out[i*8 + 4] !=3D (in[i*8 + 4] + 9) * 8 - 8 > - =A0 =A0 =A0 =A0 || out[i*8 + 5] !=3D (in[i*8 + 5] + 10) * 4 - 7 > - =A0 =A0 =A0 =A0 || out[i*8 + 6] !=3D (in[i*8 + 6] + 11) * 3 - 3 > - =A0 =A0 =A0 =A0 || out[i*8 + 7] !=3D (in[i*8 + 7] + 12) * 2 - 7) > - =A0 =A0 =A0 abort (); > - =A0 =A0} > - > - =A0/* Requires permutation - not SLPable. =A0*/ > - =A0for (i =3D 0; i < N*2; i++) > - =A0 =A0{ > - =A0 =A0 =A0out[i*4] =3D (in[i*4] + 2) * 3; > - =A0 =A0 =A0out[i*4 + 1] =3D (in[i*4 + 2] + 2) * 7; > - =A0 =A0 =A0out[i*4 + 2] =3D (in[i*4 + 1] + 7) * 3; > - =A0 =A0 =A0out[i*4 + 3] =3D (in[i*4 + 3] + 3) * 4; > - =A0 =A0} > - > - =A0/* check results: =A0*/ > - =A0for (i =3D 0; i < N*2; i++) > - =A0 =A0{ > - =A0 =A0 =A0if (out[i*4] !=3D =A0(in[i*4] + 2) * 3 > - =A0 =A0 =A0 =A0 || out[i*4 + 1] !=3D (in[i*4 + 2] + 2) * 7 > - =A0 =A0 =A0 =A0 || out[i*4 + 2] !=3D (in[i*4 + 1] + 7) * 3 > - =A0 =A0 =A0 =A0 || out[i*4 + 3] !=3D (in[i*4 + 3] + 3) * 4) > - =A0 =A0 =A0 =A0abort (); > - =A0 =A0} > - > - =A0/* Different operations - not SLPable. =A0*/ > - =A0for (i =3D 0; i < N*4; i++) > - =A0 =A0{ > - =A0 =A0 =A0out2[i*2] =3D ((float) in[i*2] * 2 + 6) ; > - =A0 =A0 =A0out2[i*2 + 1] =3D (float) (in[i*2 + 1] * 3 + 7); > - =A0 =A0} > - > - =A0/* check results: =A0*/ > - =A0for (i =3D 0; i < N*4; i++) > - =A0 =A0{ > - =A0 =A0 =A0if (out2[i*2] !=3D =A0((float) in[i*2] * 2 + 6) > - =A0 =A0 =A0 =A0 || out2[i*2 + 1] !=3D (float) (in[i*2 + 1] * 3 + 7)) > - =A0 =A0 =A0 =A0abort (); > - =A0 =A0} > - > - > - =A0return 0; > -} > - > -int main (void) > -{ > - =A0check_vect (); > - > - =A0main1 (); > - > - =A0return 0; > -} > - > -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" =A0{ = target { { vect_uintfloat_cvt && vect_strided } && =A0vect_int_mult } } } }= */ > -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" =A0{ = target { { { ! vect_uintfloat_cvt } && vect_strided } && =A0vect_int_mult }= } } } */ > -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" =A0{t= arget =A0{ ! { vect_int_mult && vect_strided } } } } } =A0*/ > -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 =A0= "vect" =A0} } */ > -/* { dg-final { cleanup-tree-dump "vect" } } */ > - > Index: gcc/testsuite/gcc.dg/vect/slp-11a.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > +++ gcc/testsuite/gcc.dg/vect/slp-11a.c 2011-04-12 15:18:25.000000000 +01= 00 > @@ -0,0 +1,75 @@ > +/* { dg-require-effective-target vect_int } */ > + > +#include > +#include "tree-vect.h" > + > +#define N 8 > + > +int > +main1 () > +{ > + =A0int i; > + =A0unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b= 3, b4, b5, b6, b7; > + =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; > + > + =A0/* Different operations - not SLPable. =A0*/ > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0{ > + =A0 =A0 =A0a0 =3D in[i*8] + 5; > + =A0 =A0 =A0a1 =3D in[i*8 + 1] * 6; > + =A0 =A0 =A0a2 =3D in[i*8 + 2] + 7; > + =A0 =A0 =A0a3 =3D in[i*8 + 3] + 8; > + =A0 =A0 =A0a4 =3D in[i*8 + 4] + 9; > + =A0 =A0 =A0a5 =3D in[i*8 + 5] + 10; > + =A0 =A0 =A0a6 =3D in[i*8 + 6] + 11; > + =A0 =A0 =A0a7 =3D in[i*8 + 7] + 12; > + > + =A0 =A0 =A0b0 =3D a0 * 3; > + =A0 =A0 =A0b1 =3D a1 * 2; > + =A0 =A0 =A0b2 =3D a2 * 12; > + =A0 =A0 =A0b3 =3D a3 * 5; > + =A0 =A0 =A0b4 =3D a4 * 8; > + =A0 =A0 =A0b5 =3D a5 * 4; > + =A0 =A0 =A0b6 =3D a6 * 3; > + =A0 =A0 =A0b7 =3D a7 * 2; > + > + =A0 =A0 =A0out[i*8] =3D b0 - 2; > + =A0 =A0 =A0out[i*8 + 1] =3D b1 - 3; > + =A0 =A0 =A0out[i*8 + 2] =3D b2 - 2; > + =A0 =A0 =A0out[i*8 + 3] =3D b3 - 1; > + =A0 =A0 =A0out[i*8 + 4] =3D b4 - 8; > + =A0 =A0 =A0out[i*8 + 5] =3D b5 - 7; > + =A0 =A0 =A0out[i*8 + 6] =3D b6 - 3; > + =A0 =A0 =A0out[i*8 + 7] =3D b7 - 7; > + =A0 =A0} > + > + =A0/* check results: =A0*/ > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0{ > + =A0 =A0 =A0if (out[i*8] !=3D =A0(in[i*8] + 5) * 3 - 2 > + =A0 =A0 =A0 =A0 || out[i*8 + 1] !=3D (in[i*8 + 1] * 6) * 2 - 3 > + =A0 =A0 =A0 =A0 || out[i*8 + 2] !=3D (in[i*8 + 2] + 7) * 12 - 2 > + =A0 =A0 =A0 =A0 || out[i*8 + 3] !=3D (in[i*8 + 3] + 8) * 5 - 1 > + =A0 =A0 =A0 =A0 || out[i*8 + 4] !=3D (in[i*8 + 4] + 9) * 8 - 8 > + =A0 =A0 =A0 =A0 || out[i*8 + 5] !=3D (in[i*8 + 5] + 10) * 4 - 7 > + =A0 =A0 =A0 =A0 || out[i*8 + 6] !=3D (in[i*8 + 6] + 11) * 3 - 3 > + =A0 =A0 =A0 =A0 || out[i*8 + 7] !=3D (in[i*8 + 7] + 12) * 2 - 7) > + =A0 =A0 =A0 abort (); > + =A0 =A0} > + > + =A0return 0; > +} > + > +int main (void) > +{ > + =A0check_vect (); > + > + =A0main1 (); > + > + =A0return 0; > +} > + > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { tar= get { vect_strided && vect_int_mult } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { tar= get { ! { vect_strided && vect_int_mult } } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "ve= ct" } } */ > +/* { dg-final { cleanup-tree-dump "vect" } } */ > Index: gcc/testsuite/gcc.dg/vect/slp-11b.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > +++ gcc/testsuite/gcc.dg/vect/slp-11b.c 2011-04-12 15:18:25.000000000 +01= 00 > @@ -0,0 +1,49 @@ > +/* { dg-require-effective-target vect_int } */ > + > +#include > +#include "tree-vect.h" > + > +#define N 8 > + > +int > +main1 () > +{ > + =A0int i; > + =A0unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b= 3, b4, b5, b6, b7; > + =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; > + > + =A0/* Requires permutation - not SLPable. =A0*/ > + =A0for (i =3D 0; i < N*2; i++) > + =A0 =A0{ > + =A0 =A0 =A0out[i*4] =3D (in[i*4] + 2) * 3; > + =A0 =A0 =A0out[i*4 + 1] =3D (in[i*4 + 2] + 2) * 7; > + =A0 =A0 =A0out[i*4 + 2] =3D (in[i*4 + 1] + 7) * 3; > + =A0 =A0 =A0out[i*4 + 3] =3D (in[i*4 + 3] + 3) * 4; > + =A0 =A0} > + > + =A0/* check results: =A0*/ > + =A0for (i =3D 0; i < N*2; i++) > + =A0 =A0{ > + =A0 =A0 =A0if (out[i*4] !=3D =A0(in[i*4] + 2) * 3 > + =A0 =A0 =A0 =A0 || out[i*4 + 1] !=3D (in[i*4 + 2] + 2) * 7 > + =A0 =A0 =A0 =A0 || out[i*4 + 2] !=3D (in[i*4 + 1] + 7) * 3 > + =A0 =A0 =A0 =A0 || out[i*4 + 3] !=3D (in[i*4 + 3] + 3) * 4) > + =A0 =A0 =A0 =A0abort (); > + =A0 =A0} > + > + =A0return 0; > +} > + > +int main (void) > +{ > + =A0check_vect (); > + > + =A0main1 (); > + > + =A0return 0; > +} > + > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { tar= get { vect_strided && vect_int_mult } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { tar= get { ! { vect_strided && vect_int_mult } } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "ve= ct" } } */ > +/* { dg-final { cleanup-tree-dump "vect" } } */ > Index: gcc/testsuite/gcc.dg/vect/slp-11c.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > +++ gcc/testsuite/gcc.dg/vect/slp-11c.c 2011-04-12 15:18:25.000000000 +01= 00 > @@ -0,0 +1,46 @@ > +/* { dg-require-effective-target vect_int } */ > + > +#include > +#include "tree-vect.h" > + > +#define N 8 > + > +int > +main1 () > +{ > + =A0int i; > + =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; > + =A0float out[N*8]; > + > + =A0/* Different operations - not SLPable. =A0*/ > + =A0for (i =3D 0; i < N*4; i++) > + =A0 =A0{ > + =A0 =A0 =A0out[i*2] =3D ((float) in[i*2] * 2 + 6) ; > + =A0 =A0 =A0out[i*2 + 1] =3D (float) (in[i*2 + 1] * 3 + 7); > + =A0 =A0} > + > + =A0/* check results: =A0*/ > + =A0for (i =3D 0; i < N*4; i++) > + =A0 =A0{ > + =A0 =A0 =A0if (out[i*2] !=3D =A0((float) in[i*2] * 2 + 6) > + =A0 =A0 =A0 =A0 || out[i*2 + 1] !=3D (float) (in[i*2 + 1] * 3 + 7)) > + =A0 =A0 =A0 =A0abort (); > + =A0 =A0} > + > + > + =A0return 0; > +} > + > +int main (void) > +{ > + =A0check_vect (); > + > + =A0main1 (); > + > + =A0return 0; > +} > + > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { tar= get { { vect_uintfloat_cvt && vect_strided } && vect_int_mult } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { tar= get { ! { { vect_uintfloat_cvt && vect_strided } && vect_int_mult } } } } }= */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 =A0= "vect" =A0} } */ > +/* { dg-final { cleanup-tree-dump "vect" } } */ > Index: gcc/testsuite/gcc.dg/vect/slp-12a.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- gcc/testsuite/gcc.dg/vect/slp-12a.c 2011-04-12 15:18:24.000000000 +01= 00 > +++ gcc/testsuite/gcc.dg/vect/slp-12a.c 2011-04-12 15:18:25.000000000 +01= 00 > @@ -11,7 +11,7 @@ main1 () > =A0 int i; > =A0 unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3= , b4, b5, b6, b7; > =A0 unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17= ,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42= ,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; > - =A0unsigned int ia[N], ib[N*2]; > + =A0unsigned int ia[N]; > > =A0 for (i =3D 0; i < N; i++) > =A0 =A0 { > @@ -61,27 +61,6 @@ main1 () > =A0 =A0 =A0 =A0abort (); > =A0 =A0 } > > - =A0for (i =3D 0; i < N*2; i++) > - =A0 =A0{ > - =A0 =A0 =A0out[i*4] =3D (in[i*4] + 2) * 3; > - =A0 =A0 =A0out[i*4 + 1] =3D (in[i*4 + 1] + 2) * 7; > - =A0 =A0 =A0out[i*4 + 2] =3D (in[i*4 + 2] + 7) * 3; > - =A0 =A0 =A0out[i*4 + 3] =3D (in[i*4 + 3] + 7) * 7; > - > - =A0 =A0 =A0ib[i] =3D 7; > - =A0 =A0} > - > - =A0/* check results: =A0*/ > - =A0for (i =3D 0; i < N*2; i++) > - =A0 =A0{ > - =A0 =A0 =A0if (out[i*4] !=3D =A0(in[i*4] + 2) * 3 > - =A0 =A0 =A0 =A0 || out[i*4 + 1] !=3D (in[i*4 + 1] + 2) * 7 > - =A0 =A0 =A0 =A0 || out[i*4 + 2] !=3D (in[i*4 + 2] + 7) * 3 > - =A0 =A0 =A0 =A0 || out[i*4 + 3] !=3D (in[i*4 + 3] + 7) * 7 > - =A0 =A0 =A0 =A0 || ib[i] !=3D 7) > - =A0 =A0 =A0 =A0abort (); > - =A0 =A0} > - > =A0 return 0; > =A0} > > @@ -94,11 +73,8 @@ int main (void) > =A0 return 0; > =A0} > > -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" =A0{t= arget { vect_strided && vect_int_mult} } } } */ > -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" =A0{t= arget { {! {vect_strided}} && vect_int_mult } } } } */ > -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" =A0{t= arget =A0{ ! vect_int_mult } } } } */ > -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "ve= ct" {target { vect_strided && vect_int_mult } } } } */ > -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "ve= ct" {target { {! {vect_strided}} && vect_int_mult } } } } */ > -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "ve= ct" {target =A0{ ! vect_int_mult } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { tar= get { vect_strided && vect_int_mult } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { tar= get { ! { vect_strided && vect_int_mult } } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "ve= ct" { target { vect_strided && vect_int_mult } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "ve= ct" { target { ! { vect_strided && vect_int_mult } } } } } */ > =A0/* { dg-final { cleanup-tree-dump "vect" } } */ > - > Index: gcc/testsuite/gcc.dg/vect/slp-12c.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > +++ gcc/testsuite/gcc.dg/vect/slp-12c.c 2011-04-12 15:18:25.000000000 +01= 00 > @@ -0,0 +1,53 @@ > +/* { dg-require-effective-target vect_int } */ > + > +#include > +#include "tree-vect.h" > + > +#define N 8 > + > +int > +main1 () > +{ > + =A0int i; > + =A0unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b= 3, b4, b5, b6, b7; > + =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; > + =A0unsigned int ia[N*2]; > + > + =A0for (i =3D 0; i < N*2; i++) > + =A0 =A0{ > + =A0 =A0 =A0out[i*4] =3D (in[i*4] + 2) * 3; > + =A0 =A0 =A0out[i*4 + 1] =3D (in[i*4 + 1] + 2) * 7; > + =A0 =A0 =A0out[i*4 + 2] =3D (in[i*4 + 2] + 7) * 3; > + =A0 =A0 =A0out[i*4 + 3] =3D (in[i*4 + 3] + 7) * 7; > + > + =A0 =A0 =A0ia[i] =3D 7; > + =A0 =A0} > + > + =A0/* check results: =A0*/ > + =A0for (i =3D 0; i < N*2; i++) > + =A0 =A0{ > + =A0 =A0 =A0if (out[i*4] !=3D =A0(in[i*4] + 2) * 3 > + =A0 =A0 =A0 =A0 || out[i*4 + 1] !=3D (in[i*4 + 1] + 2) * 7 > + =A0 =A0 =A0 =A0 || out[i*4 + 2] !=3D (in[i*4 + 2] + 7) * 3 > + =A0 =A0 =A0 =A0 || out[i*4 + 3] !=3D (in[i*4 + 3] + 7) * 7 > + =A0 =A0 =A0 =A0 || ia[i] !=3D 7) > + =A0 =A0 =A0 =A0abort (); > + =A0 =A0} > + > + =A0return 0; > +} > + > +int main (void) > +{ > + =A0check_vect (); > + > + =A0main1 (); > + > + =A0return 0; > +} > + > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" =A0{ = target { vect_int_mult } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" =A0{ = target { ! vect_int_mult } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "ve= ct" { target vect_int_mult } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "ve= ct" { target { ! vect_int_mult } } } } */ > +/* { dg-final { cleanup-tree-dump "vect" } } */ > Index: gcc/testsuite/gcc.dg/vect/slp-19.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- gcc/testsuite/gcc.dg/vect/slp-19.c =A02011-04-12 15:18:24.000000000 += 0100 > +++ /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > @@ -1,154 +0,0 @@ > -/* { dg-require-effective-target vect_int } */ > - > -#include > -#include "tree-vect.h" > - > -#define N 16 > - > -int > -main1 () > -{ > - =A0unsigned int i; > - =A0unsigned int out[N*8]; > - =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,= 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31= ,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56= ,57,58,59,60,61,62,63}; > - =A0unsigned int ia[N*2], a0, a1, a2, a3; > - > - =A0for (i =3D 0; i < N; i++) > - =A0 =A0{ > - =A0 =A0 =A0out[i*8] =3D in[i*8]; > - =A0 =A0 =A0out[i*8 + 1] =3D in[i*8 + 1]; > - =A0 =A0 =A0out[i*8 + 2] =3D in[i*8 + 2]; > - =A0 =A0 =A0out[i*8 + 3] =3D in[i*8 + 3]; > - =A0 =A0 =A0out[i*8 + 4] =3D in[i*8 + 4]; > - =A0 =A0 =A0out[i*8 + 5] =3D in[i*8 + 5]; > - =A0 =A0 =A0out[i*8 + 6] =3D in[i*8 + 6]; > - =A0 =A0 =A0out[i*8 + 7] =3D in[i*8 + 7]; > - > - =A0 =A0 =A0ia[i] =3D in[i*8 + 2]; > - =A0 =A0} > - > - =A0/* check results: =A0*/ > - =A0for (i =3D 0; i < N; i++) > - =A0 =A0{ > - =A0 =A0 =A0if (out[i*8] !=3D =A0in[i*8] > - =A0 =A0 =A0 =A0 || out[i*8 + 1] !=3D in[i*8 + 1] > - =A0 =A0 =A0 =A0 || out[i*8 + 2] !=3D in[i*8 + 2] > - =A0 =A0 =A0 =A0 || out[i*8 + 3] !=3D in[i*8 + 3] > - =A0 =A0 =A0 =A0 || out[i*8 + 4] !=3D in[i*8 + 4] > - =A0 =A0 =A0 =A0 || out[i*8 + 5] !=3D in[i*8 + 5] > - =A0 =A0 =A0 =A0 || out[i*8 + 6] !=3D in[i*8 + 6] > - =A0 =A0 =A0 =A0 || out[i*8 + 7] !=3D in[i*8 + 7] > - =A0 =A0 =A0 =A0 || ia[i] !=3D in[i*8 + 2]) > - =A0 =A0 =A0 abort (); > - =A0 =A0} > - > - =A0for (i =3D 0; i < N*2; i++) > - =A0 =A0{ > - =A0 =A0 =A0a0 =3D in[i*4] + 1; > - =A0 =A0 =A0a1 =3D in[i*4 + 1] + 2; > - =A0 =A0 =A0a2 =3D in[i*4 + 2] + 3; > - =A0 =A0 =A0a3 =3D in[i*4 + 3] + 4; > - > - =A0 =A0 =A0out[i*4] =3D a0; > - =A0 =A0 =A0out[i*4 + 1] =3D a1; > - =A0 =A0 =A0out[i*4 + 2] =3D a2; > - =A0 =A0 =A0out[i*4 + 3] =3D a3; > - > - =A0 =A0 =A0ia[i] =3D a2; > - =A0 =A0} > - > - =A0/* check results: =A0*/ > - =A0for (i =3D 0; i < N*2; i++) > - =A0 =A0{ > - =A0 =A0 =A0if (out[i*4] !=3D =A0in[i*4] + 1 > - =A0 =A0 =A0 =A0 || out[i*4 + 1] !=3D in[i*4 + 1] + 2 > - =A0 =A0 =A0 =A0 || out[i*4 + 2] !=3D in[i*4 + 2] + 3 > - =A0 =A0 =A0 =A0 || out[i*4 + 3] !=3D in[i*4 + 3] + 4 > - =A0 =A0 =A0 =A0 || ia[i] !=3D in[i*4 + 2] + 3) > - =A0 =A0 =A0 =A0abort (); > - =A0 =A0} > - > - =A0/* The last stmt requires interleaving of not power of 2 size - not > - =A0 =A0 vectorizable. =A0*/ > - =A0for (i =3D 0; i < N/2; i++) > - =A0 =A0{ > - =A0 =A0 =A0out[i*12] =3D in[i*12]; > - =A0 =A0 =A0out[i*12 + 1] =3D in[i*12 + 1]; > - =A0 =A0 =A0out[i*12 + 2] =3D in[i*12 + 2]; > - =A0 =A0 =A0out[i*12 + 3] =3D in[i*12 + 3]; > - =A0 =A0 =A0out[i*12 + 4] =3D in[i*12 + 4]; > - =A0 =A0 =A0out[i*12 + 5] =3D in[i*12 + 5]; > - =A0 =A0 =A0out[i*12 + 6] =3D in[i*12 + 6]; > - =A0 =A0 =A0out[i*12 + 7] =3D in[i*12 + 7]; > - =A0 =A0 =A0out[i*12 + 8] =3D in[i*12 + 8]; > - =A0 =A0 =A0out[i*12 + 9] =3D in[i*12 + 9]; > - =A0 =A0 =A0out[i*12 + 10] =3D in[i*12 + 10]; > - =A0 =A0 =A0out[i*12 + 11] =3D in[i*12 + 11]; > - > - =A0 =A0 =A0ia[i] =3D in[i*12 + 7]; > - =A0 =A0} > - > - =A0/* check results: =A0*/ > - =A0for (i =3D 0; i < N/2; i++) > - =A0 =A0{ > - =A0 =A0 =A0if (out[i*12] !=3D =A0in[i*12] > - =A0 =A0 =A0 =A0 || out[i*12 + 1] !=3D in[i*12 + 1] > - =A0 =A0 =A0 =A0 || out[i*12 + 2] !=3D in[i*12 + 2] > - =A0 =A0 =A0 =A0 || out[i*12 + 3] !=3D in[i*12 + 3] > - =A0 =A0 =A0 =A0 || out[i*12 + 4] !=3D in[i*12 + 4] > - =A0 =A0 =A0 =A0 || out[i*12 + 5] !=3D in[i*12 + 5] > - =A0 =A0 =A0 =A0 || out[i*12 + 6] !=3D in[i*12 + 6] > - =A0 =A0 =A0 =A0 || out[i*12 + 7] !=3D in[i*12 + 7] > - =A0 =A0 =A0 =A0 || out[i*12 + 8] !=3D in[i*12 + 8] > - =A0 =A0 =A0 =A0 || out[i*12 + 9] !=3D in[i*12 + 9] > - =A0 =A0 =A0 =A0 || out[i*12 + 10] !=3D in[i*12 + 10] > - =A0 =A0 =A0 =A0 || out[i*12 + 11] !=3D in[i*12 + 11] > - =A0 =A0 =A0 =A0 || ia[i] !=3D in[i*12 + 7]) > - =A0 =A0 =A0 =A0abort (); > - =A0 =A0} > - > - =A0/* Hybrid SLP with unrolling by 2. =A0*/ > - =A0for (i =3D 0; i < N; i++) > - =A0 =A0{ > - =A0 =A0 =A0out[i*6] =3D in[i*6]; > - =A0 =A0 =A0out[i*6 + 1] =3D in[i*6 + 1]; > - =A0 =A0 =A0out[i*6 + 2] =3D in[i*6 + 2]; > - =A0 =A0 =A0out[i*6 + 3] =3D in[i*6 + 3]; > - =A0 =A0 =A0out[i*6 + 4] =3D in[i*6 + 4]; > - =A0 =A0 =A0out[i*6 + 5] =3D in[i*6 + 5]; > - > - =A0 =A0 =A0ia[i] =3D i; > - =A0 =A0} > - > - =A0/* check results: =A0*/ > - =A0for (i =3D 0; i < N/2; i++) > - =A0 =A0{ > - =A0 =A0 =A0if (out[i*6] !=3D =A0in[i*6] > - =A0 =A0 =A0 =A0 || out[i*6 + 1] !=3D in[i*6 + 1] > - =A0 =A0 =A0 =A0 || out[i*6 + 2] !=3D in[i*6 + 2] > - =A0 =A0 =A0 =A0 || out[i*6 + 3] !=3D in[i*6 + 3] > - =A0 =A0 =A0 =A0 || out[i*6 + 4] !=3D in[i*6 + 4] > - =A0 =A0 =A0 =A0 || out[i*6 + 5] !=3D in[i*6 + 5] > - =A0 =A0 =A0 =A0 || ia[i] !=3D i) > - =A0 =A0 =A0 =A0abort (); > - =A0 =A0} > - > - > - =A0return 0; > -} > - > -int main (void) > -{ > - =A0check_vect (); > - > - =A0main1 (); > - > - =A0return 0; > -} > - > -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { tar= get =A0vect_strided =A0} } } */ > -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { tar= get =A0{ ! { vect_strided } } } } } */ > -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "ve= ct" =A0{ target =A0vect_strided =A0} } } */ > -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "ve= ct" =A0{ target { ! { vect_strided } } } } } */ > -/* { dg-final { cleanup-tree-dump "vect" } } */ > - > Index: gcc/testsuite/gcc.dg/vect/slp-19a.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > +++ gcc/testsuite/gcc.dg/vect/slp-19a.c 2011-04-12 15:18:25.000000000 +01= 00 > @@ -0,0 +1,61 @@ > +/* { dg-require-effective-target vect_int } */ > + > +#include > +#include "tree-vect.h" > + > +#define N 16 > + > +int > +main1 () > +{ > + =A0unsigned int i; > + =A0unsigned int out[N*8]; > + =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,= 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31= ,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56= ,57,58,59,60,61,62,63}; > + =A0unsigned int ia[N*2]; > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0{ > + =A0 =A0 =A0out[i*8] =3D in[i*8]; > + =A0 =A0 =A0out[i*8 + 1] =3D in[i*8 + 1]; > + =A0 =A0 =A0out[i*8 + 2] =3D in[i*8 + 2]; > + =A0 =A0 =A0out[i*8 + 3] =3D in[i*8 + 3]; > + =A0 =A0 =A0out[i*8 + 4] =3D in[i*8 + 4]; > + =A0 =A0 =A0out[i*8 + 5] =3D in[i*8 + 5]; > + =A0 =A0 =A0out[i*8 + 6] =3D in[i*8 + 6]; > + =A0 =A0 =A0out[i*8 + 7] =3D in[i*8 + 7]; > + > + =A0 =A0 =A0ia[i] =3D in[i*8 + 2]; > + =A0 =A0} > + > + =A0/* check results: =A0*/ > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0{ > + =A0 =A0 =A0if (out[i*8] !=3D =A0in[i*8] > + =A0 =A0 =A0 =A0 || out[i*8 + 1] !=3D in[i*8 + 1] > + =A0 =A0 =A0 =A0 || out[i*8 + 2] !=3D in[i*8 + 2] > + =A0 =A0 =A0 =A0 || out[i*8 + 3] !=3D in[i*8 + 3] > + =A0 =A0 =A0 =A0 || out[i*8 + 4] !=3D in[i*8 + 4] > + =A0 =A0 =A0 =A0 || out[i*8 + 5] !=3D in[i*8 + 5] > + =A0 =A0 =A0 =A0 || out[i*8 + 6] !=3D in[i*8 + 6] > + =A0 =A0 =A0 =A0 || out[i*8 + 7] !=3D in[i*8 + 7] > + =A0 =A0 =A0 =A0 || ia[i] !=3D in[i*8 + 2]) > + =A0 =A0 =A0 abort (); > + =A0 =A0} > + > + =A0return 0; > +} > + > +int main (void) > +{ > + =A0check_vect (); > + > + =A0main1 (); > + > + =A0return 0; > +} > + > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { tar= get vect_strided } } } */ > +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { tar= get { ! vect_strided } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "ve= ct" { target vect_strided } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "ve= ct" { target { ! vect_strided } } } } */ > +/* { dg-final { cleanup-tree-dump "vect" } } */ > Index: gcc/testsuite/gcc.dg/vect/slp-19b.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > +++ gcc/testsuite/gcc.dg/vect/slp-19b.c 2011-04-12 15:18:25.000000000 +01= 00 > @@ -0,0 +1,58 @@ > +/* { dg-require-effective-target vect_int } */ > + > +#include > +#include "tree-vect.h" > + > +#define N 16 > + > +int > +main1 () > +{ > + =A0unsigned int i; > + =A0unsigned int out[N*8]; > + =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,= 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31= ,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56= ,57,58,59,60,61,62,63}; > + =A0unsigned int ia[N*2], a0, a1, a2, a3; > + > + =A0for (i =3D 0; i < N*2; i++) > + =A0 =A0{ > + =A0 =A0 =A0a0 =3D in[i*4] + 1; > + =A0 =A0 =A0a1 =3D in[i*4 + 1] + 2; > + =A0 =A0 =A0a2 =3D in[i*4 + 2] + 3; > + =A0 =A0 =A0a3 =3D in[i*4 + 3] + 4; > + > + =A0 =A0 =A0out[i*4] =3D a0; > + =A0 =A0 =A0out[i*4 + 1] =3D a1; > + =A0 =A0 =A0out[i*4 + 2] =3D a2; > + =A0 =A0 =A0out[i*4 + 3] =3D a3; > + > + =A0 =A0 =A0ia[i] =3D a2; > + =A0 =A0} > + > + =A0/* check results: =A0*/ > + =A0for (i =3D 0; i < N*2; i++) > + =A0 =A0{ > + =A0 =A0 =A0if (out[i*4] !=3D =A0in[i*4] + 1 > + =A0 =A0 =A0 =A0 || out[i*4 + 1] !=3D in[i*4 + 1] + 2 > + =A0 =A0 =A0 =A0 || out[i*4 + 2] !=3D in[i*4 + 2] + 3 > + =A0 =A0 =A0 =A0 || out[i*4 + 3] !=3D in[i*4 + 3] + 4 > + =A0 =A0 =A0 =A0 || ia[i] !=3D in[i*4 + 2] + 3) > + =A0 =A0 =A0 =A0abort (); > + =A0 =A0} > + > + =A0return 0; > +} > + > +int main (void) > +{ > + =A0check_vect (); > + > + =A0main1 (); > + > + =A0return 0; > +} > + > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { tar= get vect_strided } } } */ > +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { tar= get { ! vect_strided } } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "ve= ct" { target vect_strided } } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "ve= ct" { target { ! vect_strided } } } } */ > +/* { dg-final { cleanup-tree-dump "vect" } } */ > Index: gcc/testsuite/gcc.dg/vect/slp-19c.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- /dev/null =A0 2011-03-23 08:42:11.268792848 +0000 > +++ gcc/testsuite/gcc.dg/vect/slp-19c.c 2011-04-12 15:18:25.000000000 +01= 00 > @@ -0,0 +1,95 @@ > +/* { dg-require-effective-target vect_int } */ > + > +#include > +#include "tree-vect.h" > + > +#define N 16 > + > +int > +main1 () > +{ > + =A0unsigned int i; > + =A0unsigned int out[N*8]; > + =A0unsigned int in[N*8] =3D {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1= 7,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4= 2,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,= 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31= ,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56= ,57,58,59,60,61,62,63}; > + =A0unsigned int ia[N*2], a0, a1, a2, a3; > + > + =A0/* The last stmt requires interleaving of not power of 2 size - not > + =A0 =A0 vectorizable. =A0*/ > + =A0for (i =3D 0; i < N/2; i++) > + =A0 =A0{ > + =A0 =A0 =A0out[i*12] =3D in[i*12]; > + =A0 =A0 =A0out[i*12 + 1] =3D in[i*12 + 1]; > + =A0 =A0 =A0out[i*12 + 2] =3D in[i*12 + 2]; > + =A0 =A0 =A0out[i*12 + 3] =3D in[i*12 + 3]; > + =A0 =A0 =A0out[i*12 + 4] =3D in[i*12 + 4]; > + =A0 =A0 =A0out[i*12 + 5] =3D in[i*12 + 5]; > + =A0 =A0 =A0out[i*12 + 6] =3D in[i*12 + 6]; > + =A0 =A0 =A0out[i*12 + 7] =3D in[i*12 + 7]; > + =A0 =A0 =A0out[i*12 + 8] =3D in[i*12 + 8]; > + =A0 =A0 =A0out[i*12 + 9] =3D in[i*12 + 9]; > + =A0 =A0 =A0out[i*12 + 10] =3D in[i*12 + 10]; > + =A0 =A0 =A0out[i*12 + 11] =3D in[i*12 + 11]; > + > + =A0 =A0 =A0ia[i] =3D in[i*12 + 7]; > + =A0 =A0} > + > + =A0/* check results: =A0*/ > + =A0for (i =3D 0; i < N/2; i++) > + =A0 =A0{ > + =A0 =A0 =A0if (out[i*12] !=3D =A0in[i*12] > + =A0 =A0 =A0 =A0 || out[i*12 + 1] !=3D in[i*12 + 1] > + =A0 =A0 =A0 =A0 || out[i*12 + 2] !=3D in[i*12 + 2] > + =A0 =A0 =A0 =A0 || out[i*12 + 3] !=3D in[i*12 + 3] > + =A0 =A0 =A0 =A0 || out[i*12 + 4] !=3D in[i*12 + 4] > + =A0 =A0 =A0 =A0 || out[i*12 + 5] !=3D in[i*12 + 5] > + =A0 =A0 =A0 =A0 || out[i*12 + 6] !=3D in[i*12 + 6] > + =A0 =A0 =A0 =A0 || out[i*12 + 7] !=3D in[i*12 + 7] > + =A0 =A0 =A0 =A0 || out[i*12 + 8] !=3D in[i*12 + 8] > + =A0 =A0 =A0 =A0 || out[i*12 + 9] !=3D in[i*12 + 9] > + =A0 =A0 =A0 =A0 || out[i*12 + 10] !=3D in[i*12 + 10] > + =A0 =A0 =A0 =A0 || out[i*12 + 11] !=3D in[i*12 + 11] > + =A0 =A0 =A0 =A0 || ia[i] !=3D in[i*12 + 7]) > + =A0 =A0 =A0 =A0abort (); > + =A0 =A0} > + > + =A0/* Hybrid SLP with unrolling by 2. =A0*/ > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0{ > + =A0 =A0 =A0out[i*6] =3D in[i*6]; > + =A0 =A0 =A0out[i*6 + 1] =3D in[i*6 + 1]; > + =A0 =A0 =A0out[i*6 + 2] =3D in[i*6 + 2]; > + =A0 =A0 =A0out[i*6 + 3] =3D in[i*6 + 3]; > + =A0 =A0 =A0out[i*6 + 4] =3D in[i*6 + 4]; > + =A0 =A0 =A0out[i*6 + 5] =3D in[i*6 + 5]; > + > + =A0 =A0 =A0ia[i] =3D i; > + =A0 =A0} > + > + =A0/* check results: =A0*/ > + =A0for (i =3D 0; i < N/2; i++) > + =A0 =A0{ > + =A0 =A0 =A0if (out[i*6] !=3D =A0in[i*6] > + =A0 =A0 =A0 =A0 || out[i*6 + 1] !=3D in[i*6 + 1] > + =A0 =A0 =A0 =A0 || out[i*6 + 2] !=3D in[i*6 + 2] > + =A0 =A0 =A0 =A0 || out[i*6 + 3] !=3D in[i*6 + 3] > + =A0 =A0 =A0 =A0 || out[i*6 + 4] !=3D in[i*6 + 4] > + =A0 =A0 =A0 =A0 || out[i*6 + 5] !=3D in[i*6 + 5] > + =A0 =A0 =A0 =A0 || ia[i] !=3D i) > + =A0 =A0 =A0 =A0abort (); > + =A0 =A0} > + > + =A0return 0; > +} > + > +int main (void) > +{ > + =A0check_vect (); > + > + =A0main1 (); > + > + =A0return 0; > +} > + > +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ > +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "ve= ct" } } */ > +/* { dg-final { cleanup-tree-dump "vect" } } */ >