From a35074775f15b85a4699fce297d7cf49af0473c1 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 26 Sep 2005 21:19:43 +0200 Subject: [PATCH] re PR target/22576 (ICE with simple factorial program compiled with -ffast-math on gcc 4.0.2) 2005-08-26 Uros Bizjak * gcc.target/i386/builtin-apply-mmx.c: New test. PR target/22576 * gcc.target/i386/pr22576.c: New test. PR target/22585 * gcc.target/i386/pr22585.c: New test. PR target/23268 * gcc.target/i386/pr23268.c: New test. From-SVN: r104656 --- gcc/testsuite/ChangeLog | 11 ++++ .../gcc.target/i386/builtin-apply-mmx.c | 51 +++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr22576.c | 10 ++++ gcc/testsuite/gcc.target/i386/pr22585.c | 11 ++++ gcc/testsuite/gcc.target/i386/pr23268.c | 13 +++++ 5 files changed, 96 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/builtin-apply-mmx.c create mode 100644 gcc/testsuite/gcc.target/i386/pr22576.c create mode 100644 gcc/testsuite/gcc.target/i386/pr22585.c create mode 100644 gcc/testsuite/gcc.target/i386/pr23268.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d397b2d2229..9725d207359 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,16 @@ 2005-09-26 Uros Bizjak + * gcc.target/i386/builtin-apply-mmx.c: New test. + + PR target/22576 + * gcc.target/i386/pr22576.c: New test. + + PR target/22585 + * gcc.target/i386/pr22585.c: New test. + + PR target/23268 + * gcc.target/i386/pr23268.c: New test. + PR middle-end/23831 * gcc.dg/vect/pr23831.c: New test. diff --git a/gcc/testsuite/gcc.target/i386/builtin-apply-mmx.c b/gcc/testsuite/gcc.target/i386/builtin-apply-mmx.c new file mode 100644 index 00000000000..4762140f13d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/builtin-apply-mmx.c @@ -0,0 +1,51 @@ +/* __builtin_apply_args () and __builtin_return () built-in functions does + not function properly when -mmmx is used in compile flags. + __builtin_apply_args () saves all registers that pass arguments to a + function, including %mm0-%mm3, to a memory block, and __builtin_return () + restores %mm0, from a return memory block, as it can be used as a + function return register. Unfortunatelly, when MMX registers are touched, + i387 FPU switches to MMX mode, and no FP operation is possible until emms + instruction is issued. */ + +/* This test case is adapted from gcc.dg/builtin-apply4.c. */ + +/* { dg-do run { xfail "*-*-*" } } */ +/* { dg-options "-O2 -mmmx" } */ + +#include "../../gcc.dg/i386-cpuid.h" + +extern void abort (void); + +double +foo (double arg) +{ + if (arg != 116.0) + abort (); + + return arg + 1.0; +} + +inline double +bar (double arg) +{ + foo (arg); + __builtin_return (__builtin_apply ((void (*)()) foo, + __builtin_apply_args (), 16)); +} + +int +main (int argc, char **argv) +{ + unsigned long cpu_facilities; + + cpu_facilities = i386_cpuid (); + + if (!(cpu_facilities & bit_MMX)) + /* If host has no MMX support, pass. */ + return 0; + + if (bar (116.0) != 117.0) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr22576.c b/gcc/testsuite/gcc.target/i386/pr22576.c new file mode 100644 index 00000000000..083fbf648c9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr22576.c @@ -0,0 +1,10 @@ +/* PR target/22576 */ +/* Testcase reduced by Volker Reichelt */ +/* { dg-do compile } */ +/* { dg-options "-ffast-math" } */ + +int +foo (long double d) +{ + return d == 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr22585.c b/gcc/testsuite/gcc.target/i386/pr22585.c new file mode 100644 index 00000000000..879ba665553 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr22585.c @@ -0,0 +1,11 @@ +/* PR target/22585 */ +/* Testcase reduced by Volker Reichelt */ +/* { dg-do compile } */ +/* { dg-options "-march=i386 -O -ffast-math" } */ + +int +foo (long double d, int i) +{ + if (d == (long double) i) + return 1; +} diff --git a/gcc/testsuite/gcc.target/i386/pr23268.c b/gcc/testsuite/gcc.target/i386/pr23268.c new file mode 100644 index 00000000000..b5645b2974e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr23268.c @@ -0,0 +1,13 @@ +/* PR target/23268 */ +/* Testcase reduced by Andrew Pinski */ +/* { dg-do compile } */ +/* { dg-options "-O1 -ffast-math" } */ + +int +f (float x) +{ + int a, b; + a = __builtin_log (2.f); + b = __builtin_lrint (x); + return (a + b); +} -- 2.30.2