[LLVMbugs] [Bug 9757] New: Suboptimal register allocation/scheduling on simple function

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Apr 20 07:22:55 PDT 2011


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

           Summary: Suboptimal register allocation/scheduling on simple
                    function
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Keywords: code-quality
          Severity: normal
          Priority: P
         Component: Register Allocator
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: quickslyver at free.fr
                CC: llvmbugs at cs.uiuc.edu


If a compile the following testcase on arm thumb2:

--------------------------------------------------------------
$cat test.c
void bar(void*,unsigned long,unsigned long);

void foo(unsigned long a, unsigned long b)
{
  bar(&b, a, 4);
}


$clang -cc1 -triple=thumbv7-u-u -Os -o - test.c -S -mrelocation-model static
[...]
foo:
    str    lr, [sp, #-4]!
    sub    sp, #4
    mov    r3, r0
    str    r1, [sp]
    mov    r0, sp
    movs    r2, #4
    mov    r1, r3
    bl    bar
    add    sp, #4
    ldr    lr, [sp], #4
    bx    lr
[...]
-----------------------------------------------

The code can be smaller with the following instruction sequence:
(merge the instructions mov r3,r0 and mov r1,r3 into mov r1,r0)

foo:
    str    lr, [sp, #-4]!
    sub    sp, #4
    str    r1, [sp]
    mov    r3, r1
    mov    r0, sp
    movs    r2, #4
    bl    bar
    add    sp, #4
    ldr    lr, [sp], #4
    bx    lr

Am I missing something ?

I am not an expert with register allocation and scheduling, 

=> What prevents llvm to generate this better code ? 

I tried to disable stall and hazard scheduling using  '-disable-sched-hazard'
and '-disable-sched-stall', but it doesn't change anything.

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