diff options
author | Tom de Vries <tom@codesourcery.com> | 2014-07-13 14:32:01 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2014-07-13 14:32:01 +0000 |
commit | 9c2c4e622cfb5d3ea800d094bc3e89ddfd7a3374 (patch) | |
tree | 4d38107553db66193e9bfe78ea639f45e2e3965e /gcc | |
parent | c6abdc366af68c28e3e8da236dfa7037be38971e (diff) | |
download | gcc-9c2c4e622cfb5d3ea800d094bc3e89ddfd7a3374.zip gcc-9c2c4e622cfb5d3ea800d094bc3e89ddfd7a3374.tar.gz gcc-9c2c4e622cfb5d3ea800d094bc3e89ddfd7a3374.tar.bz2 |
Add xmm-register version of fuse-caller-save testcase
2014-07-13 Tom de Vries <tom@codesourcery.com>
* gcc.target/i386/fuse-caller-save-xmm-run.c: New test.
* gcc.target/i386/fuse-caller-save-xmm.c: New test.
From-SVN: r212495
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm-run.c | 32 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c | 37 |
3 files changed, 74 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac43425..43adb47 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-07-13 Tom de Vries <tom@codesourcery.com> + + * gcc.target/i386/fuse-caller-save-xmm-run.c: New test. + * gcc.target/i386/fuse-caller-save-xmm.c: New test. + 2014-07-13 Edward Smith-Rowland <3dw4rd@verizon.net> PR C++/60209 - Declaration of user-defined literal operator cause error diff --git a/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm-run.c b/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm-run.c new file mode 100644 index 0000000..66b133c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm-run.c @@ -0,0 +1,32 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -msse -fuse-caller-save" } */ + +typedef double v2df __attribute__((vector_size (16))); + +static v2df __attribute__((noinline)) +bar (v2df a) +{ + return a + (v2df){ 3.0, 3.0 }; +} + +v2df __attribute__((noinline)) +foo (v2df y) +{ + return y + bar (y); +} + +int +main (void) +{ + int success; + union { + v2df v; + double d[2]; + } u; + + u.v = foo ((v2df){ 5.0, 5.0}); + success = (u.d[0] == 13.0 + && u.d[1] == 13.0); + + return !success; +} diff --git a/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c b/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c new file mode 100644 index 0000000..ff21f0c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -msse -fuse-caller-save" } */ + +typedef double v2df __attribute__((vector_size (16))); + +static v2df __attribute__((noinline)) +bar (v2df a) +{ + return a + (v2df){ 3.0, 3.0 }; +} + +v2df __attribute__((noinline)) +foo (v2df y) +{ + return y + bar (y); +} + +int +main (void) +{ + int success; + union { + v2df v; + double d[2]; + } u; + + u.v = foo ((v2df){ 5.0, 5.0}); + success = (u.d[0] == 13.0 + && u.d[1] == 13.0); + + return !success; +} + +/* { dg-final { scan-assembler-not "movaps\t%xmm1, \\(%rsp\\)" } } */ +/* { dg-final { scan-assembler-not "movapd\t\\(%rsp\\), %xmm1" } } */ +/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 16" 1 } } */ +/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 32" 1 } } */ |