Using built-in specs. Target: x86_64-redhat-linux-gnu Configured with: ../gcc-4.0.3/configure x86_64-redhat-linux-gnu --with-ld=/pixar/d2/sets/tools-03/bin/ld --with-as=/pixar/d2/sets/tools-03/bin/as --prefix=/pixar/d2/sets/tools-03 --exec-prefix=/pixar/d2/sets/tools-03 --bindir=/pixar/d2/sets/tools-03/bin --sbindir=/pixar/d2/sets/tools-03/sbin --sysconfdir=/pixar/d2/sets/tools-03/etc --datadir=/pixar/d2/sets/tools-03/share --includedir=/pixar/d2/sets/tools-03/include --libdir=/pixar/d2/sets/tools-03/lib --libexecdir=/pixar/d2/sets/tools-03/libexec --localstatedir=/pixar/d2/sets/tools-03/var --sharedstatedir=/pixar/d2/sets/tools-03/com --mandir=/pixar/d2/sets/tools-03/man --infodir=/pixar/d2/sets/tools-03/info --enable-version-specific-runtime-libs --enable-symvers --enable-languages=c++,objc,f95 --enable-threads=posix --enable-shared --enable-mudflap Thread model: posix gcc version 4.0.3
----------------------code---------------- struct Big { char data[1024]; }; void ByValue(Big); void MakeACopy() { Big stuff; ByValue(stuff); } ----------------------------------- The relevant assembly code, when compiled as: g++ -O2 -S prog.cpp .globl _Z9MakeACopyv .type _Z9MakeACopyv, @function _Z9MakeACopyv: .LFB2: pushq %rbx .LCFI0: movl $1024, %edx subq $3072, %rsp .LCFI1: leaq 2048(%rsp), %rbx leaq 1024(%rsp), %rsi movq %rbx, %rdi call memcpy movq %rbx, %rsi movq %rsp, %rdi movl $1024, %edx call memcpy call _Z7ByValue3Big addq $3072, %rsp popq %rbx ret ------------------- I'm far from an export, but it sure looks to me like memcpy is being called twice to copy the data! This is supported by the fact that gcc3.3.2 only emits code to copy it once, and that code runs twice as fast. Also, gcc3.3.2 inlines the memcpy, while gcc4.0.3 does not. I assume that's a regression as well? If not, what's the best option to tell gcc4.0.3 to inline the copy? -- Summary: gcc4.0.3 produces code that copies a structure twice Product: gcc Version: 4.0.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: deb at pixar dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29375