This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/21558] New: unrolled recursion leaves many redundant instructions
- From: "liblit at cs dot wisc dot edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 13 May 2005 20:44:20 -0000
- Subject: [Bug c/21558] New: unrolled recursion leaves many redundant instructions
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
GCC's optimizer is able to partially unroll a recursive function. As one might
expect, this causes some code duplication. You get several unrolled copies of
the code before the recursive call, then the recursive call itself, and then
several unrolled copies of the code after the recursive call.
However, when the code following the recursive call is very simple, the multiple
copies can be redundant. In a code fragment which I will attach to this report,
the code after the recursive call reduces to a single "movl" instruction. There
is no need to have eight identical copies of that instruction in sequence. Some
sort of (peephole?) optimization pass ought to be able to collapse those down to
just a single instruction.
exact version of GCC: 4.0.0
system type: i686-pc-linux-gnu; specifically, a Tao Linux 1.0 box
options given when GCC was configured/built:
../gcc-4.0.0/configure
--prefix=/s/gcc-4.0.0/i386_tao10
--enable-shared
--enable-threads
--with-pic
--enable-languages=all :
(reconfigured)
../gcc-4.0.0/configure
--prefix=/s/gcc-4.0.0/i386_tao10
--enable-shared
--enable-threads
--with-pic
--enable-languages=all
--with-gmp=/s/gmp-4.1.4/ :
(reconfigured)
../gcc-4.0.0/configure
--prefix=/s/gcc-4.0.0/i386_tao10
--enable-shared
--enable-threads
--with-pic
--with-gmp=/s/gmp-4.1.4/
--enable-languages=c,c++,f95
complete command line that triggers the bug: "gcc -S -O3 redundant.i"
compiler output (error messages, warnings, etc.): none
preprocessed file (*.i*) that triggers the bug: attached to this report
--
Summary: unrolled recursion leaves many redundant instructions
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: liblit at cs dot wisc dot edu
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21558