On Wed, Nov 13, 2013 at 5:26 PM, Cong Hou <co...@google.com> wrote:
> This patch is for PR58963.
>
> In the patch http://gcc.gnu.org/ml/gcc-patches/2005-02/msg00560.html,
> the builtin function is used to perform complex multiplication and
> division. This is to comply with C99 standard, but I am wondering if
> C++ also needs this.
>
> There is no complex keyword in C++, and no content in C++ standard
> about the behavior of operations on complex types. The <complex>
> header file is all written in source code, including complex
> multiplication and division. GCC should not do too much for them by
> using builtin calls by default (although we can set -fcx-limited-range
> to prevent GCC doing this), which has a big impact on performance
> (there may exist vectorization opportunities).
>
> In this patch flag_complex_method will not be set to 2 for C++.
> Bootstraped and tested on an x86-64 machine.

I think you need to look into this issue deeper as the original patch
only enabled it for C99:
http://gcc.gnu.org/ml/gcc-patches/2005-02/msg01483.html .

Just a little deeper will find
http://gcc.gnu.org/ml/gcc/2007-07/msg00124.html which says yes C++
needs this.

Thanks,
Andrew Pinski

>
>
> thanks,
> Cong
>
>
> Index: gcc/c-family/c-opts.c
> ===================================================================
> --- gcc/c-family/c-opts.c (revision 204712)
> +++ gcc/c-family/c-opts.c (working copy)
> @@ -198,8 +198,10 @@ c_common_init_options_struct (struct gcc
>    opts->x_warn_write_strings = c_dialect_cxx ();
>    opts->x_flag_warn_unused_result = true;
>
> -  /* By default, C99-like requirements for complex multiply and divide.  */
> -  opts->x_flag_complex_method = 2;
> +  /* By default, C99-like requirements for complex multiply and divide.
> +     But for C++ this should not be required.  */
> +  if (c_language != clk_cxx && c_language != clk_objcxx)
> +    opts->x_flag_complex_method = 2;
>  }
>
>  /* Common initialization before calling option handlers.  */
> Index: gcc/c-family/ChangeLog
> ===================================================================
> --- gcc/c-family/ChangeLog (revision 204712)
> +++ gcc/c-family/ChangeLog (working copy)
> @@ -1,3 +1,8 @@
> +2013-11-13  Cong Hou  <co...@google.com>
> +
> + * c-opts.c (c_common_init_options_struct): Don't let C++ comply with
> + C99-like requirements for complex multiply and divide.
> +
>  2013-11-12  Joseph Myers  <jos...@codesourcery.com>
>
>   * c-common.c (c_common_reswords): Add _Thread_local.

Reply via email to