This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/20408] Unnecessary code generated for empty structs
- From: "rguenth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 27 Nov 2007 09:40:15 -0000
- Subject: [Bug middle-end/20408] Unnecessary code generated for empty structs
- References: <bug-20408-9525@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #20 from rguenth at gcc dot gnu dot org 2007-11-27 09:40 -------
For the testcase in comment #13 we now generate two(!) temporaries:
void barc() ()
{
struct Foo D.2027;
struct Foo D.2028;
D.2027 = {};
D.2028 = {};
bar (D.2028);
}
via gimplification of
;; Function void barc() (_Z4barcv)
;; enabled by -tree-original
<<cleanup_point <<< Unknown tree: expr_stmt
bar (TARGET_EXPR <D.2027, {}>;, <<< Unknown tree: empty_class_expr >>>
;) >>>
>>;
though the generated assembler looks like we cannot do better:
_Z4barcv:
.LFB3:
subq $8, %rsp
.LCFI0:
movb $0, (%rsp)
call _Z3bar3Foo
addq $8, %rsp
ret
_Z4foocv:
.LFB2:
subq $24, %rsp
.LCFI1:
leaq 23(%rsp), %rdi
call _Z3fooRK3Foo
addq $24, %rsp
ret
On the tree level the first simple DSE pass gets rid of the extra temporary
and its initialization.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
Last reconfirmed|2005-12-09 04:25:06 |2007-11-27 09:40:15
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20408