This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/11873] inefficient use of registers induces size and time overhead
- From: "rask 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 Nov 2007 23:51:41 -0000
- Subject: [Bug rtl-optimization/11873] inefficient use of registers induces size and time overhead
- References: <bug-11873-6707@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from rask at gcc dot gnu dot org 2007-11-09 23:51 -------
This has improved (-O2 -fomit-frame-pointer):
test:
movl 4(%esp), %eax # 32 *movsi_1/1 [length = 4]
movl 8(%esp), %edx # 44 *movsi_1/1 [length = 4]
orl %eax, %edx # 6 *iorsi_1/1 [length = 2]
addl $1, %eax # 35 *addsi_1/1 [length = 3]
cmpl $1, %edx # 38 *cmpsi_1_insn/1 [length = 3]
sbbl %edx, %edx # 39 x86_movsicc_0_m1 [length = 2]
notl %edx # 40 *one_cmplsi2_1 [length = 2]
andl %edx, %eax # 41 *andsi_1/1 [length = 2]
ret # 47 return_internal [length = 1]
.ident "GCC: (GNU) 4.3.0 20071102 (experimental)"
With -Os -fomit-frame-pointer we get:
test:
movl 4(%esp), %edx # 32 *movsi_1/1 [length = 4]
xorl %eax, %eax # 48 *movsi_xor [length = 2]
movl 8(%esp), %ecx # 43 *movsi_1/1 [length = 4]
orl %edx, %ecx # 7 *iorsi_3 [length = 2]
je .L3 # 8 *jcc_1 [length = 2]
leal 1(%edx), %eax # 44 *lea_1 [length = 3]
.L3:
ret # 47 return_internal [length = 1]
With -O2/-Os -fomit-frame-pointer -march=pentiumpro:
test:
movl 4(%esp), %edx # 32 *movsi_1/1 [length = 4]
xorl %eax, %eax # 46 *movsi_xor [length = 2]
leal 1(%edx), %ecx # 41 *lea_1 [length = 3]
orl 8(%esp), %edx # 36 *iorsi_3 [length = 4]
cmovne %ecx, %eax # 38 *movsicc_noc/1 [length = 3]
ret # 44 return_internal [length = 1]
I would probably code it like so:
movl 4(%esp), %eax ; 4
movl 8(%esp), %edx ; 4
orl %eax, %edx ; 2
addl $-1, %edx ; 3
adcl $0, %eax ; 3
ret ; 1
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11873