aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2003-06-10 13:05:54 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2003-06-10 13:05:54 +0000
commit9f0a7f9dccbf2317fdb4f489b737f37ff30ba996 (patch)
treec3bfed8bf44d2e144c58458d3cfa991de969b782 /gcc/builtins.c
parent8936c82f1ea5c9146ca32ac5c75ab166d242cf0d (diff)
downloadgcc-9f0a7f9dccbf2317fdb4f489b737f37ff30ba996.zip
gcc-9f0a7f9dccbf2317fdb4f489b737f37ff30ba996.tar.gz
gcc-9f0a7f9dccbf2317fdb4f489b737f37ff30ba996.tar.bz2
builtins.c (fold_builtin): Optimize cos(-x) as cos(x).
* builtins.c (fold_builtin): Optimize cos(-x) as cos(x). * fold-const.c (fold <NEGATE_EXPR>): Convert -f(x) into f(-x) when x is easily negated and f is sin, tan or atan. (fold <MULT_EXPR>): Optimize tan(x)*cos(x) and cos(x)*tan(x) as sin(x) with flag_unsafe_math_optimizations. (fold <RDIV_EXPR>): With flag_unsafe_math_optimizations fold sin(x)/cos(x) as tan(x) and cos(x)/sin(x) as 1.0/tan(x). * gcc.dg/builtins-20.c: New test case. From-SVN: r67701
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 79d46bc..9c5a18b 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -5346,6 +5346,14 @@ fold_builtin (exp)
/* Optimize cos(0.0) = 1.0. */
if (real_zerop (arg))
return build_real (type, dconst1);
+
+ /* Optimize cos(-x) into cos(x). */
+ if (TREE_CODE (arg) == NEGATE_EXPR)
+ {
+ tree arglist = build_tree_list (NULL_TREE,
+ TREE_OPERAND (arg, 0));
+ return build_function_call_expr (fndecl, arglist);
+ }
}
break;