re PR middle-end/29335 (transcendental functions with constant arguments should be...
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>
Sat, 20 Jan 2007 00:33:00 +0000 (00:33 +0000)
committerKaveh Ghazi <ghazi@gcc.gnu.org>
Sat, 20 Jan 2007 00:33:00 +0000 (00:33 +0000)
PR middle-end/29335
* builtins.c (fold_builtin_1): Handle builtin fdim.

testsuite:
* gcc.dg/torture/builtin-math-3.c: Test fdim.

From-SVN: r120993

gcc/ChangeLog
gcc/builtins.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/builtin-math-3.c

index c4aede67bcbe418f160ffcb8db41411edf62539e..5a9e553c6c575ebdd9c10076258a43e3f8ecf823 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-19  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       PR middle-end/29335
+       * builtins.c (fold_builtin_1): Handle builtin fdim.
+
 2007-01-20  Jan Hubicka  <jh@suse.cz>
 
         * tree-ssa.c (init_tree_ssa): Do not call init_alias_heapvars.
index 82e5a1e7da2080b25f37765f86d259a9da9e6ace..bf57c7bf55e0e96e523cb897d2e3fdafccb82c5d 100644 (file)
@@ -9469,6 +9469,13 @@ fold_builtin_1 (tree fndecl, tree arglist, bool ignore)
                             type, mpfr_atan2);
     break;
 
+    CASE_FLT_FN (BUILT_IN_FDIM):
+      if (validate_arglist (arglist, REAL_TYPE, REAL_TYPE, VOID_TYPE))
+       return do_mpfr_arg2 (TREE_VALUE (arglist),
+                            TREE_VALUE (TREE_CHAIN (arglist)),
+                            type, mpfr_dim);
+    break;
+
     CASE_FLT_FN (BUILT_IN_FMA):
       if (validate_arglist (arglist, REAL_TYPE, REAL_TYPE, REAL_TYPE, VOID_TYPE))
        return do_mpfr_arg3 (TREE_VALUE (arglist),
index 640d3b789ee6ecb81d90ad597c682a1217540be2..e9f9c9f125aaef585f5019b40d57fc969097c867 100644 (file)
@@ -1,3 +1,7 @@
+2007-01-19  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * gcc.dg/torture/builtin-math-3.c: Test fdim.
+
 2007-01-19  Mike Stump  <mrs@apple.com>
 
        * gcc.dg/darwin-ld-6.c: Remove, tests a linker flag that is going
index 67304f8191e55d0ad5196f76a8842e7f16048eb5..b347dccbecc35ad022d16cbfc6ba1546c03cd009 100644 (file)
@@ -294,6 +294,16 @@ int main (void)
   TESTIT2_R (atan2, -1.0, 0.0, -1.58, -1.57); /* atan2(-1,0) == -pi/2 */
   TESTIT2_R (atan2, 1.0, 0.0, 1.57, 1.58); /* atan2(1,0) == pi/2 */
 
+  TESTIT2 (fdim, 0.0, 0.0, 0.0); /* fdim(0,0) == 0 */
+  TESTIT2 (fdim, -0.0, 0.0, 0.0); /* fdim(-0,0) == 0 */
+  TESTIT2 (fdim, 0.0, -0.0, 0.0); /* fdim(0,-0) == 0 */
+  TESTIT2 (fdim, -0.0, -0.0, 0.0); /* fdim(-0,-0) == 0 */
+  TESTIT2 (fdim, 5.0, 5.0, 0.0); /* fdim(5,5) == 0 */
+  TESTIT2 (fdim, 5.0, 6.0, 0.0); /* fdim(5,6) == 0 */
+  TESTIT2 (fdim, 6.0, 5.0, 1.0); /* fdim(6,5) == 1 */
+  TESTIT2 (fdim, -5.0, -6.0, 1.0); /* fdim(-5,-6) == 1 */
+  TESTIT2 (fdim, -6.0, -5.0, 0.0); /* fdim(-6,-5) == 0 */
+
   TESTIT2 (fmin, 5.0, 6.0, 5.0); /* fmin(5,6) == 5 */
   TESTIT2 (fmin, 6.0, 5.0, 5.0); /* fmin(6,5) == 5 */
   TESTIT2 (fmin, -5.0, -6.0, -6.0); /* fmin(-5,-6) == -6 */