Uros,
this patch fixes the problems in test-case
gcc.target/i386/fuse-caller-save-xmm.c reported in PR 61827. I've removed the
checks for cfi_def_cfa_offset, which were not robust enough for the different
configurations.
Furthermore, I've:
- added checks for all insns that handle the xmm registers, to make sure we're
actually using the xmm1 register.
- fixed the scan-assembler-not lines to allow both %esp and %rsp.
- removed main, which was really only intended for the
fuse-caller-save-xmm-run.c test-case.
Tested with -m32 and -m64.
OK for trunk?
Thanks,
- Tom
2014-07-20 Tom de Vries <t...@codesourcery.com>
PR target/61827
* gcc.target/i386/fuse-caller-save-xmm.c: Add checks for insns with xmm
registers. Remove cfi_def_cfa_offset checks. Generalize checks
containing %rsp.
(main): Remove.
diff --git a/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c b/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c
index ff21f0c..3754b01 100644
--- a/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c
+++ b/gcc/testsuite/gcc.target/i386/fuse-caller-save-xmm.c
@@ -15,23 +15,12 @@ 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;
-}
+/* Check presence of all insns on xmm registers. These checks are expected to
+ pass with both -fuse-caller-save and -fno-use-caller-save. */
+/* { dg-final { scan-assembler-times "addpd\t\\.LC0.*, %xmm0" 1 } } */
+/* { dg-final { scan-assembler-times "addpd\t%xmm1, %xmm0" 1 } } */
+/* { dg-final { scan-assembler-times "movapd\t%xmm0, %xmm1" 1 } } */
-/* { 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 } } */
+/* Check absence of save/restore of xmm1 register. */
+/* { dg-final { scan-assembler-not "movaps\t%xmm1, \\(%.sp\\)" } } */
+/* { dg-final { scan-assembler-not "movapd\t\\(%.sp\\), %xmm1" } } */