[patch, testsuite] Fix vectorizer testsuite failures on ARM

Ira Rosen ira.rosen@linaro.org
Thu Jun 9 10:07:00 GMT 2011


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.
-------------- next part --------------
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 <stdarg.h>
-#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 <stdarg.h>
+#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"


More information about the Gcc-patches mailing list