On Tue, Oct 20, 2015 at 11:14 AM, Richard Sandiford
<richard.sandif...@arm.com> wrote:
> Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
> OK to install?

Ok.

Thanks,
Richard.

> Thanks,
> Richard
>
>
> gcc/
>         * builtins.c (fold_builtin_tab): Delete.
>         (fold_builtin_1): Handle constant tan arguments here.
>         * match.pd: Simplify (tan (atan x)) to x.
>
> diff --git a/gcc/builtins.c b/gcc/builtins.c
> index 16f3bfd..3244538 100644
> --- a/gcc/builtins.c
> +++ b/gcc/builtins.c
> @@ -160,7 +160,6 @@ static rtx expand_builtin_fabs (tree, rtx, rtx);
>  static rtx expand_builtin_signbit (tree, rtx);
>  static tree fold_builtin_pow (location_t, tree, tree, tree, tree);
>  static tree fold_builtin_powi (location_t, tree, tree, tree, tree);
> -static tree fold_builtin_tan (tree, tree);
>  static tree fold_builtin_trunc (location_t, tree, tree);
>  static tree fold_builtin_floor (location_t, tree, tree);
>  static tree fold_builtin_ceil (location_t, tree, tree);
> @@ -7539,33 +7538,6 @@ fold_fixed_mathfn (location_t loc, tree fndecl, tree 
> arg)
>    return NULL_TREE;
>  }
>
> -/* Fold function call to builtin tan, tanf, or tanl with argument ARG.
> -   Return NULL_TREE if no simplification can be made.  */
> -
> -static tree
> -fold_builtin_tan (tree arg, tree type)
> -{
> -  enum built_in_function fcode;
> -  tree res;
> -
> -  if (!validate_arg (arg, REAL_TYPE))
> -    return NULL_TREE;
> -
> -  /* Calculate the result when the argument is a constant.  */
> -  if ((res = do_mpfr_arg1 (arg, type, mpfr_tan, NULL, NULL, 0)))
> -    return res;
> -
> -  /* Optimize tan(atan(x)) = x.  */
> -  fcode = builtin_mathfn_code (arg);
> -  if (flag_unsafe_math_optimizations
> -      && (fcode == BUILT_IN_ATAN
> -         || fcode == BUILT_IN_ATANF
> -         || fcode == BUILT_IN_ATANL))
> -    return CALL_EXPR_ARG (arg, 0);
> -
> -  return NULL_TREE;
> -}
> -
>  /* Fold function call to builtin sincos, sincosf, or sincosl.  Return
>     NULL_TREE if no simplification can be made.  */
>
> @@ -9613,7 +9585,9 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0)
>        break;
>
>      CASE_FLT_FN (BUILT_IN_TAN):
> -      return fold_builtin_tan (arg0, type);
> +      if (validate_arg (arg0, REAL_TYPE))
> +       return do_mpfr_arg1 (arg0, type, mpfr_tan, NULL, NULL, 0);
> +      break;
>
>      CASE_FLT_FN (BUILT_IN_CEXP):
>        return fold_builtin_cexp (loc, arg0, type);
> diff --git a/gcc/match.pd b/gcc/match.pd
> index 7d16c52..cd02b04 100644
> --- a/gcc/match.pd
> +++ b/gcc/match.pd
> @@ -59,6 +59,7 @@ along with GCC; see the file COPYING3.  If not see
>  (define_operator_list SIN BUILT_IN_SINF BUILT_IN_SIN BUILT_IN_SINL)
>  (define_operator_list COS BUILT_IN_COSF BUILT_IN_COS BUILT_IN_COSL)
>  (define_operator_list TAN BUILT_IN_TANF BUILT_IN_TAN BUILT_IN_TANL)
> +(define_operator_list ATAN BUILT_IN_ATANF BUILT_IN_ATAN BUILT_IN_ATANL)
>  (define_operator_list COSH BUILT_IN_COSHF BUILT_IN_COSH BUILT_IN_COSHL)
>  (define_operator_list CEXPI BUILT_IN_CEXPIF BUILT_IN_CEXPI BUILT_IN_CEXPIL)
>  (define_operator_list CPROJ BUILT_IN_CPROJF BUILT_IN_CPROJ BUILT_IN_CPROJL)
> @@ -2343,7 +2344,14 @@ along with GCC; see the file COPYING3.  If not see
>    /* cbrt(expN(x)) -> expN(x/3).  */
>    (simplify
>     (cbrts (exps @0))
> -   (exps (mult @0 { build_real_truncate (type, dconst_third ()); })))))
> +   (exps (mult @0 { build_real_truncate (type, dconst_third ()); }))))
> +
> + /* tan(atan(x)) -> x.  */
> + (for tans (TAN)
> +      atans (ATAN)
> +  (simplify
> +   (tans (atans @0))
> +   @0)))
>
>  /* cabs(x+0i) or cabs(0+xi) -> abs(x).  */
>  (simplify
>

Reply via email to