[LLVMbugs] [Bug 3253] New: missed optimization: shl + test -> bt

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Dec 22 07:32:20 PST 2008


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

           Summary: missed optimization: shl + test -> bt
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Common Code Generator Code
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: edwintorok at gmail.com
                CC: llvmbugs at cs.uiuc.edu


Consider this code:
int foo(char *c)
{
        return strcspn(c, ":\r\n");
}

llvm-gcc translates this into this (which is better than gcc, which does 3
cmpb!):

.text
        .align  16
        .globl  foo
        .type   foo, at function
foo:
        xorl    %eax, %eax
        jmp     .LBB1_2 # bb24
.LBB1_1:        # bb23
        incq    %rax
.LBB1_2:        # bb24
        movb    (%rdi,%rax), %cl
        movl    $1, %edx
        shlq    %cl, %rdx
        cmpb    $58, %cl
        ja      .LBB1_1 # bb23
.LBB1_3:        # bb24
        movabsq $288230376151720961, %rcx
        testq   %rcx, %rdx
        je      .LBB1_1 # bb23
.LBB1_4:        # bb35
        ret
        .size   foo, .-foo

Tron on #llvm suggested that it could be improved even further:
 * movl $1, %rdx; shl %cl, %rdx; test %ecx, %edx  ==  bt
 * loading the huge constant (the instruction is 10 bytes long!) should be
moved out of the loop


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