public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/38379]  New: missed optimisation: function referenced through unused function pointer not removed
@ 2008-12-03  2:02 patrick at motec dot com dot au
  2008-12-03  2:09 ` [Bug tree-optimization/38379] " pinskia at gcc dot gnu dot org
  0 siblings, 1 reply; 2+ messages in thread
From: patrick at motec dot com dot au @ 2008-12-03  2:02 UTC (permalink / raw)
  To: gcc-bugs

The following (contrived) example was compiled with -O3 -fwhole-program.

void func1() { }
void func2(void(*fn)(void)) { fn(); }
void func3() { func2(&func1); }

int main()
{
        return 0;
}


running objdump on the output results in

00000000 <func1>:
   0:   4e 80 00 20     blr

00000004 <main>:
   4:   94 21 ff f8     stwu    r1,-8(r1)
   8:   7c 08 02 a6     mflr    r0
   c:   90 01 00 0c     stw     r0,12(r1)
  10:   48 00 00 01     bl      10 <main+0xc>
  14:   80 01 00 0c     lwz     r0,12(r1)
  18:   38 60 00 00     li      r3,0
  1c:   38 21 00 08     addi    r1,r1,8
  20:   7c 08 03 a6     mtlr    r0
  24:   4e 80 00 20     blr

I don't expect any code for func1 to be emitted. It is never called, and func3
which takes it's address has been removed. This is obviously a bigger problem
if func2 were to do some real work.

compiler output:

powerpc-eabispe-gcc -O3 -fwhole-program -v -c tes
t.c
Using built-in specs.
Target: powerpc-eabispe
Configured with: /home/patrick/src/e7/toolchain/src/gcc-4.3.2/configure
--prefix=/home/patrick/src/e7/toolchain/stage2 --build=x86_64-unknown-linux-gnu
--host=x86_64-unknown-linux-gnu --target=powerpc-eabispe --enable-languages=c
--disable-nls --disable-werror --without-newlib
--with-gmp=/home/patrick/src/e7/toolchain/stage2
--with-mpfr=/home/patrick/src/e7/toolchain/stage2 --disable-shared
--disable-debug --disable-libssp
Thread model: single
gcc version 4.3.2 (GCC) 
COLLECT_GCC_OPTIONS='-O3' '-fwhole-program' '-v' '-c'
 /home/patrick/src/e7/toolchain/stage2/libexec/gcc/powerpc-eabispe/4.3.2/cc1
-quiet -v test.c -quiet -dumpbase test.c -auxbase test -O3 -version
-fwhole-program -o /tmp/ccHjWmTp.s
ignoring nonexistent directory
"/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/../../../../powerpc-eabispe/sys-include"
ignoring nonexistent directory
"/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/../../../../powerpc-eabispe/include"
#include "..." search starts here:
#include <...> search starts here:
 /home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/include

/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/include-fixed
End of search list.
GNU C (GCC) version 4.3.2 (powerpc-eabispe)
        compiled by GNU C version 4.2.3 (Ubuntu 4.2.3-2ubuntu7), GMP version
4.2.4, MPFR version 2.3.2.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: c30b16423d0b6addaa52d5eb1153852d
COLLECT_GCC_OPTIONS='-O3' '-fwhole-program' '-v' '-c'

/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/../../../../powerpc-eabispe/bin/as
-mppc -mspe -me500 -many -V -Qy -o test.o /tmp/ccHjWmTp.s
GNU assembler version 2.18 (powerpc-eabispe) using BFD version (GNU Binutils)
2.18
COMPILER_PATH=/home/patrick/src/e7/toolchain/stage2/libexec/gcc/powerpc-eabispe/4.3.2/:/home/patrick/src/e7/toolchain/stage2/libexec/gcc/powerpc-eabispe/4.3.2/:/home/patrick/src/e7/toolchain/stage2/libexec/gcc/powerpc-eabispe/:/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/:/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/:/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/../../../../powerpc-eabispe/bin/
LIBRARY_PATH=/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/:/home/patrick/src/e7/toolchain/stage2/lib/gcc/powerpc-eabispe/4.3.2/../../../../powerpc-eabispe/lib/
COLLECT_GCC_OPTIONS='-O3' '-fwhole-program' '-v' '-c'


-- 
           Summary: missed optimisation: function referenced through unused
                    function pointer not removed
           Product: gcc
           Version: 4.3.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: patrick at motec dot com dot au


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38379


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Bug tree-optimization/38379] missed optimisation: function referenced through unused function pointer not removed
  2008-12-03  2:02 [Bug tree-optimization/38379] New: missed optimisation: function referenced through unused function pointer not removed patrick at motec dot com dot au
@ 2008-12-03  2:09 ` pinskia at gcc dot gnu dot org
  0 siblings, 0 replies; 2+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2008-12-03  2:09 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from pinskia at gcc dot gnu dot org  2008-12-03 02:05 -------


*** This bug has been marked as a duplicate of 38378 ***


-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |DUPLICATE


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38379


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-12-03  2:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-12-03  2:02 [Bug tree-optimization/38379] New: missed optimisation: function referenced through unused function pointer not removed patrick at motec dot com dot au
2008-12-03  2:09 ` [Bug tree-optimization/38379] " pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).