From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9708 invoked by alias); 15 Apr 2011 12:44:03 -0000 Received: (qmail 9698 invoked by uid 22791); 15 Apr 2011 12:44:02 -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,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:43:59 +0000 Received: by wwf26 with SMTP id 26so3042977wwf.8 for ; Fri, 15 Apr 2011 05:43:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.227.202.149 with SMTP id fe21mr2012250wbb.205.1302871437701; Fri, 15 Apr 2011 05:43:57 -0700 (PDT) Received: by 10.227.0.140 with HTTP; Fri, 15 Apr 2011 05:43:57 -0700 (PDT) In-Reply-To: References: Date: Fri, 15 Apr 2011 12:45:00 -0000 Message-ID: Subject: Re: [10/9] Add tests for stride-3 accesses From: Richard Guenther To: gcc-patches@gcc.gnu.org, patches@linaro.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/msg01178.txt.bz2 On Tue, Apr 12, 2011 at 4:34 PM, Richard Sandiford wrote: > This patch adds a test for stride-3 accesses. =A0I didn't add any > particularly complicated cases because I think the testsuite already > covers the interaction between the strided loads & stores and other > operations pretty well. =A0Let me know if there's something I should > add though. > > 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/vect-strided-u16-i3.c: New test. > > Index: gcc/testsuite/gcc.dg/vect/vect-strided-u16-i3.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/vect-strided-u16-i3.c =A0 =A0 2011-04-12 11= :55:17.000000000 +0100 > @@ -0,0 +1,112 @@ > +#include > +#include "tree-vect.h" > + > +#define N 128 > + > +typedef struct { > + =A0 unsigned short a; > + =A0 unsigned short b; > + =A0 unsigned short c; > +} s; > + > +#define A(I) (I) > +#define B(I) ((I) * 2) > +#define C(I) ((unsigned short) ~((I) ^ 0x18)) > + > +void __attribute__ ((noinline)) > +check1 (s *res) > +{ > + =A0int i; > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0if (res[i].a !=3D C (i) > + =A0 =A0 =A0 || res[i].b !=3D A (i) > + =A0 =A0 =A0 || res[i].c !=3D B (i)) > + =A0 =A0 =A0abort (); > +} > + > +void __attribute__ ((noinline)) > +check2 (unsigned short *res) > +{ > + =A0int i; > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0if (res[i] !=3D (unsigned short) (A (i) + B (i) + C (i))) > + =A0 =A0 =A0abort (); > +} > + > +void __attribute__ ((noinline)) > +check3 (s *res) > +{ > + =A0int i; > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0if (res[i].a !=3D i > + =A0 =A0 =A0 || res[i].b !=3D i > + =A0 =A0 =A0 || res[i].c !=3D i) > + =A0 =A0 =A0abort (); > +} > + > +void __attribute__ ((noinline)) > +check4 (unsigned short *res) > +{ > + =A0int i; > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0if (res[i] !=3D (unsigned short) (A (i) + B (i))) > + =A0 =A0 =A0abort (); > +} > + > +void __attribute__ ((noinline)) > +main1 (s *arr) > +{ > + =A0int i; > + =A0s *ptr =3D arr; > + =A0s res1[N]; > + =A0unsigned short res2[N]; > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0{ > + =A0 =A0 =A0res1[i].a =3D arr[i].c; > + =A0 =A0 =A0res1[i].b =3D arr[i].a; > + =A0 =A0 =A0res1[i].c =3D arr[i].b; > + =A0 =A0} > + =A0check1 (res1); > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0res2[i] =3D arr[i].a + arr[i].b + arr[i].c; > + =A0check2 (res2); > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0{ > + =A0 =A0 =A0res1[i].a =3D i; > + =A0 =A0 =A0res1[i].b =3D i; > + =A0 =A0 =A0res1[i].c =3D i; > + =A0 =A0} > + =A0check3 (res1); > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0res2[i] =3D arr[i].a + arr[i].b; > + =A0check4 (res2); > +} > + > +int main (void) > +{ > + =A0int i; > + =A0s arr[N]; > + > + =A0check_vect (); > + > + =A0for (i =3D 0; i < N; i++) > + =A0 =A0{ > + =A0 =A0 =A0arr[i].a =3D A (i); > + =A0 =A0 =A0arr[i].b =3D B (i); > + =A0 =A0 =A0arr[i].c =3D C (i); > + =A0 =A0} > + =A0main1 (arr); > + > + =A0return 0; > +} > + > +/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" =A0{ = target vect_strided3 } } } */ > +/* { dg-final { cleanup-tree-dump "vect" } } */ >