diff options
author | Roger Sayle <roger@eyesopen.com> | 2003-06-10 13:05:54 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2003-06-10 13:05:54 +0000 |
commit | 9f0a7f9dccbf2317fdb4f489b737f37ff30ba996 (patch) | |
tree | c3bfed8bf44d2e144c58458d3cfa991de969b782 /gcc/builtins.c | |
parent | 8936c82f1ea5c9146ca32ac5c75ab166d242cf0d (diff) | |
download | gcc-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.c | 8 |
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; |