[LLVMbugs] [Bug 3756] New: __attribute__((always_inline)) and __builtin_constant_p

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Sun Mar 8 07:30:56 PDT 2009


http://llvm.org/bugs/show_bug.cgi?id=3756

           Summary: __attribute__((always_inline)) and __builtin_constant_p
           Product: tools
           Version: 2.5
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: llvm-gcc
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: madcoder at debian.org
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=2683)
 --> (http://llvm.org/bugs/attachment.cgi?id=2683)
the sample source

llvm-gcc doesn't fold __builtin_constant_p inside
__attribute__((always_inline)) functions. The example is simple, in our code we
have:

__attribute__((always_inline)) static inline
void ifree(void *mem, mem_flags_t flags)
{
    if (__builtin_constant_p(mem)) {
        if (mem == NULL)
            return;
    }
    if (__builtin_constant_p(flags)) {
        switch (flags & MEM_POOL_MASK) {
          case MEM_LIBC:
            free(mem);
            return;
          default:
            break;
        }
    }
    __ifree(mem, flags);
}

We have lots of calls that look like: ifree(some_pointer, MEM_LIBC), and gcc
properly does constant folding. but llvm-gcc does not.

Attached are a C file, the .S file generated by gcc and the .S file generated
by llvm, where you can see that the former sees it should use a straight free()
call, and the latter calls __ifree.


-- 
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