From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11112 invoked by alias); 1 May 2005 08:30:56 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 11050 invoked by uid 48); 1 May 2005 08:30:44 -0000 Date: Sun, 01 May 2005 08:30:00 -0000 From: "deemkay at gmail dot com" To: gcc-bugs@gcc.gnu.org Message-ID: <20050501083031.21314.deemkay@gmail.com> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug c++/21314] New: C++ performance regression with -Os X-Bugzilla-Reason: CC X-SW-Source: 2005-05/txt/msg00037.txt.bz2 List-Id: the following code takes more than twice as long to run when compiled with -Os using gcc-4.0.0 than it does with 3.3.5 or 3.4.3. #include #include class mytype_A { public: int id; mytype_A():id(0) {} }; class mytype_B { public: mytype_A* A; mytype_B(mytype_A* p):A(p) {} }; class mytype_C { public: mytype_B* B; mytype_C(mytype_B* p):B(p) {} }; class mytype_D { public: // mytype_C* C[2]; // less performance difference if we use simple arrays std::vector C; int junk[3]; // affects performance public: mytype_D(mytype_A* a0, mytype_A* a1) { // C[0] = new mytype_C(new mytype_B(a0)); // C[1] = new mytype_C(new mytype_B(a0)); C.push_back(new mytype_C(new mytype_B(a0))); C.push_back(new mytype_C(new mytype_B(a0))); } }; int main() { int k = 5000; // run-time not linear in k mytype_A* A[k]; mytype_D* D[k]; for (int i=0;i<=k;i++) A[i] = new mytype_A(); for (int i=0;iC[0]->B->A->id) k0++; if (d->C[1]->B->A->id) k0++; } } printf("%d\n",k0); // don't allow compiler to optimize away k0 printf("time: %f\n",(double)(clock()-before)/CLOCKS_PER_SEC); return 0; } dirtyepic ~/work $ g++ -Os -Wall -march=pentium3 cpptest.cpp i686-pc-linux-gnu-3.3.5-20050130 - time: 6.530000 i686-pc-linux-gnu-3.4.3-20050110 - time: 6.920000 i686-pc-linux-gnu-4.0.0(release) - time: 16.790000 i686-pc-linux-gnu-4.0.0-20050430 - time: 16.700000 dirtyepic ~/work $ g++ -v -save-temps -Os -Wall -march=pentium3 cpptest.cpp -o gcc401 Using built-in specs. Target: i686-pc-linux-gnu Configured with: /var/tmp/portage/gcc-4.0.1_alpha20050430/work/gcc-4.0-20050430/configure --enable-version-specific-runtime-libs --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.0.1-alpha20050430 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.0.1-alpha20050430 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.0.1-alpha20050430/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.0.1-alpha20050430/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --disable-nls --with-system-zlib --disable-checking --disable-werror --disable-libunwind-exceptions --disable-multilib --disable-libgcj --enable-languages=c,c++ --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu Thread model: posix gcc version 4.0.1-alpha20050430 (Gentoo Linux 4.0.1_alpha20050430) /usr/libexec/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/cc1plus -E -quiet -v -D_GNU_SOURCE cpptest.cpp -march=pentium3 -Wall -Os -fpch-preprocess -o cpptest.ii ignoring nonexistent directory "/usr/local/include" #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/include/g++-v4 /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/include/g++-v4/i686-pc-linux-gnu /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/include/g++-v4/backward /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/include /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/../../../../i686-pc-linux-gnu/include /usr/include End of search list. /usr/libexec/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/cc1plus -fpreprocessed cpptest.ii -quiet -dumpbase cpptest.cpp -march=pentium3 -auxbase cpptest -Os -Wall -version -o cpptest.s GNU C++ version 4.0.1-alpha20050430 (Gentoo Linux 4.0.1_alpha20050430) (i686-pc-linux-gnu) compiled by GNU C version 4.0.1-alpha20050430 (Gentoo Linux 4.0.1_alpha20050430). GGC heuristics: --param ggc-min-expand=55 --param ggc-min-heapsize=48339 /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/../../../../i686-pc-linux-gnu/bin/as -V -Qy -o cpptest.o cpptest.s GNU assembler version 2.16.90.0.2 (i686-pc-linux-gnu) using BFD version 2.16.90.0.2 20050429 /usr/libexec/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o gcc401 /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/../../../crt1.o /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/../../../crti.o /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/crtbegin.o -L/usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430 -L/usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430 -L/usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/../../../../i686-pc-linux-gnu/lib -L/usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/../../.. cpptest.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/crtend.o /usr/lib/gcc/i686-pc-linux-gnu/4.0.1-alpha20050430/../../../crtn.o -- Summary: C++ performance regression with -Os Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: deemkay at gmail dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21314