This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/32698] [4.3 regression] inefficient pointer expression
- From: "rguenth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 Jul 2007 13:39:52 -0000
- Subject: [Bug tree-optimization/32698] [4.3 regression] inefficient pointer expression
- References: <bug-32698-14001@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #1 from rguenth at gcc dot gnu dot org 2007-07-09 13:39 -------
With 2.95, 3.3.6 and 3.4.6 I get (for 32bit):
foo:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%edx
movl 12(%ebp),%eax
movl %ebp,%esp
popl %ebp
movl 8(%edx,%eax,4),%ecx
addl 4(%edx,%eax,4),%ecx
addl 12(%edx,%eax,4),%ecx
movl %ecx,%eax
ret
4.0.3 and 4.1.2 generate:
foo:
pushl %ebp
movl %esp, %ebp
movl 12(%ebp), %edx
sall $2, %edx
addl 8(%ebp), %edx
movl 8(%edx), %eax
addl 4(%edx), %eax
addl 12(%edx), %eax
leave
ret
4.2.0 generates
foo:
pushl %ebp
movl %esp, %ebp
movl 12(%ebp), %ecx
movl 8(%ebp), %edx
popl %ebp
sall $2, %ecx
movl 4(%ecx,%edx), %eax
addl 8(%ecx,%edx), %eax
addl 12(%ecx,%edx), %eax
ret
while mainline generates
foo:
pushl %ebp
movl %esp, %ebp
movl 12(%ebp), %ecx
movl 8(%ebp), %edx
pushl %ebx
leal 0(,%ecx,4), %ebx
movl 8(%ebx,%edx), %eax
addl 4(%edx,%ecx,4), %eax
addl 12(%ebx,%edx), %eax
popl %ebx
popl %ebp
ret
64bit variants of all of the above create
foo:
.LFB2:
leal 1(%rsi), %edx
leal 2(%rsi), %eax
addl $3, %esi
movl (%rdi,%rax,4), %eax
addl (%rdi,%rdx,4), %eax
addl (%rdi,%rsi,4), %eax
ret
Tree dumps (of mainline) 64bit vs. 32bit are:
return (*(p + (long unsigned int) (i + 2) * 4) + *(p + (long unsigned int) (i
+ 1) * 4)) + *(p + (long unsigned int) (i + 3) * 4);
unsigned int D.1660;
D.1660 = i * 4;
return (*(p + (D.1660 + 8)) + *(p + (i + 1) * 4)) + *(p + (D.1660 + 12));
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
GCC host triplet|i686-pc-linux-gnu |
GCC target triplet| |i686-*-*
Keywords| |missed-optimization
Last reconfirmed|0000-00-00 00:00:00 |2007-07-09 13:39:51
date| |
Target Milestone|--- |4.3.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32698