------- Comment #35 from dominiq at lps dot ens dot fr 2008-01-20 15:16 -------
Note that the test gcc.dg/struct/wo_prof_mult_field_peeling.c pass for 32 and
64 bit modes on i686-apple-darwin9, so I am not sure that what follows will
help.
For the code in comment #34 the assembly code is:
[ibook-dhum] bug/tmp_dir% /opt/gcc/gcc4.3w/bin/gcc -S -O3 -fdump-ipa-all
-fwhole-program -combine -fipa-type-escape wo_prof_mult_field_peeling_db.c
[ibook-dhum] bug/tmp_dir% cat wo_prof_mult_field_peeling_db.s
.text
.align 4,0x90
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
pushl %esi
subl $20, %esp
movl $400, (%esp)
call L_malloc$stub
movl $400, (%esp)
movl %eax, %esi
call L_malloc$stub
movl $400, (%esp)
call L_malloc$stub
movl $400, (%esp)
call L_malloc$stub
xorl %eax, %eax
.align 4,0x90
L2:
movl $5, (%esi,%eax,4)
addl $1, %eax
cmpl $100, %eax
jne L2
xorb %al, %al
jmp L4
.align 4,0x90
L3:
addl $1, %eax
cmpl $100, %eax
je L9
L4:
cmpl $5, (%esi,%eax,4)
je L3
call L_abort$stub
L9:
addl $20, %esp
xorb %al, %al
popl %esi
popl %ebp
ret
.picsymbol_stub
L_malloc$stub:
.indirect_symbol _malloc
call LPC$1
LPC$1: popl %eax
movl L1$lz-LPC$1(%eax),%edx
jmp *%edx
L_malloc$stub_binder:
lea L1$lz-LPC$1(%eax),%eax
pushl %eax
jmp dyld_stub_binding_helper
.lazy_symbol_pointer
L1$lz:
.indirect_symbol _malloc
.long L_malloc$stub_binder
.picsymbol_stub
L_abort$stub:
.indirect_symbol _abort
call LPC$2
LPC$2: popl %eax
movl L2$lz-LPC$2(%eax),%edx
jmp *%edx
L_abort$stub_binder:
lea L2$lz-LPC$2(%eax),%eax
pushl %eax
jmp dyld_stub_binding_helper
.lazy_symbol_pointer
L2$lz:
.indirect_symbol _abort
.long L_abort$stub_binder
.subsections_via_symbols
[ibook-dhum] bug/tmp_dir% /opt/gcc/gcc4.3w/bin/gcc -S -O3 -fdump-ipa-all
-fwhole-program -combine -fipa-type-escape -fipa-struct-reorg
/opt/gcc/_gcc_clean/gcc/testsuite/gcc.dg/struct/wo_prof_mult_field_peeling.c
[ibook-dhum] bug/tmp_dir% cat wo_prof_mult_field_peeling.s
.text
.align 4,0x90
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl $1600, (%esp)
call L_malloc$stub
movl $400, (%esp)
call L_malloc$stub
movl $400, (%esp)
call L_malloc$stub
movl $400, (%esp)
call L_malloc$stub
movl $400, (%esp)
call L_malloc$stub
xorl %edx, %edx
.align 4,0x90
L2:
movl $5, (%eax,%edx,4)
addl $1, %edx
cmpl $100, %edx
jne L2
xorb %dl, %dl
jmp L4
.align 4,0x90
L3:
addl $1, %edx
cmpl $100, %edx
je L9
L4:
cmpl $5, (%eax,%edx,4)
je L3
call L_abort$stub
L9:
xorl %eax, %eax
leave
ret
.picsymbol_stub
L_malloc$stub:
.indirect_symbol _malloc
call LPC$1
LPC$1: popl %eax
movl L1$lz-LPC$1(%eax),%edx
jmp *%edx
L_malloc$stub_binder:
lea L1$lz-LPC$1(%eax),%eax
pushl %eax
jmp dyld_stub_binding_helper
.lazy_symbol_pointer
L1$lz:
.indirect_symbol _malloc
.long L_malloc$stub_binder
.picsymbol_stub
L_abort$stub:
.indirect_symbol _abort
call LPC$2
LPC$2: popl %eax
movl L2$lz-LPC$2(%eax),%edx
jmp *%edx
L_abort$stub_binder:
lea L2$lz-LPC$2(%eax),%eax
pushl %eax
jmp dyld_stub_binding_helper
.lazy_symbol_pointer
L2$lz:
.indirect_symbol _abort
.long L_abort$stub_binder
.subsections_via_symbols
[ibook-dhum] bug/tmp_dir% diff wo_prof_mult_field_peeling.s
wo_prof_mult_field_peeling_db.s
7,9c7,8
< subl $24, %esp
< movl $1600, (%esp)
< call L_malloc$stub
---
> pushl %esi
> subl $20, %esp
12a12
> movl %eax, %esi
18c18
< xorl %edx, %edx
---
> xorl %eax, %eax
21,23c21,23
< movl $5, (%eax,%edx,4)
< addl $1, %edx
< cmpl $100, %edx
---
> movl $5, (%esi,%eax,4)
> addl $1, %eax
> cmpl $100, %eax
25c25
< xorb %dl, %dl
---
> xorb %al, %al
29,30c29,30
< addl $1, %edx
< cmpl $100, %edx
---
> addl $1, %eax
> cmpl $100, %eax
33c33
< cmpl $5, (%eax,%edx,4)
---
> cmpl $5, (%esi,%eax,4)
37,38c37,40
< xorl %eax, %eax
< leave
---
> addl $20, %esp
> xorb %al, %al
> popl %esi
> popl %ebp
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34483