pr16105.c: Replace "aligned types" with regular types.
* gcc.dg/vect/pr16105.c: Replace "aligned types" with regular types. No longer vectorizable on vect_no_align targets. * gcc.dg/vect/pr20122.c: Likewise. * gcc.dg/vect/vect-74.c: Likewise. * gcc.dg/vect/vect-75.c: Likewise. * gcc.dg/vect/vect-76.c: Likewise. * gcc.dg/vect/vect-37.c: Replace "aligned types" with regular types. Will not be vectorizable on vect_no_align targets once aliasing issues are resolved. * gcc.dg/vect/vect-79.c: Likewise. * gcc.dg/vect/vect-77.c: Replace "aligned types" with regular types. * gcc.dg/vect/vect-78.c: Likewise. * gcc.dg/vect/vect-97.c: Likewise. From-SVN: r104445
This commit is contained in:
parent
da8f5fd92e
commit
a417b48268
11 changed files with 77 additions and 62 deletions
|
@ -1,3 +1,21 @@
|
|||
2005-09-20 Dorit Nuzman <dorit@il.ibm.com>
|
||||
|
||||
* gcc.dg/vect/pr16105.c: Replace "aligned types" with regular types.
|
||||
No longer vectorizable on vect_no_align targets.
|
||||
* gcc.dg/vect/pr20122.c: Likewise.
|
||||
* gcc.dg/vect/vect-74.c: Likewise.
|
||||
* gcc.dg/vect/vect-75.c: Likewise.
|
||||
* gcc.dg/vect/vect-76.c: Likewise.
|
||||
|
||||
* gcc.dg/vect/vect-37.c: Replace "aligned types" with regular types.
|
||||
Will not be vectorizable on vect_no_align targets once aliasing issues
|
||||
are resolved.
|
||||
* gcc.dg/vect/vect-79.c: Likewise.
|
||||
|
||||
* gcc.dg/vect/vect-77.c: Replace "aligned types" with regular types.
|
||||
* gcc.dg/vect/vect-78.c: Likewise.
|
||||
* gcc.dg/vect/vect-97.c: Likewise.
|
||||
|
||||
2005-09-19 Steven Bosscher <stevenb@suse.de>
|
||||
|
||||
* gcc.dg/pr23943.c: New test.
|
||||
|
|
|
@ -2,12 +2,11 @@
|
|||
/* { dg-require-effective-target vect_float } */
|
||||
|
||||
#define VECTOR_SIZE 512
|
||||
typedef float afloat __attribute__ ((__aligned__(16)));
|
||||
|
||||
extern void check(const afloat * __restrict__ v);
|
||||
extern void check(const float * __restrict__ v);
|
||||
|
||||
void square(const afloat * __restrict__ a,
|
||||
afloat * __restrict__ out)
|
||||
void square(const float * __restrict__ a,
|
||||
float * __restrict__ out)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i = 0; i < VECTOR_SIZE; i++) {
|
||||
|
@ -18,5 +17,5 @@ void square(const afloat * __restrict__ a,
|
|||
check(out);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"} } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
|
|
@ -3,15 +3,12 @@
|
|||
#include <stdarg.h>
|
||||
#include "tree-vect.h"
|
||||
|
||||
typedef short ashort __attribute__ ((__aligned__(16)));
|
||||
ashort Kernshort[24];
|
||||
static void VecBug(ashort Kernel[8][24]) __attribute__((noinline));
|
||||
static void VecBug(ashort Kernel[8][24]);
|
||||
static void VecBug2(ashort Kernel[8][24]) __attribute__((noinline));
|
||||
static void VecBug2(ashort Kernel[8][24]);
|
||||
short Kernshort[24] __attribute__ ((__aligned__(16)));
|
||||
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. */
|
||||
static void VecBug(ashort Kernel[8][24])
|
||||
static void VecBug(short Kernel[8][24])
|
||||
{
|
||||
int k,i;
|
||||
for (k = 0; k<8; k++)
|
||||
|
@ -20,10 +17,10 @@ static void VecBug(ashort Kernel[8][24])
|
|||
}
|
||||
|
||||
/* Vectorizable: Kernshort2 is local. */
|
||||
static void VecBug2(ashort Kernel[8][24])
|
||||
static void VecBug2(short Kernel[8][24])
|
||||
{
|
||||
int k,i;
|
||||
ashort Kernshort2[24];
|
||||
short Kernshort2[24] __attribute__ ((__aligned__(16)));
|
||||
for (k = 0; k<8; k++)
|
||||
for (i = 0; i<24; i++)
|
||||
Kernshort2[i] = Kernel[k][i];
|
||||
|
@ -38,7 +35,7 @@ int main (int argc, char **argv)
|
|||
{
|
||||
check_vect ();
|
||||
|
||||
ashort Kernel[8][24];
|
||||
short Kernel[8][24] __attribute__ ((__aligned__(16)));
|
||||
int k,i;
|
||||
|
||||
for (k = 0; k<8; k++)
|
||||
|
@ -52,5 +49,5 @@ int main (int argc, char **argv)
|
|||
}
|
||||
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail vect_no_align} } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
|
|
@ -3,20 +3,19 @@
|
|||
#include <stdarg.h>
|
||||
#include "tree-vect.h"
|
||||
|
||||
typedef char achar __attribute__ ((__aligned__(16)));
|
||||
|
||||
#define N 16
|
||||
achar x[N];
|
||||
char x[N] __attribute__ ((__aligned__(16)));
|
||||
|
||||
int main1 (achar *y)
|
||||
int main1 (char *y)
|
||||
{
|
||||
struct {
|
||||
achar *p;
|
||||
achar *q;
|
||||
char *p;
|
||||
char *q;
|
||||
} s;
|
||||
achar cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
|
||||
char cb[N] __attribute__ ((__aligned__(16))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
|
||||
int i;
|
||||
|
||||
/* Not vectorized - can't antialias the pointer s.p from the array cb. */
|
||||
s.p = y;
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
|
@ -30,6 +29,7 @@ int main1 (achar *y)
|
|||
abort ();
|
||||
}
|
||||
|
||||
/* Not vectorized - can't antialias the pointer s.p from the pointer s.q. */
|
||||
s.q = cb;
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
|
@ -53,8 +53,9 @@ int main (void)
|
|||
return main1 (x);
|
||||
}
|
||||
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" } } */
|
||||
/* Currently the loops fail to vectorize due to aliasing problems.
|
||||
If/when the aliasing problems are resolved, unalignment may
|
||||
prevent vectorization on some targets. */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
|
||||
/* { dg-final { scan-tree-dump-times "can't determine dependence between" 2 "vect" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
|
||||
#define N 16
|
||||
|
||||
typedef float afloat __attribute__ ((__aligned__(16)));
|
||||
|
||||
/* Check handling of accesses for which the "initial condition" -
|
||||
the expression that represents the first location accessed - is
|
||||
more involved than just an ssa_name. */
|
||||
|
@ -16,10 +14,10 @@ float b[N+4] __attribute__ ((__aligned__(16))) = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0,
|
|||
float c[N] __attribute__ ((__aligned__(16))) = {0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 7.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5};
|
||||
|
||||
int
|
||||
main1 (afloat *__restrict__ pa, afloat * __restrict__ pb, afloat * __restrict__ pc)
|
||||
main1 (float *__restrict__ pa, float * __restrict__ pb, float * __restrict__ pc)
|
||||
{
|
||||
int i;
|
||||
afloat *q = pb + 4;
|
||||
float *q = pb + 4;
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
|
@ -44,6 +42,7 @@ int main (void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
|
||||
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
|
||||
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
|
|
@ -6,15 +6,13 @@
|
|||
#define N 8
|
||||
#define OFF 8
|
||||
|
||||
typedef int aint __attribute__ ((__aligned__(16)));
|
||||
|
||||
/* Check handling of accesses for which the "initial condition" -
|
||||
the expression that represents the first location accessed - is
|
||||
more involved than just an ssa_name. */
|
||||
|
||||
int ib[N+OFF] __attribute__ ((__aligned__(16))) = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10, 14, 22, 26, 34};
|
||||
|
||||
int main1 (aint *ib)
|
||||
int main1 (int *ib)
|
||||
{
|
||||
int i;
|
||||
int ia[N];
|
||||
|
@ -44,6 +42,6 @@ int main (void)
|
|||
}
|
||||
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
|
||||
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
|
|
@ -6,15 +6,13 @@
|
|||
#define N 8
|
||||
#define OFF 4
|
||||
|
||||
typedef int aint __attribute__ ((__aligned__(16)));
|
||||
|
||||
/* Check handling of accesses for which the "initial condition" -
|
||||
the expression that represents the first location accessed - is
|
||||
more involved than just an ssa_name. */
|
||||
|
||||
int ib[N+OFF] __attribute__ ((__aligned__(16))) = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10};
|
||||
|
||||
int main1 (aint *pib)
|
||||
int main1 (int *pib)
|
||||
{
|
||||
int i;
|
||||
int ia[N+OFF];
|
||||
|
@ -71,6 +69,7 @@ int main (void)
|
|||
}
|
||||
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_align } } } */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_no_align } } } */
|
||||
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
|
|
@ -6,15 +6,13 @@
|
|||
#define N 8
|
||||
#define OFF 8
|
||||
|
||||
typedef int aint __attribute__ ((__aligned__(16)));
|
||||
|
||||
/* Check handling of accesses for which the "initial condition" -
|
||||
the expression that represents the first location accessed - is
|
||||
more involved than just an ssa_name. */
|
||||
|
||||
int ib[N+OFF] __attribute__ ((__aligned__(16))) = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10, 14, 22, 26, 34};
|
||||
|
||||
int main1 (aint *ib, int off)
|
||||
int main1 (int *ib, int off)
|
||||
{
|
||||
int i;
|
||||
int ia[N];
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
#define N 8
|
||||
#define OFF 8
|
||||
|
||||
typedef int aint __attribute__ ((__aligned__(16)));
|
||||
|
||||
/* Check handling of accesses for which the "initial condition" -
|
||||
the expression that represents the first location accessed - is
|
||||
more involved than just an ssa_name. */
|
||||
|
@ -15,7 +13,7 @@ typedef int aint __attribute__ ((__aligned__(16)));
|
|||
int ib[N+OFF] __attribute__ ((__aligned__(16))) = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10, 14, 22, 26, 34};
|
||||
int off = 8;
|
||||
|
||||
int main1 (aint *ib)
|
||||
int main1 (int *ib)
|
||||
{
|
||||
int i;
|
||||
int ia[N];
|
||||
|
|
|
@ -5,18 +5,18 @@
|
|||
|
||||
#define N 16
|
||||
|
||||
typedef float afloat __attribute__ ((__aligned__(16)));
|
||||
float fa[N] __attribute__ ((__aligned__(16)));
|
||||
float fb[N+4] __attribute__ ((__aligned__(16))) = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0};
|
||||
float fc[N] __attribute__ ((__aligned__(16))) = {0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 7.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5};
|
||||
|
||||
afloat a[N];
|
||||
afloat b[N+4] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0};
|
||||
afloat c[N] = {0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 7.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5};
|
||||
/* Like vect-80.c but the pointers are not annotated as restricted,
|
||||
and therefore can't be antialiased. */
|
||||
|
||||
/* Not vectorizable. Alias. */
|
||||
int
|
||||
main1 (afloat *pa, afloat *pb, afloat *pc)
|
||||
main1 (float *pa, float *pb, float *pc)
|
||||
{
|
||||
int i;
|
||||
afloat *q = pb + 4;
|
||||
float *q = pb + 4;
|
||||
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
|
@ -37,10 +37,14 @@ int main (void)
|
|||
{
|
||||
check_vect ();
|
||||
|
||||
main1 (a, b, c);
|
||||
main1 (fa, fb, fc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Currently the loops fail to vectorize due to aliasing problems.
|
||||
If/when the aliasing problems are resolved, unalignment may
|
||||
prevent vectorization on some targets. */
|
||||
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
|
||||
/* { dg-final { scan-tree-dump-times "can't determine dependence between" 1 "vect" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
|
|
@ -3,20 +3,21 @@
|
|||
#include <stdarg.h>
|
||||
#include "tree-vect.h"
|
||||
|
||||
typedef char achar __attribute__ ((__aligned__(16)));
|
||||
|
||||
#define N 16
|
||||
|
||||
int main1 ()
|
||||
{
|
||||
struct {
|
||||
achar *p;
|
||||
achar *q;
|
||||
char *p;
|
||||
char *q;
|
||||
} s;
|
||||
int i;
|
||||
achar x[N];
|
||||
achar cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
|
||||
char x[N] __attribute__ ((__aligned__(16)));
|
||||
char cb[N] __attribute__ ((__aligned__(16))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
|
||||
|
||||
/* Check that datarefs analysis can determine that the access via pointer
|
||||
s.p is based off array x, which enables us to antialias this access from
|
||||
the access to array cb. */
|
||||
s.p = x;
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
|
@ -30,6 +31,9 @@ int main1 ()
|
|||
abort ();
|
||||
}
|
||||
|
||||
/* Check that datarefs analysis can determine that the access via pointer
|
||||
s.p is based off array x, and that the access via pointer s.q is based off
|
||||
array cb, which enables us to antialias these two accesses. */
|
||||
s.q = cb;
|
||||
for (i = 0; i < N; i++)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue