diff options
author | Kaveh R. Ghazi <ghazi@caip.rutgers.edu> | 2008-03-26 15:04:44 +0000 |
---|---|---|
committer | Kaveh Ghazi <ghazi@gcc.gnu.org> | 2008-03-26 15:04:44 +0000 |
commit | aefa9d43dcc6925454a258b8107e91462e60beac (patch) | |
tree | 974dfbada45151a1464bb76ba72bf9e40597ea73 /gcc/builtins.c | |
parent | 35dd7cc326a43e7323effe52421eb237701ee71b (diff) | |
download | gcc-aefa9d43dcc6925454a258b8107e91462e60beac.zip gcc-aefa9d43dcc6925454a258b8107e91462e60beac.tar.gz gcc-aefa9d43dcc6925454a258b8107e91462e60beac.tar.bz2 |
builtins.c (expand_builtin_pow, [...]): Remove uses of dconst3, dconstsqrt2, dconstthird, dconste and/or dconst10.
* builtins.c (expand_builtin_pow, fold_builtin_cabs,
fold_builtin_sqrt, fold_builtin_cbrt, fold_builtin_logarithm,
fold_builtin_hypot, fold_builtin_pow): Remove uses of dconst3,
dconstsqrt2, dconstthird, dconste and/or dconst10.
* config/i386/i386.c (ix86_emit_swsqrtsf): Likewise.
* emit-rtl.c (dconst3, dconst10, dconstm2, dconstthird,
dconstsqrt2, dconste): Delete.
(init_emit_once): Likewise. Simplify initializing dconstm1.
Constify variable.
* real.c (get_real_const): New.
* real.h (dconst3, dconst10, dconstm2, dconstthird,
dconstsqrt2, dconste): Delete.
(real_value_const, get_real_const): New.
From-SVN: r133607
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index 31b9df2..d07fed8 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -2983,6 +2983,8 @@ expand_builtin_pow (tree exp, rtx target, rtx subtarget) && (tree_expr_nonnegative_p (arg0) || !HONOR_NANS (mode))) { + REAL_VALUE_TYPE dconst3; + real_from_integer (&dconst3, VOIDmode, 3, 0, 0); real_arithmetic (&c2, MULT_EXPR, &c, &dconst3); real_round (&c2, mode, &c2); n = real_to_integer (&c2); @@ -7458,7 +7460,8 @@ fold_builtin_cabs (tree arg, tree type, tree fndecl) && operand_equal_p (real, imag, OEP_PURE_SAME)) { const REAL_VALUE_TYPE sqrt2_trunc - = real_value_truncate (TYPE_MODE (type), dconstsqrt2); + = real_value_truncate (TYPE_MODE (type), + *get_real_const (rv_sqrt2)); STRIP_NOPS (real); return fold_build2 (MULT_EXPR, type, fold_build1 (ABS_EXPR, type, real), @@ -7541,7 +7544,7 @@ fold_builtin_sqrt (tree arg, tree type) tree tree_root; /* The inner root was either sqrt or cbrt. */ REAL_VALUE_TYPE dconstroot = - BUILTIN_SQRT_P (fcode) ? dconsthalf : dconstthird; + BUILTIN_SQRT_P (fcode) ? dconsthalf : *get_real_const (rv_third); /* Adjust for the outer root. */ SET_REAL_EXP (&dconstroot, REAL_EXP (&dconstroot) - 1); @@ -7594,7 +7597,7 @@ fold_builtin_cbrt (tree arg, tree type) { tree expfn = TREE_OPERAND (CALL_EXPR_FN (arg), 0); const REAL_VALUE_TYPE third_trunc = - real_value_truncate (TYPE_MODE (type), dconstthird); + real_value_truncate (TYPE_MODE (type), *get_real_const (rv_third)); arg = fold_build2 (MULT_EXPR, type, CALL_EXPR_ARG (arg, 0), build_real (type, third_trunc)); @@ -7610,7 +7613,7 @@ fold_builtin_cbrt (tree arg, tree type) { tree arg0 = CALL_EXPR_ARG (arg, 0); tree tree_root; - REAL_VALUE_TYPE dconstroot = dconstthird; + REAL_VALUE_TYPE dconstroot = *get_real_const (rv_third); SET_REAL_EXP (&dconstroot, REAL_EXP (&dconstroot) - 1); dconstroot = real_value_truncate (TYPE_MODE (type), dconstroot); @@ -7632,7 +7635,9 @@ fold_builtin_cbrt (tree arg, tree type) tree tree_root; REAL_VALUE_TYPE dconstroot; - real_arithmetic (&dconstroot, MULT_EXPR, &dconstthird, &dconstthird); + real_arithmetic (&dconstroot, MULT_EXPR, + get_real_const (rv_third), + get_real_const (rv_third)); dconstroot = real_value_truncate (TYPE_MODE (type), dconstroot); tree_root = build_real (type, dconstroot); return build_call_expr (powfn, 2, arg0, tree_root); @@ -7651,7 +7656,8 @@ fold_builtin_cbrt (tree arg, tree type) { tree powfn = TREE_OPERAND (CALL_EXPR_FN (arg), 0); const REAL_VALUE_TYPE dconstroot - = real_value_truncate (TYPE_MODE (type), dconstthird); + = real_value_truncate (TYPE_MODE (type), + *get_real_const (rv_third)); tree narg01 = fold_build2 (MULT_EXPR, type, arg01, build_real (type, dconstroot)); return build_call_expr (powfn, 2, arg00, narg01); @@ -8199,7 +8205,7 @@ fold_builtin_logarithm (tree fndecl, tree arg, if (flag_unsafe_math_optimizations && func == mpfr_log) { const REAL_VALUE_TYPE e_truncated = - real_value_truncate (TYPE_MODE (type), dconste); + real_value_truncate (TYPE_MODE (type), *get_real_const (rv_e)); if (real_dconstp (arg, &e_truncated)) return build_real (type, dconst1); } @@ -8233,7 +8239,8 @@ fold_builtin_logarithm (tree fndecl, tree arg, CASE_FLT_FN (BUILT_IN_EXP): /* Prepare to do logN(exp(exponent) -> exponent*logN(e). */ x = build_real (type, - real_value_truncate (TYPE_MODE (type), dconste)); + real_value_truncate (TYPE_MODE (type), + *get_real_const (rv_e))); exponent = CALL_EXPR_ARG (arg, 0); break; CASE_FLT_FN (BUILT_IN_EXP2): @@ -8244,7 +8251,11 @@ fold_builtin_logarithm (tree fndecl, tree arg, CASE_FLT_FN (BUILT_IN_EXP10): CASE_FLT_FN (BUILT_IN_POW10): /* Prepare to do logN(exp10(exponent) -> exponent*logN(10). */ - x = build_real (type, dconst10); + { + REAL_VALUE_TYPE dconst10; + real_from_integer (&dconst10, VOIDmode, 10, 0, 0); + x = build_real (type, dconst10); + } exponent = CALL_EXPR_ARG (arg, 0); break; CASE_FLT_FN (BUILT_IN_SQRT): @@ -8256,7 +8267,7 @@ fold_builtin_logarithm (tree fndecl, tree arg, /* Prepare to do logN(cbrt(x) -> (1/3)*logN(x). */ x = CALL_EXPR_ARG (arg, 0); exponent = build_real (type, real_value_truncate (TYPE_MODE (type), - dconstthird)); + *get_real_const (rv_third))); break; CASE_FLT_FN (BUILT_IN_POW): /* Prepare to do logN(pow(x,exponent) -> exponent*logN(x). */ @@ -8316,7 +8327,7 @@ fold_builtin_hypot (tree fndecl, tree arg0, tree arg1, tree type) && operand_equal_p (arg0, arg1, OEP_PURE_SAME)) { const REAL_VALUE_TYPE sqrt2_trunc - = real_value_truncate (TYPE_MODE (type), dconstsqrt2); + = real_value_truncate (TYPE_MODE (type), *get_real_const (rv_sqrt2)); return fold_build2 (MULT_EXPR, type, fold_build1 (ABS_EXPR, type, arg0), build_real (type, sqrt2_trunc)); @@ -8382,7 +8393,8 @@ fold_builtin_pow (tree fndecl, tree arg0, tree arg1, tree type) if (flag_unsafe_math_optimizations) { const REAL_VALUE_TYPE dconstroot - = real_value_truncate (TYPE_MODE (type), dconstthird); + = real_value_truncate (TYPE_MODE (type), + *get_real_const (rv_third)); if (REAL_VALUES_EQUAL (c, dconstroot)) { @@ -8449,7 +8461,8 @@ fold_builtin_pow (tree fndecl, tree arg0, tree arg1, tree type) if (tree_expr_nonnegative_p (arg)) { const REAL_VALUE_TYPE dconstroot - = real_value_truncate (TYPE_MODE (type), dconstthird); + = real_value_truncate (TYPE_MODE (type), + *get_real_const (rv_third)); tree narg1 = fold_build2 (MULT_EXPR, type, arg1, build_real (type, dconstroot)); return build_call_expr (fndecl, 2, arg, narg1); |