Hi all,As Christophe mentioned at https://gcc.gnu.org/ml/gcc-patches/2014-09/msg00202.html These tests fail on big-endian. The reason is that the input is not aligned to 128 bit forcing the use of a movmisalign which we don't support on big-endian.
A solution is to force the alignment of the arrays, allowing for the use of normal loads and stores. We can look into enabling misaligned loads on big-endian with the appropriate reversal logic as a separate
piece of work... Ok for trunk? 2014-09-09 Kyrylo Tkachov <kyrylo.tkac...@arm.com> * gcc.target/arm/vect-lceilf_1.c: Make input and output arrays global and 16-byte aligned. * gcc.target/arm/vect-lfloorf_1.c: Likewise. * gcc.target/arm/vect-lroundf_1.c: Likewise. * gcc.target/arm/vect-rounding-btruncf.c: Likewise. * gcc.target/arm/vect-rounding-ceilf.c: Likewise. * gcc.target/arm/vect-rounding-floorf.c: Likewise. * gcc.target/arm/vect-rounding-roundf.c: Likewise.
diff --git a/gcc/testsuite/gcc.target/arm/vect-lceilf_1.c b/gcc/testsuite/gcc.target/arm/vect-lceilf_1.c index 75705ae..5e98b74 100644 --- a/gcc/testsuite/gcc.target/arm/vect-lceilf_1.c +++ b/gcc/testsuite/gcc.target/arm/vect-lceilf_1.c @@ -5,8 +5,11 @@ #define N 32 +float __attribute__((aligned(16))) input[N]; +int __attribute__((aligned(16))) output[N]; + void -foo (int *output, float *input) +foo () { int i = 0; /* Vectorizable. */ diff --git a/gcc/testsuite/gcc.target/arm/vect-lfloorf_1.c b/gcc/testsuite/gcc.target/arm/vect-lfloorf_1.c index 298d54e..655f437 100644 --- a/gcc/testsuite/gcc.target/arm/vect-lfloorf_1.c +++ b/gcc/testsuite/gcc.target/arm/vect-lfloorf_1.c @@ -5,8 +5,11 @@ #define N 32 +float __attribute__((aligned(16))) input[N]; +int __attribute__((aligned(16))) output[N]; + void -foo (int *output, float *input) +foo () { int i = 0; /* Vectorizable. */ diff --git a/gcc/testsuite/gcc.target/arm/vect-lroundf_1.c b/gcc/testsuite/gcc.target/arm/vect-lroundf_1.c index 6443821..92a722e 100644 --- a/gcc/testsuite/gcc.target/arm/vect-lroundf_1.c +++ b/gcc/testsuite/gcc.target/arm/vect-lroundf_1.c @@ -5,8 +5,11 @@ #define N 32 +float __attribute__((aligned(16))) input[N]; +int __attribute__((aligned(16))) output[N]; + void -foo (int *output, float *input) +foo () { int i = 0; /* Vectorizable. */ diff --git a/gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c b/gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c index 5616837..372ddc5 100644 --- a/gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c +++ b/gcc/testsuite/gcc.target/arm/vect-rounding-btruncf.c @@ -5,8 +5,11 @@ #define N 32 +float __attribute__((aligned(16))) input[N]; +float __attribute__((aligned(16))) output[N]; + void -foo (float *output, float *input) +foo () { int i = 0; /* Vectorizable. */ diff --git a/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c b/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c index cb8f1d5..3c786d4 100644 --- a/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c +++ b/gcc/testsuite/gcc.target/arm/vect-rounding-ceilf.c @@ -5,8 +5,11 @@ #define N 32 +float __attribute__((aligned(16))) input[N]; +float __attribute__((aligned(16))) output[N]; + void -foo (float *output, float *input) +foo () { int i = 0; /* Vectorizable. */ diff --git a/gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c b/gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c index bf68af7..eedb295 100644 --- a/gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c +++ b/gcc/testsuite/gcc.target/arm/vect-rounding-floorf.c @@ -5,8 +5,11 @@ #define N 32 +float __attribute__((aligned(16))) input[N]; +float __attribute__((aligned(16))) output[N]; + void -foo (float *output, float *input) +foo () { int i = 0; /* Vectorizable. */ diff --git a/gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c b/gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c index 7c0a1b4..360b2b9 100644 --- a/gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c +++ b/gcc/testsuite/gcc.target/arm/vect-rounding-roundf.c @@ -5,8 +5,11 @@ #define N 32 +float __attribute__((aligned(16))) input[N]; +float __attribute__((aligned(16))) output[N]; + void -foo (float *output, float *input) +foo () { int i = 0; /* Vectorizable. */