[LLVMbugs] [Bug 11344] New: Use constants in registers to avoid immediate constants in instructions

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Nov 8 16:38:23 PST 2011


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

             Bug #: 11344
           Summary: Use constants in registers to avoid immediate
                    constants in instructions
           Product: new-bugs
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: pete.cooper at gmail.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


In MultiSource/.../oggenc vorbis_encode_ctl the following sequence of
instructions is generated

        testq    %rbx, %rbx
    jne    LBB11_38
    movq    $0, 5568(%rax)
    movq    $0, 5592(%rax)
    movq    $0, 5600(%rax)
    pxor    %xmm0, %xmm0
    xorl    %ecx, %ecx
    xorl    %edx, %edx
    jmp    LBB11_43

I think for the $0 in the moves we should use the knowledge that %rbx must
already be 0 since the condition jumped on nonzero.  We can then use rbi in the
instructions to shorten the encoding.  More generally, we should use any
knowledge we have of constants in registers from previous blocks to avoid
regenerating them in current blocks.

An alternative to using %rbx here would have been to see that any the end of
the block both %ecx and %edx were set to 0.  Had those been 64-bit registers we
could have used either on instead of $0 had we moved the xor sooner

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