public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
@ 2005-10-07 3:26 ` gdr at gcc dot gnu dot org
2006-02-03 21:56 ` jason at gcc dot gnu dot org
` (7 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: gdr at gcc dot gnu dot org @ 2005-10-07 3:26 UTC (permalink / raw)
To: gcc-bugs
--
gdr at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|3.4.5 |3.4.6
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
2005-10-07 3:26 ` [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided gdr at gcc dot gnu dot org
@ 2006-02-03 21:56 ` jason at gcc dot gnu dot org
2006-02-03 21:59 ` [Bug c++/16405] [3.4/4.1/4.2 " pinskia at gcc dot gnu dot org
` (6 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: jason at gcc dot gnu dot org @ 2006-02-03 21:56 UTC (permalink / raw)
To: gcc-bugs
------- Comment #9 from jason at gcc dot gnu dot org 2006-02-03 21:56 -------
Disabling this optimization for now, so this is again a regression in 4.1 and
4.2.
--
jason at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|mark at codesourcery dot com|jason at gcc dot gnu dot org
Known to fail|3.4.3 |3.4.3 4.1.0 4.2.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] [3.4/4.1/4.2 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
2005-10-07 3:26 ` [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided gdr at gcc dot gnu dot org
2006-02-03 21:56 ` jason at gcc dot gnu dot org
@ 2006-02-03 21:59 ` pinskia at gcc dot gnu dot org
2006-02-03 21:59 ` pinskia at gcc dot gnu dot org
` (5 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-02-03 21:59 UTC (permalink / raw)
To: gcc-bugs
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|[3.4 Regression] Temporary |[3.4/4.1/4.2 Regression]
|aggregate copy not elided |Temporary aggregate copy not
| |elided
Target Milestone|3.4.6 |4.1.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] [3.4/4.1/4.2 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
` (2 preceding siblings ...)
2006-02-03 21:59 ` [Bug c++/16405] [3.4/4.1/4.2 " pinskia at gcc dot gnu dot org
@ 2006-02-03 21:59 ` pinskia at gcc dot gnu dot org
2006-02-09 9:54 ` jason at gcc dot gnu dot org
` (4 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-02-03 21:59 UTC (permalink / raw)
To: gcc-bugs
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P2 |P3
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] [3.4/4.1/4.2 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
` (3 preceding siblings ...)
2006-02-03 21:59 ` pinskia at gcc dot gnu dot org
@ 2006-02-09 9:54 ` jason at gcc dot gnu dot org
2006-02-09 13:35 ` [Bug c++/16405] [3.4/4.1 " pinskia at gcc dot gnu dot org
` (3 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: jason at gcc dot gnu dot org @ 2006-02-09 9:54 UTC (permalink / raw)
To: gcc-bugs
------- Comment #10 from jason at gcc dot gnu dot org 2006-02-09 09:54 -------
Subject: Bug 16405
Author: jason
Date: Thu Feb 9 09:54:36 2006
New Revision: 110789
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110789
Log:
PR c++/25979
* tree.def: Elaborate on difference from MODIFY_EXPR.
* doc/c-tree.texi (INIT_EXPR): Likewise.
* gimplify.c (internal_get_tmp_var): Use INIT_EXPR.
(gimplify_decl_expr, gimplify_init_ctor_eval): Likewise.
(gimplify_target_expr): Likewise.
(gimplify_cond_expr): Remove target handling.
(gimplify_modify_expr): Don't clobber INIT_EXPR code here.
(gimplify_expr): Clobber it here.
(gimplify_modify_expr_rhs): Push assignment into COND_EXPR here.
Do return slot optimization if we have an INIT_EXPR.
PR tree-opt/24365
* tree-inline.c (declare_return_variable): Also clear
DECL_COMPLEX_GIMPLE_REG_P as needed in the modify_dest case.
PR c++/16405
* gimplify.c (gimplify_modify_expr_rhs): Re-enable *& handling.
PR middle-end/22439
* gimplify.c (gimplify_one_sizepos): Fix typo.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/cp-gimplify.c
trunk/gcc/cp/typeck2.c
trunk/gcc/doc/c-tree.texi
trunk/gcc/gimplify.c
trunk/gcc/testsuite/g++.dg/opt/temp1.C
trunk/gcc/tree-inline.c
trunk/gcc/tree.def
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] [3.4/4.1 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
` (4 preceding siblings ...)
2006-02-09 9:54 ` jason at gcc dot gnu dot org
@ 2006-02-09 13:35 ` pinskia at gcc dot gnu dot org
2006-02-10 17:32 ` jason at gcc dot gnu dot org
` (2 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-02-09 13:35 UTC (permalink / raw)
To: gcc-bugs
------- Comment #11 from pinskia at gcc dot gnu dot org 2006-02-09 13:35 -------
Fixed on the mainline at least for now.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to fail|3.4.3 4.1.0 4.2.0 |3.4.3 4.1.0
Known to work|3.3.4 3.3.2 4.0.0 |3.3.4 3.3.2 4.0.0 4.2.0
Summary|[3.4/4.1/4.2 Regression] |[3.4/4.1 Regression]
|Temporary aggregate copy not|Temporary aggregate copy not
|elided |elided
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] [3.4/4.1 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
` (5 preceding siblings ...)
2006-02-09 13:35 ` [Bug c++/16405] [3.4/4.1 " pinskia at gcc dot gnu dot org
@ 2006-02-10 17:32 ` jason at gcc dot gnu dot org
2006-02-10 23:08 ` [Bug c++/16405] [3.4 " pinskia at gcc dot gnu dot org
2006-02-28 9:36 ` gdr at gcc dot gnu dot org
8 siblings, 0 replies; 13+ messages in thread
From: jason at gcc dot gnu dot org @ 2006-02-10 17:32 UTC (permalink / raw)
To: gcc-bugs
------- Comment #12 from jason at gcc dot gnu dot org 2006-02-10 17:32 -------
Subject: Bug 16405
Author: jason
Date: Fri Feb 10 17:32:10 2006
New Revision: 110838
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110838
Log:
PR c++/25979
* tree.def: Elaborate on difference from MODIFY_EXPR.
* doc/c-tree.texi (INIT_EXPR): Likewise.
* gimplify.c (internal_get_tmp_var): Use INIT_EXPR.
(gimplify_decl_expr, gimplify_init_ctor_eval): Likewise.
(gimplify_target_expr): Likewise.
(gimplify_cond_expr): Remove target handling.
(gimplify_modify_expr): Don't clobber INIT_EXPR code here.
(gimplify_expr): Clobber it here.
(gimplify_modify_expr_rhs): Push assignment into COND_EXPR here.
Do return slot optimization if we have an INIT_EXPR.
PR tree-opt/24365
* tree-inline.c (declare_return_variable): Also clear
DECL_COMPLEX_GIMPLE_REG_P as needed in the modify_dest case.
PR c++/16405
* gimplify.c (gimplify_modify_expr_rhs): Re-enable *& handling.
PR middle-end/22439
* gimplify.c (gimplify_one_sizepos): Fix typo.
Modified:
branches/gcc-4_1-branch/gcc/ChangeLog
branches/gcc-4_1-branch/gcc/cp/ChangeLog
branches/gcc-4_1-branch/gcc/cp/cp-gimplify.c
branches/gcc-4_1-branch/gcc/cp/typeck2.c
branches/gcc-4_1-branch/gcc/doc/c-tree.texi
branches/gcc-4_1-branch/gcc/gimplify.c
branches/gcc-4_1-branch/gcc/testsuite/g++.dg/opt/temp1.C
branches/gcc-4_1-branch/gcc/tree-inline.c
branches/gcc-4_1-branch/gcc/tree.def
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
` (6 preceding siblings ...)
2006-02-10 17:32 ` jason at gcc dot gnu dot org
@ 2006-02-10 23:08 ` pinskia at gcc dot gnu dot org
2006-02-28 9:36 ` gdr at gcc dot gnu dot org
8 siblings, 0 replies; 13+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-02-10 23:08 UTC (permalink / raw)
To: gcc-bugs
------- Comment #13 from pinskia at gcc dot gnu dot org 2006-02-10 23:08 -------
Fixed now in 4.1.0 also.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|[3.4/4.1 Regression] |[3.4 Regression] Temporary
|Temporary aggregate copy not|aggregate copy not elided
|elided |
Target Milestone|4.1.0 |3.4.6
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
` (7 preceding siblings ...)
2006-02-10 23:08 ` [Bug c++/16405] [3.4 " pinskia at gcc dot gnu dot org
@ 2006-02-28 9:36 ` gdr at gcc dot gnu dot org
8 siblings, 0 replies; 13+ messages in thread
From: gdr at gcc dot gnu dot org @ 2006-02-28 9:36 UTC (permalink / raw)
To: gcc-bugs
------- Comment #14 from gdr at gcc dot gnu dot org 2006-02-28 09:35 -------
Fixed in 4.1.0. won't fix for 3.4.6.
--
gdr at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
Target Milestone|3.4.6 |4.1.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Bug c++/16405] New: Non optimized code when using default copy constructor
@ 2004-07-07 11:56 guillaume dot melquiond at ens-lyon dot fr
2004-12-23 8:18 ` [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided mmitchel at gcc dot gnu dot org
` (3 more replies)
0 siblings, 4 replies; 13+ messages in thread
From: guillaume dot melquiond at ens-lyon dot fr @ 2004-07-07 11:56 UTC (permalink / raw)
To: gcc-bugs
I have been compiling the following snippet with g++ version 3.3.4, 3.4.0,
3.5.0. They are Debian packages, so the 3.4.0 version is a bit old (and a
prerelease), sorry. So maybe the bug has already been fixed in g++ 3.4. However
it is still present in a recent snapshot of the trunk. In the following, the
function goes from using only one temporary in g++ 3.3 to using four temporaries
in g++ 3.5.
--------------------------------------------------------------------
struct T {
int a[128];
// T(T const &v);
T &operator+=(T const &v);
T operator+(T const &v) const { T t = *this; t += v; return t; }
};
extern T a, b, c;
void f() { a = b + c; }
--------------------------------------------------------------------
So the code just describes a big plain structure and its operator+ is defined
with its operator+=. The function f computes an addition and operator+ is
inlined into it.
When compiling with g++ 3.3, the generated assembly is optimal: there is only
one temporary, b is copied into this temporary, c is added to this temporary,
the result is then assigned to a.
When compiling with g++ 3.4, it is no more optimal: there are two temporaries, b
is copied into one, c is added to this temporary holding b, the result is copied
into the other temporary, and the temporary is then assigned to a. Maybe the
NRVO did not kick in?
When compiling with g++ 3.5, it is even worse: there are four temporaries, b is
copied into one, c is added to this temporary holding b, the result then goes
into two successive temporaries before being assigned to a. So there is one copy
that does not mean anything with respect to the code? And please note there is
one temporary that just lies on the stack and is never used (since only three
temporaries are used, not four).
If a copy constructor is added (just comment out the line), the three compilers
generate a similar code: only one temporary is ever used. It is the expected and
optimal code generation. So it seems g++ has some kind of problem with the
default copy constructor starting with 3.4.
As a side note, even with a non-default copy constructor, g++ 3.5 still
allocates a temporary that is never used. Maybe it is an unrelated bug?
The snippet is each time compiled with
$ g++-... -Wall -O3 -S test.cpp
Here are the exact versions used.
$ LANG=C g++-3.3 -v
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.4/specs
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr
--mandir=/usr/share/man --infodir=/usr/share/info
--with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib
--enable-nls --without-included-gettext --enable-__cxa_atexit
--enable-clocale=gnu --enable-debug --enable-java-gc=boehm
--enable-java-awt=xlib --enable-objc-gc i486-linux
Thread model: posix
gcc version 3.3.4 (Debian 1:3.3.4-2)
$ LANG=C g++-3.4 -v
Reading specs from /usr/lib/gcc/i486-linux/3.4.0/specs
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr
--libexecdir=/usr/lib --with-gxx-include-dir=/usr/include/c++/3.4
--enable-shared --with-system-zlib --enable-nls --enable-threads=posix
--without-included-gettext --program-suffix=-3.4 --enable-__cxa_atexit
--enable-clocale=gnu --enable-libstdcxx-debug --enable-java-gc=boehm
--enable-java-awt=gtk --disable-werror i486-linux
Thread model: posix
gcc version 3.4.0 20040403 (prerelease) (Debian)
$ LANG=C g++-snapshot -v
Reading specs from /usr/lib/gcc-snapshot/lib/gcc/i486-linux-gnu/3.5.0/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc
--prefix=/usr/lib/gcc-snapshot --enable-shared --with-system-zlib --enable-nls
--enable-threads=posix --without-included-gettext --disable-werror
--enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug
--enable-java-gc=boehm --enable-java-awt=gtk i486-linux-gnu
Thread model: posix
gcc version 3.5.0 20040704 (experimental)
--
Summary: Non optimized code when using default copy constructor
Product: gcc
Version: 3.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: guillaume dot melquiond at ens-lyon dot fr
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: i486-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16405
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2006-02-28 9:35 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <bug-16405-7904@http.gcc.gnu.org/bugzilla/>
2005-10-07 3:26 ` [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided gdr at gcc dot gnu dot org
2006-02-03 21:56 ` jason at gcc dot gnu dot org
2006-02-03 21:59 ` [Bug c++/16405] [3.4/4.1/4.2 " pinskia at gcc dot gnu dot org
2006-02-03 21:59 ` pinskia at gcc dot gnu dot org
2006-02-09 9:54 ` jason at gcc dot gnu dot org
2006-02-09 13:35 ` [Bug c++/16405] [3.4/4.1 " pinskia at gcc dot gnu dot org
2006-02-10 17:32 ` jason at gcc dot gnu dot org
2006-02-10 23:08 ` [Bug c++/16405] [3.4 " pinskia at gcc dot gnu dot org
2006-02-28 9:36 ` gdr at gcc dot gnu dot org
2004-07-07 11:56 [Bug c++/16405] New: Non optimized code when using default copy constructor guillaume dot melquiond at ens-lyon dot fr
2004-12-23 8:18 ` [Bug c++/16405] [3.4 Regression] Temporary aggregate copy not elided mmitchel at gcc dot gnu dot org
2004-12-23 16:27 ` cvs-commit at gcc dot gnu dot org
2005-02-13 18:38 ` cvs-commit at gcc dot gnu dot org
2005-05-19 17:40 ` mmitchel at gcc dot gnu dot org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).