+2007-08-19 Dorit Nuzman <dorit@il.ibm.com>
+
+ * testsuite/gcc.dg/vect/pr20122.c: Fix test (now vectorized, with
+ versioning for aliasing).
+ * testsuite/gcc.dg/vect/vect-35.c: Likewise.
+
+ * testsuite/gcc.dg/vect/vect-iv-6.c: Fix test for vect_no_align targets.
+ * testsuite/gcc.dg/vect/vect-multitypes-11.c: Likewise.
+
2007-08-18 Tom Tromey <tromey@redhat.com>
PR preprocessor/32974:
static void VecBug(short Kernel[8][24]) __attribute__((noinline));
static void VecBug2(short Kernel[8][24]) __attribute__((noinline));
-/* Not vectorizable: Kernel may alias Kernshort - a global array. */
+/* Kernel may alias Kernshort - a global array.
+ Use versioning for aliasing. */
static void VecBug(short Kernel[8][24])
{
int k,i;
return 0;
}
-
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target vect_no_align } } } */
+/* The loops in VecBug and VecBug2 require versioning for alignment.
+ The loop in main is aligned. */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
int main1 ()
{
union {
- char a[N] __attribute__ ((__aligned__(16)));
- char b[N] __attribute__ ((__aligned__(16)));
+ unsigned char a[N] __attribute__ ((__aligned__(16)));
+ unsigned char b[N] __attribute__ ((__aligned__(16)));
} s;
int i;
s.b[i] = 3*i;
}
- /* Can't vectorize - dependence analysis fails cause s.a and s.b may
- overlap. */
+ /* Dependence analysis fails cause s.a and s.b may overlap.
+ Use runtime aliasing test with versioning. */
for (i = 0; i < N; i++)
{
s.a[i] = s.b[i] + 1;
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "can't determine dependence between" 1 "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
by the loop-header phi (as opposed to the other uses of k that are
defined in the loop), in which case we exercise the fact that we
reuse the same vector def-use-cycle for both uses.
- Peeling to align the store is also applied. */
+ Peeling to align the store is also applied. This peeling also aligns
+ the load (as they have the same misalignment). */
do {
arr2[i+1] = 2*k;
return main1 (3);
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_unpack } } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! vect_unpack } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vect_no_align && vect_unpack } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */