diff options
author | Michael Meissner <meissner@linux.vnet.ibm.com> | 2011-04-26 17:48:29 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 2011-04-26 17:48:29 +0000 |
commit | df10b6d444785aaf24fde0f692dfff7a7aa8ce3f (patch) | |
tree | c23cb566af188ae27d60669cb2914c66ae376ef0 /gcc/testsuite | |
parent | 35a5db044834df01f9865ee6857f6a6b66147da5 (diff) | |
download | gcc-df10b6d444785aaf24fde0f692dfff7a7aa8ce3f.zip gcc-df10b6d444785aaf24fde0f692dfff7a7aa8ce3f.tar.gz gcc-df10b6d444785aaf24fde0f692dfff7a7aa8ce3f.tar.bz2 |
PR target/48258, improve vector reduction on power7
From-SVN: r172981
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr48258-1.c | 57 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr48258-2.c | 58 |
3 files changed, 122 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 79cb509..f6533ca 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ +2011-03-23 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/48258 + * gcc.target/powerpc/pr48258-1.c: New file. + * gcc.target/powerpc/pr48258-2.c: Ditto. + 2011-04-26 Xinliang David Li <davidxl@google.com> - + * gcc.dg/uninit-suppress.c: New test. * gcc.dg/uninit-suppress.c: New test. diff --git a/gcc/testsuite/gcc.target/powerpc/pr48258-1.c b/gcc/testsuite/gcc.target/powerpc/pr48258-1.c new file mode 100644 index 0000000..4f37815 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48258-1.c @@ -0,0 +1,57 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7 -mabi=altivec -ffast-math -fno-unroll-loops" } */ +/* { dg-final { scan-assembler-times "xvaddsp" 3 } } */ +/* { dg-final { scan-assembler-times "xvminsp" 3 } } */ +/* { dg-final { scan-assembler-times "xvmaxsp" 3 } } */ +/* { dg-final { scan-assembler-times "xxsldwi" 6 } } */ +/* { dg-final { scan-assembler-times "xscvspdp" 3 } } */ +/* { dg-final { scan-assembler-not "stvewx" } } */ +/* { dg-final { scan-assembler-not "stvx" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" } } */ +/* { dg-final { scan-assembler-not "stxvw4x" } } */ + +#include <stddef.h> + +#ifndef SIZE +#define SIZE 1024 +#endif + +float values[SIZE] __attribute__((__aligned__(32))); + +float +vector_sum (void) +{ + size_t i; + float sum = 0.0f; + + for (i = 0; i < SIZE; i++) + sum += values[i]; + + return sum; +} + +float +vector_min (void) +{ + size_t i; + float min = values[0]; + + for (i = 0; i < SIZE; i++) + min = __builtin_fminf (min, values[i]); + + return min; +} + +float +vector_max (void) +{ + size_t i; + float max = values[0]; + + for (i = 0; i < SIZE; i++) + max = __builtin_fmaxf (max, values[i]); + + return max; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr48258-2.c b/gcc/testsuite/gcc.target/powerpc/pr48258-2.c new file mode 100644 index 0000000..443fb62 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr48258-2.c @@ -0,0 +1,58 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7 -mabi=altivec -ffast-math -fno-unroll-loops" } */ +/* { dg-final { scan-assembler-times "xvadddp" 1 } } */ +/* { dg-final { scan-assembler-times "xvmindp" 1 } } */ +/* { dg-final { scan-assembler-times "xvmaxdp" 1 } } */ +/* { dg-final { scan-assembler-times "xsadddp" 1 } } */ +/* { dg-final { scan-assembler-times "xsmindp" 1 } } */ +/* { dg-final { scan-assembler-times "xsmaxdp" 1 } } */ +/* { dg-final { scan-assembler-not "xxsldwi" } } */ +/* { dg-final { scan-assembler-not "stvx" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" } } */ +/* { dg-final { scan-assembler-not "stxvw4x" } } */ + +#include <stddef.h> + +#ifndef SIZE +#define SIZE 1024 +#endif + +double values[SIZE] __attribute__((__aligned__(32))); + +double +vector_sum (void) +{ + size_t i; + double sum = 0.0; + + for (i = 0; i < SIZE; i++) + sum += values[i]; + + return sum; +} + +double +vector_min (void) +{ + size_t i; + double min = values[0]; + + for (i = 0; i < SIZE; i++) + min = __builtin_fmin (min, values[i]); + + return min; +} + +double +vector_max (void) +{ + size_t i; + double max = values[0]; + + for (i = 0; i < SIZE; i++) + max = __builtin_fmax (max, values[i]); + + return max; +} |