------- Additional Comments From pinskia at gcc dot gnu dot org 2004-11-20
17:56 -------
Hmm, this is 3.4 and 4.0 Regression, 3.3.3 produced:
flow_bb_inside_loop_p:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %ecx
pushl %ebx
movl 12(%ebp), %eax
xorl %ebx, %ebx
cmpl %eax, %ecx
je .L5
movl (%ecx), %edx
cmpl %edx, (%eax)
jle .L4
movl 4(%eax), %eax
cmpl %ecx, (%eax,%edx,4)
je .L5
.p2align 4,,15
.L4:
movl %ebx, %eax
popl %ebx
popl %ebp
ret
.p2align 4,,7
.L5:
movl $1, %ebx
jmp .L4
But 4.0 and 3.4.0 produces:
flow_bb_inside_loop_p:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl %esi, 4(%esp)
movl 8(%ebp), %ecx
xorl %esi, %esi
movl %ebx, (%esp)
movl 12(%ebp), %eax
cmpl %eax, %ecx
je .L3
movl (%ecx), %edx
xorl %ebx, %ebx
cmpl %edx, (%eax)
jle .L5
movl 4(%eax), %eax
cmpl %ecx, (%eax,%edx,4)
je .L7
.L5:
testb %bl, %bl
je .L2
.L3:
movl $1, %esi
.L2:
movl %esi, %eax
movl (%esp), %ebx
movl 4(%esp), %esi
movl %ebp, %esp
popl %ebp
ret
.L7:
movl $1, %ebx
jmp .L5
--
What |Removed |Added
----------------------------------------------------------------------------
Severity|enhancement |minor
Known to fail| |3.4.0 4.0.0
Known to work| |3.3.3
Summary|missing jump threading |[3.4/4.0 Regression] missing
|because of type changes |jump threading because of
| |type changes
Target Milestone|--- |3.4.4
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18576