This is the mail archive of the
mailing list for the GCC project.
[PATCH] Do not set flag_complex_method to 2 for C++ by default.
- From: Cong Hou <congh at google dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 13 Nov 2013 17:26:25 -0800
- Subject: [PATCH] Do not set flag_complex_method to 2 for C++ by default.
- Authentication-results: sourceware.org; auth=none
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.
--- 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. */
--- gcc/c-family/ChangeLog (revision 204712)
+++ gcc/c-family/ChangeLog (working copy)
@@ -1,3 +1,8 @@
+2013-11-13 Cong Hou <email@example.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 <firstname.lastname@example.org>
* c-common.c (c_common_reswords): Add _Thread_local.