This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/18233] New: extraneous inc/dec pair
- From: "nathan at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 30 Oct 2004 19:15:44 -0000
- Subject: [Bug tree-optimization/18233] New: extraneous inc/dec pair
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The attached code produces the following assembler
foo:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
testl %eax, %eax
jne .L7
leave
ret
.p2align 2,,3
.L7:
xorl %edx, %edx
bsfl %eax, %eax
sete %dl
negl %edx
orl %edx, %eax
incl %eax
decl %eax
leave
ret
There are two issues
1) the incl/decl pair fails to be eliminated. I presume this is because the
define_insn_and_split that i86 uses gets split too late for CSE to fold in the
subsequent decrement of the source code. Perhaps it could be partially split
earlier, leaving the conditional move stuff to later. I've not examined it in
greate detal.
2) Possibly much harder. The ffs expansion has no knowledge that its input is
nonzero, and therefore need not deal with that case. I gues this will be
systemic to other targets. I wonder what can be done about that -- possibly
duplicate FFS_NON_ZERO_EXPR and FFS_MAYBE_ZERO_EXPR nodes?
--
Summary: extraneous inc/dec pair
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: nathan at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18233