------- Comment #1 from sschunck at pdf dot de 2006-01-12 16:45 ------- Created an attachment (id=10630) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=10630&action=view) c++ code
the following assembler snipplet shows that the movl $1, (%edx) is scheduled too early .globl _ZN1A3fooEP10ybartype_tiS1_RK3xyzPS1_PS2_ .type _ZN1A3fooEP10ybartype_tiS1_RK3xyzPS1_PS2_, @function _ZN1A3fooEP10ybartype_tiS1_RK3xyzPS1_PS2_: .LFB11: pushl %ebp .LCFI25: movl %esp, %ebp .LCFI26: subl $24, %esp .LCFI27: movl %esi, -8(%ebp) .LCFI28: movl 24(%ebp), %eax movl 12(%ebp), %esi movl %edi, -4(%ebp) .LCFI29: movl 16(%ebp), %edi movl %eax, -16(%ebp) movl 8(%ebp), %eax movl %ebx, -12(%ebp) .LCFI30: movl 36(%eax), %ebx movl 16(%ebx), %eax testl %eax, %eax je .L78 movl %eax, %edx movl 28(%ebp), %ecx cmpl $2, %edi movl $1, (%edx) movl (%eax), %eax movl %edx, (%ecx) movl %eax, 16(%ebx) je .L85 g++-3.4.4 -v -save-temps -O2 fail_comp.cc Reading specs from /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/specs Configured with: /common/GNU/gcc/gcc-3.4.4/configure i686-pc-solaris2.8 --with-gnu-as --with-as=/usr/local/gnu/gcc-3.4.4-5.8/as --with-gnu-ld --with-ld=/usr/local/gnu/gcc-3.4.4-5.8/ld --disable-shared --enable-languages=c++ --srcdir=/common/GNU/gcc/gcc-3.4.4 --prefix=/usr/local/gnu/gcc-3.4.4-5.8 Thread model: posix gcc version 3.4.4 (20051127 ) /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../libexec/gcc/i686-pc-solaris2.8/3.4.4/cc1plus -E -quiet -v -iprefix /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/ /users/sschunck/DEVELOPMENT/source/SiCat_cvs/fail_comp.cc -mtune=pentiumpro -O2 -o fail_comp.ii ignoring nonexistent directory "/local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/../../../../i686-pc-solaris2.8/include" ignoring duplicate directory "/usr/local/gnu/gcc-3.4.4-5.8/lib/gcc/i686-pc-solaris2.8/3.4.4/../../../../include/c++/3.4.4" ignoring duplicate directory "/usr/local/gnu/gcc-3.4.4-5.8/lib/gcc/i686-pc-solaris2.8/3.4.4/../../../../include/c++/3.4.4/i686-pc-solaris2.8" ignoring duplicate directory "/usr/local/gnu/gcc-3.4.4-5.8/lib/gcc/i686-pc-solaris2.8/3.4.4/../../../../include/c++/3.4.4/backward" ignoring duplicate directory "/usr/local/gnu/gcc-3.4.4-5.8/lib/gcc/i686-pc-solaris2.8/3.4.4/include" ignoring nonexistent directory "/usr/local/gnu/gcc-3.4.4-5.8/lib/gcc/i686-pc-solaris2.8/3.4.4/../../../../i686-pc-solaris2.8/include" #include "..." search starts here: #include <...> search starts here: /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/../../../../include/c++/3.4.4 /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/../../../../include/c++/3.4.4/i686-pc-solaris2.8 /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/../../../../include/c++/3.4.4/backward /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/include /usr/local/include /usr/local/gnu/gcc-3.4.4-5.8/include /usr/include End of search list. /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../libexec/gcc/i686-pc-solaris2.8/3.4.4/cc1plus -fpreprocessed fail_comp.ii -quiet -dumpbase fail_comp.cc -mtune=pentiumpro -auxbase fail_comp -O2 -version -o fail_comp.s GNU C++ version 3.4.4 (20051127 ) (i686-pc-solaris2.8) compiled by GNU C version 3.4.4 (20051127 ). GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=131013 /usr/local/gnu/gcc-3.4.4-5.8/as -V -Qy -s -o fail_comp.o fail_comp.s GNU assembler version 2.13.2 (i386-pc-solaris2.6) using BFD version 2.13.2 /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../libexec/gcc/i686-pc-solaris2.8/3.4.4/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/crt1.o /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/crti.o /usr/ccs/lib/values-Xa.o /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/crtbegin.o -L/local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4 -L/local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc -L/usr/local/gnu/gcc-3.4.4-5.8/lib/gcc/i686-pc-solaris2.8/3.4.4 -L/usr/ccs/bin -L/usr/ccs/lib -L/local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/../../.. -L/usr/local/gnu/gcc-3.4.4-5.8/lib/gcc/i686-pc-solaris2.8/3.4.4/../../.. fail_comp.o -lstdc++ -lm -lgcc -lc -lgcc /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/crtend.o /local/SunOS-i386-5.8/gnu/gcc-3.4.4-5.8/bin/../lib/gcc/i686-pc-solaris2.8/3.4.4/crtn.o GNU ld version 2.13.2 Supported emulations: elf_i386_ldso elf_i386 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25768