mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-19 06:54:14 +08:00
builtins.c (fold_builtin_logarithm): if N can't be truncated to MODE exactly...
* builtins.c (fold_builtin_logarithm): if N can't be truncated to MODE exactly, then only convert logN(N) -> 1.0 if flag_unsafe_math_optimizations is set. From-SVN: r71322
This commit is contained in:
parent
ab01a87cbc
commit
fe27b7cc41
@ -1,5 +1,9 @@
|
||||
2003-09-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* builtins.c (fold_builtin_logarithm): if N can't be truncated to
|
||||
MODE exactly, then only convert logN(N) -> 1.0 if
|
||||
flag_unsafe_math_optimizations is set.
|
||||
|
||||
* builtins.c (builtin_dconsts_init, dconstpi, dconste,
|
||||
init_builtin_dconsts): Delete.
|
||||
* emit-rtl.c (dconstpi, dconste): Define.
|
||||
|
@ -5949,16 +5949,21 @@ fold_builtin_logarithm (tree exp, const REAL_VALUE_TYPE *value)
|
||||
tree type = TREE_TYPE (TREE_TYPE (fndecl));
|
||||
tree arg = TREE_VALUE (arglist);
|
||||
const enum built_in_function fcode = builtin_mathfn_code (arg);
|
||||
const REAL_VALUE_TYPE value_mode =
|
||||
real_value_truncate (TYPE_MODE (type), *value);
|
||||
|
||||
/* Optimize log*(1.0) = 0.0. */
|
||||
if (real_onep (arg))
|
||||
return build_real (type, dconst0);
|
||||
|
||||
/* Optimize logN(N) = 1.0. */
|
||||
if (real_dconstp (arg, &value_mode))
|
||||
return build_real (type, dconst1);
|
||||
/* Optimize logN(N) = 1.0. If N can't be truncated to MODE
|
||||
exactly, then only do this if flag_unsafe_math_optimizations. */
|
||||
if (exact_real_truncate (TYPE_MODE (type), value)
|
||||
|| flag_unsafe_math_optimizations)
|
||||
{
|
||||
const REAL_VALUE_TYPE value_truncate =
|
||||
real_value_truncate (TYPE_MODE (type), *value);
|
||||
if (real_dconstp (arg, &value_truncate))
|
||||
return build_real (type, dconst1);
|
||||
}
|
||||
|
||||
/* Special case, optimize logN(expN(x)) = x. */
|
||||
if (flag_unsafe_math_optimizations
|
||||
|
Loading…
Reference in New Issue
Block a user