summaryrefslogtreecommitdiffstats
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-01 14:59:15 +0000
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-01 14:59:15 +0000
commit27f261ef4818d094a7aac1d249a64fc96d9a9ca5 (patch)
tree5685a3fc60b869436c4a4d9ec1766345aa482fd1 /gcc/testsuite
parent53fddb7b4c0ef09c304899ab28441d0289226753 (diff)
downloadppe42-gcc-27f261ef4818d094a7aac1d249a64fc96d9a9ca5.tar.gz
ppe42-gcc-27f261ef4818d094a7aac1d249a64fc96d9a9ca5.zip
* builtins.def (BUILT_IN_SIGNBIT, BUILT_IN_SIGNBITF,
BUILT_IN_SIGNBITL): New GCC builtins. * builtins.c (expand_builtin_signbit): New function to RTL expand calls to signbit, signbitf and signbitl as inline intrinsics. (expand_builtin): Call expand_builtin_signbit for BUILT_IN_SIGNBIT*. (fold_builtin_signbit): New function to perform constant folding of signbit, signbitf and signbitl. (fold_builtin): Call fold_builtin_signbit for BUILT_IN_SIGNBIT*. * doc/extend.texi: Document new signbit{,f,l} builtins. * gcc.dg/builtins-1.c: Also test for __builtin_signbit{,f,l}. * gcc.dg/builtins-31.c: New testcase. * gcc.dg/builtins-32.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77070 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/builtins-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/builtins-31.c36
-rw-r--r--gcc/testsuite/gcc.dg/builtins-32.c40
4 files changed, 83 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 18aa48b5553..afd9ce64f24 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2004-02-01 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.dg/builtins-1.c: Also test for __builtin_signbit{,f,l}.
+ * gcc.dg/builtins-31.c: New testcase.
+ * gcc.dg/builtins-32.c: New testcase.
+
2004-01-30 Andrew Pinski <pinskia@physics.uc.edu>
* objc.dg/call-super-2.m: Update line numbers
diff --git a/gcc/testsuite/gcc.dg/builtins-1.c b/gcc/testsuite/gcc.dg/builtins-1.c
index 41bd8d5788c..18c45d1419b 100644
--- a/gcc/testsuite/gcc.dg/builtins-1.c
+++ b/gcc/testsuite/gcc.dg/builtins-1.c
@@ -165,6 +165,7 @@ FPTEST1 (round)
FPTEST2 (scalb)
FPTEST2ARG2 (scalbln, int)
FPTEST2ARG2 (scalbn, int)
+FPTEST1RET (signbit, int)
FPTEST1 (significand)
FPTEST1 (sin)
FPTEST3FPP23VOID (sincos)
diff --git a/gcc/testsuite/gcc.dg/builtins-31.c b/gcc/testsuite/gcc.dg/builtins-31.c
new file mode 100644
index 00000000000..6e1bda0b7ba
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtins-31.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2004 Free Software Foundation.
+
+ Check that constant folding of signbit, signbitf and signbitl math
+ functions doesn't break anything and produces the expected results.
+
+ Written by Roger Sayle, 28th January 2004. */
+
+/* { dg-do link } */
+/* { dg-options "-O2" } */
+
+extern void link_error(void);
+
+extern int signbit(double);
+extern int signbitf(float);
+extern int signbitl(long double);
+
+int main()
+{
+ if (signbit (1.0) != 0)
+ link_error ();
+ if (signbit (-2.0) == 0)
+ link_error ();
+
+ if (signbitf (1.0f) != 0)
+ link_error ();
+ if (signbitf (-2.0f) == 0)
+ link_error ();
+
+ if (signbitl (1.0l) != 0)
+ link_error ();
+ if (signbitl (-2.0f) == 0)
+ link_error ();
+
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.dg/builtins-32.c b/gcc/testsuite/gcc.dg/builtins-32.c
new file mode 100644
index 00000000000..3a35dc6dfe9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtins-32.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2004 Free Software Foundation.
+
+ Check that constant folding of signbit, signbitf and signbitl math
+ functions doesn't break anything and produces the expected results.
+
+ Written by Roger Sayle, 28th January 2004. */
+
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+extern void abort(void);
+
+extern int signbit(double);
+extern int signbitf(float);
+
+int test (double x)
+{
+ return signbit(x);
+}
+
+int testf (float x)
+{
+ return signbitf(x);
+}
+
+int main()
+{
+ if (test (1.0) != 0)
+ abort ();
+ if (test (-2.0) == 0)
+ abort ();
+
+ if (testf (1.0f) != 0)
+ abort ();
+ if (testf (-2.0f) == 0)
+ abort ();
+
+ return 0;
+}
+
OpenPOWER on IntegriCloud