http://llvm.org/bugs/show_bug.cgi?id=9370
skoe <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|INVALID | --- Comment #2 from skoe <[email protected]> 2011-03-02 13:05:34 CST --- Please have a closer look again: movw r0, #32796 @ r0 = 0x0000801c mov.w r1, #-1 movt r0, #20480 @ r0 = 0x5000801c str r1, [r0] movw r0, #32796 @ r0 = 0x0000801c movt r0, #20482 @ r0 = 0x5002801c str r1, [r0] If you remove the second MOVW you have exactly the same result, because the lower 16 bits of r0 were correct already: movw r0, #32796 @ r0 = 0x0000801c mov.w r1, #-1 movt r0, #20480 @ r0 = 0x5000801c str r1, [r0] movt r0, #20482 @ r0 = 0x5002801c str r1, [r0] Remember: MOVW: Rd[15:0] := imm16, Rd[31:16] = 0, imm16 range 0-65535 MOVT: Rd[31:16] := imm16, Rd[15:0] unaffected, imm16 range 0-65535 The optimize could check if the lower 16 bits have the correct value already and replace the upper 16 bits only in this case. I know, it's only one instruction difference. But if it is in an often called interrupt handler it makes a different already :) -- 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. _______________________________________________ LLVMbugs mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs
