[LLVMbugs] [Bug 14392] New: Multiple consecutive __builtin_popcount()'s may be combined to a bigger type

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Nov 20 11:31:49 PST 2012


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

             Bug #: 14392
           Summary: Multiple consecutive __builtin_popcount()'s may be
                    combined to a bigger type
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: FreeBSD
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Common Code Generator Code
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: jkim at FreeBSD.org
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Please consider the following example:

% cat popcount.c
int
popcount(unsigned long x)
{
        unsigned *p;
        int c, i;

        for (c = i = 0, p = (void *)&x; i < sizeof(x) / sizeof(*p); i++)
                c += __builtin_popcount(*p++);
        return (c);
}
% clang -O2 -mpopcnt -S popcount.c
% cat popcount.s
        .file   "popcount.c"
        .text
        .globl  popcount
        .align  16, 0x90
        .type   popcount, at function
popcount:                               # @popcount
        .cfi_startproc
# BB#0:                                 # %entry
        popcntl %edi, %ecx
        shrq    $32, %rdi
        popcntl %edi, %eax
        addl    %ecx, %eax
        ret
.Ltmp0:
        .size   popcount, .Ltmp0-popcount
        .cfi_endproc


        .section        ".note.GNU-stack","", at progbits

Ideally, it should be folded into "return (__builtin_popcountl(x));" and
generate "popcntq %rdi, %rax; ret".

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