------- Comment #2 from rguenth at gcc dot gnu dot org 2006-02-15 10:58 -------
Confirmed. This are the two inner loops:
4.0.2:
.L6:
movl -4(%esi), %ecx
movl (%edx), %eax
cmpl %eax, %ecx
jle .L7
movl %eax, -4(%esi)
movl %ecx, (%edx)
.L7:
incl %ebx
addl $4, %edx
cmpl %edi, %ebx
jne .L6
4.1.0:
.L6:
movl 8(%ebp), %ebx
movl 4(%edx), %ecx
movl -4(%ebx,%eax,4), %ebx
movl %ecx, -20(%ebp)
cmpl %ecx, %ebx
movl %ebx, -16(%ebp)
jle .L7
movl 8(%ebp), %ebx
movl %ecx, -4(%ebx,%eax,4)
movl -16(%ebp), %ecx
movl %ecx, 4(%edx)
.L7:
incl -24(%ebp)
addl $4, %edx
cmpl -24(%ebp), %esi
jle .L12
jmp .L6
Optimized tree-dumps have for 4.0.2:
<L1>:;
D.2291 = *((int *) ivtmp.31 + -4B);
D.2339 = (int *) ivtmp.22;
D.2296 = *D.2339;
if (D.2291 > D.2296) goto <L2>; else goto <L3>;
<L2>:;
*((int *) ivtmp.31 + -4B) = D.2296;
*D.2339 = D.2291;
<L3>:;
ivtmp.19 = ivtmp.19 + 1;
ivtmp.22 = ivtmp.22 + 4B;
if (ivtmp.19 != (unsigned int) cnt - (unsigned int) j) goto <L1>; else goto
<L8>;
and for 4.1.0:
<L1>:;
D.2434 = MEM[base: lst, index: D.2540, step: 4B, offset: -4B];
D.2534 = (int *) ivtmp.49;
D.2439 = MEM[base: D.2534, offset: 4B];
if (D.2434 > D.2439) goto <L2>; else goto <L3>;
<L2>:;
MEM[base: lst, index: D.2540, step: 4B, offset: -4B] = D.2439;
MEM[base: D.2534, offset: 4B] = D.2434;
<L3>:;
j.56 = j.56 + 1;
ivtmp.49 = ivtmp.49 + 4B;
if (cnt > j.56) goto <L1>; else goto <L8>;
which doesn't look too much worse.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2006-02-15 10:58:11
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26290