[LLVMbugs] [Bug 3148] New: unnecessary GOT lookup when calling visibility hidden or protected function
    bugzilla-daemon at cs.uiuc.edu 
    bugzilla-daemon at cs.uiuc.edu
       
    Sun Nov 30 20:28:15 PST 2008
    
    
  
http://llvm.org/bugs/show_bug.cgi?id=3148
           Summary: unnecessary GOT lookup when calling visibility hidden or
                    protected function
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Common Code Generator Code
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: nicholas at mxc.ca
                CC: llvmbugs at cs.uiuc.edu
GCC elides the GOT lookup when calling a hidden or protected function. Here's a
quick, silly example:
  class __attribute__((visibility("hidden"))) Foo {
  public:
    void f(void) __attribute__((noinline)) {
      for (int i = 0; i < 1000000; i += 2)
        if (i < 123) f();
      return;
    }
  };
  void g(void) {
    Foo foo;
    foo.f();
  }
Firstly, if f() is empty, GCC inlines it into g() despite the noinline tag. I
consider that naughty, and we shouldn't follow its lead there.
Secondly, GCC generates this code for g() with -O2 -fPIC:
_Z1gv:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $24, %esp
        leal    -1(%ebp), %eax
        movl    %eax, (%esp)
        call    _ZN3Foo1fEv
        leave
        ret
while LLVM produces this:
_Z1gv:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ebx
        subl    $12, %esp
        call    .Lllvm$1.$piclabel
.Lllvm$1.$piclabel:
        popl    %ebx
        addl    $_GLOBAL_OFFSET_TABLE_ + [.-.Lllvm$1.$piclabel], %ebx
        leal    -8(%ebp), %eax
        movl    %eax, (%esp)
        call    _ZN3Foo1fEv
        addl    $12, %esp
        popl    %ebx
        popl    %ebp
        ret
Because it's hidden, the GOT lookup is unnecessary. Please eliminate it. Same
with protected.
-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
    
    
More information about the llvm-bugs
mailing list