On Fri, May 24, 2013 at 12:53 PM, Andrew Hsieh <andrewhs...@google.com> wrote:
> Bionic prior to Gingerbread doesn't support sincos*, but upstream GCC
> enables sincos optimization for OPTION_BIONIC unconditionally since
> 4.6.  I'd like to propose a new flag -foptimize-sincos for NDK to
> maintain backward compatibility.
>
> 1. For BIONIC: sincos optimization is disabled by default.  Apps built
> for Gingerbread+ or AOSP platform build which uses the same compiler
> as NDK, can add -foptimize-sincos to enhance performance.  (although
> it's likely that only benchmarks may benefit)
>
> 2. Other C libs aren't affected.  sincos optimization is enabled for
> GLIBC and disabled for othres, regardless of this flag.

That's a pretty awful option name for one that makes us assume the target
C library has a sincos function.

I'd rather think about a way to specify, for all known builtins, whether GCC
should generate calls to such function where they are not in the source
program.  That is, similar to how we have -f[no-]builtin-FOO introduce
-f[no-]libc-FOO (with a better name for 'libc'?).  That way there would be
a way to specify that -floop-distribute-patterns should not produce calls
to memset () for example.

Richard.

> ====
> Index: gcc/common.opt
> ===================================================================
> --- gcc/common.opt (revision 199277)
> +++ gcc/common.opt (working copy)
> @@ -1591,6 +1591,10 @@
>  Common Report Var(flag_optimize_sibling_calls) Optimization
>  Optimize sibling and tail recursive calls
>
> +foptimize-sincos
> +Common Report Var(flag_optimize_sincos) Optimization
> +Optimize calls to sin() and cos() with the same argument to sincos()
> +
>  fpartial-inlining
>  Common Report Var(flag_partial_inlining)
>  Perform partial inlining
> Index: gcc/doc/invoke.texi
> ===================================================================
> --- gcc/doc/invoke.texi (revision 199277)
> +++ gcc/doc/invoke.texi (working copy)
> @@ -388,7 +388,7 @@
>  -fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
>  -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
>  -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol
> --fpartial-inlining -fpeel-loops -fpredictive-commoning @gol
> +-foptimize-sincos -fpartial-inlining -fpeel-loops -fpredictive-commoning @gol
>  -fprefetch-loop-arrays -fprofile-report @gol
>  -fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol
>  -fprofile-generate=@var{path} @gol
> @@ -6586,6 +6586,7 @@
>  -fipa-profile @gol
>  -fipa-reference @gol
>  -fmerge-constants
> +-foptimize-sincos @gol
>  -fsplit-wide-types @gol
>  -ftree-bit-ccp @gol
>  -ftree-builtin-call-dce @gol
> @@ -6772,6 +6773,12 @@
>
>  Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
>
> +@item -foptimize-sincos
> +@opindex foptimize-sincos
> +Optimize calls to sin() and cos() with the same argument to sincos()
> +
> +Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
> +
>  @item -fno-inline
>  @opindex fno-inline
>  Do not expand any functions inline apart from those marked with
> Index: gcc/config/linux.h
> ===================================================================
> --- gcc/config/linux.h (revision 199277)
> +++ gcc/config/linux.h (working copy)
> @@ -102,7 +102,7 @@
>
>  /* Whether we have sincos that follows the GNU extension.  */
>  #undef TARGET_HAS_SINCOS
> -#define TARGET_HAS_SINCOS (OPTION_GLIBC || OPTION_BIONIC)
> +#define TARGET_HAS_SINCOS (OPTION_GLIBC || (OPTION_BIONIC &&
> flag_optimize_sincos))
>
>  /* Whether we have Bionic libc runtime */
>  #undef TARGET_HAS_BIONIC

Reply via email to