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.