------- 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