[LLVMdev] need some help to remove a dummy mov

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Aug 3 10:12:55 PDT 2006


I have just added a retflag to the ARM backend. I thought that using
BRIND directly was to blame for a dummy move. But I the move wasn't
removed.

When compiling
---------------------------------------
int %g() {
entry:
        call void %f( )
        ret int 42
}

declare void %f()
--------------------------------------

The ARM backend produces
-------------------------------------------
g:
        sub r13, r13, #4
        str r14, [r13]
        mov r4, #42
        bl f
        mov r0, r4
        ldr r14, [r13, #0]
        add r13, r13, #4
        bx r14
------------------------------------------

It would be better to do a "mov r0, #42" directly. The isel dag is
almost identical to the one generated for ppc32, but on ppc32 "li r3,
42" is used.

I have checked that isMoveInstr returns true for the "mov r0,r 4".

Does someone has any idea why the additional mov is generated?

Thanks,
Rafael



More information about the llvm-dev mailing list