From patchwork Thu Jun 9 10:00:01 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ira Rosen X-Patchwork-Id: 1787 Return-Path: Delivered-To: unknown Received: from imap.gmail.com (74.125.45.109) by localhost6.localdomain6 with IMAP4-SSL; 10 Jun 2011 20:11:42 -0000 Delivered-To: patches@linaro.org Received: by 10.52.181.10 with SMTP id ds10cs232291vdc; Thu, 9 Jun 2011 03:00:02 -0700 (PDT) Received: by 10.236.146.36 with SMTP id q24mr654576yhj.365.1307613602436; Thu, 09 Jun 2011 03:00:02 -0700 (PDT) Received: from mail-pw0-f50.google.com (mail-pw0-f50.google.com [209.85.160.50]) by mx.google.com with ESMTPS id a46si7885181yhe.20.2011.06.09.03.00.02 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 09 Jun 2011 03:00:02 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.160.50 is neither permitted nor denied by best guess record for domain of ira.rosen@linaro.org) client-ip=209.85.160.50; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.160.50 is neither permitted nor denied by best guess record for domain of ira.rosen@linaro.org) smtp.mail=ira.rosen@linaro.org Received: by pwi3 with SMTP id 3so753781pwi.37 for ; Thu, 09 Jun 2011 03:00:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.150.22 with SMTP id x22mr78778wfd.150.1307613601320; Thu, 09 Jun 2011 03:00:01 -0700 (PDT) Received: by 10.143.93.4 with HTTP; Thu, 9 Jun 2011 03:00:01 -0700 (PDT) Date: Thu, 9 Jun 2011 13:00:01 +0300 Message-ID: Subject: [patch, testsuite] Fix vectorizer testsuite failures on ARM From: Ira Rosen To: gcc-patches@gcc.gnu.org Cc: Patch Tracking Hi, This patch fixes several vectorizer testsuite failures on ARM: - vect-16.c checks that the vectorization fails without -ffast-math, but -ffast-math is a default flag for vector tests on ARM. I renamed the test to no-fast-math-vect-16.c to avoid the use of the flag for it. - vect-peel-3.c and vect-peel-4.c test vectorizer's peeling heuristics ignoring double-word vectors. This patch changes the misalignment values of the data-refs. - bb-slp-10.c contains a misaligned store supported not only on vect_hw_misalign targets, but also on vect_element_align targets. The patch fixes that. Tested on arm-linux-gnueabi, powerpc64-suse-linux and x86_64-suse-linux. OK for mainline? Thanks, Ira testsuite/ChangeLog: * gcc.dg/vect/vect-16.c: Rename to ... * gcc.dg/vect/no-fast-math-vect16.c: ... this. * gcc.dg/vect/vect-peel-3.c: Adjust misalignment values for double-word vectors. * gcc.dg/vect/vect-peel-4.c: Likewise. * gcc.dg/vect/bb-slp-10.c: Replace vect_hw_misalign with vect_element_align. * gcc.dg/vect/vect.exp: Run no-fast-math-* tests with -fno-fast-math. Index: gcc.dg/vect/vect-16.c =================================================================== --- gcc.dg/vect/vect-16.c (revision 174836) +++ gcc.dg/vect/vect-16.c (working copy) @@ -1,38 +0,0 @@ -/* { dg-require-effective-target vect_float } */ - -#include -#include "tree-vect.h" - -#define N 16 -#define DIFF 240 - -__attribute__ ((noinline)) -int main1 () -{ - int i; - float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}; - float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; - float diff; - - diff = 0; - for (i = 0; i < N; i++) { - diff += (b[i] - c[i]); - } - - /* check results: */ - if (diff != DIFF) - abort (); - - return 0; -} - -int main (void) -{ - check_vect (); - - return main1 (); -} - -/* Requires fast-math. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */ -/* { dg-final { cleanup-tree-dump "vect" } } */ Index: gcc.dg/vect/vect-peel-3.c =================================================================== --- gcc.dg/vect/vect-peel-3.c (revision 174836) +++ gcc.dg/vect/vect-peel-3.c (working copy) @@ -4,9 +4,7 @@ #include "tree-vect.h" #define N 128 -#define RES 21888 - -/* unaligned store. */ +#define RES 21640 int ib[N+10]; int ia[N+10]; @@ -18,11 +16,11 @@ int main1 () int i, suma = 0, sumb = 0, sumc = 0; /* ib and ic have same misalignment, we peel to align them. */ - for (i = 1; i <= N; i++) + for (i = 0; i <= N; i++) { suma += ia[i]; - sumb += ib[i+6]; - sumc += ic[i+2]; + sumb += ib[i+5]; + sumc += ic[i+1]; } /* check results: */ Index: gcc.dg/vect/vect-peel-4.c =================================================================== --- gcc.dg/vect/vect-peel-4.c (revision 174836) +++ gcc.dg/vect/vect-peel-4.c (working copy) @@ -16,13 +16,13 @@ int main1 () /* Don't peel keeping one load and the store aligned. */ for (i = 0; i <= N; i++) { - ia[i] = ib[i] + ib[i+6]; + ia[i] = ib[i] + ib[i+5]; } /* check results: */ for (i = 1; i <= N; i++) { - if (ia[i] != ib[i] + ib[i+6]) + if (ia[i] != ib[i] + ib[i+5]) abort (); } Index: gcc.dg/vect/no-fast-math-vect16.c =================================================================== --- gcc.dg/vect/no-fast-math-vect16.c (revision 0) +++ gcc.dg/vect/no-fast-math-vect16.c (revision 0) @@ -0,0 +1,38 @@ +/* { dg-require-effective-target vect_float } */ + +#include +#include "tree-vect.h" + +#define N 16 +#define DIFF 240 + +__attribute__ ((noinline)) +int main1 () +{ + int i; + float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45}; + float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; + float diff; + + diff = 0; + for (i = 0; i < N; i++) { + diff += (b[i] - c[i]); + } + + /* check results: */ + if (diff != DIFF) + abort (); + + return 0; +} + +int main (void) +{ + check_vect (); + + return main1 (); +} + +/* Requires fast-math. */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ Index: gcc.dg/vect/bb-slp-10.c =================================================================== --- gcc.dg/vect/bb-slp-10.c (revision 174836) +++ gcc.dg/vect/bb-slp-10.c (working copy) @@ -49,7 +49,7 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "unsupported alignment in basic block." 1 "slp" { xfail vect_hw_misalign } } } */ -/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect_hw_misalign } } } */ +/* { dg-final { scan-tree-dump-times "unsupported alignment in basic block." 1 "slp" { xfail vect_element_align } } } */ +/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp" { target vect_element_align } } } */ /* { dg-final { cleanup-tree-dump "slp" } } */ Index: gcc.dg/vect/vect.exp =================================================================== --- gcc.dg/vect/vect.exp (revision 174836) +++ gcc.dg/vect/vect.exp (working copy) @@ -107,6 +107,12 @@ lappend DEFAULT_VECTCFLAGS "-ffast-math" dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/fast-math-*.\[cS\]]] \ "" $DEFAULT_VECTCFLAGS +# -fno-fast-math tests +set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS +lappend DEFAULT_VECTCFLAGS "-fno-fast-math" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-fast-math-*.\[cS\]]] \ + "" $DEFAULT_VECTCFLAGS + # -fno-math-errno tests set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS lappend DEFAULT_VECTCFLAGS "-fno-math-errno"