[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