[LLVMdev] removing unnecessary moves with 2-address machine
Bagel
bagel99 at gmail.com
Wed Mar 5 12:38:09 PST 2008
I am new to LLVM and am trying to write a backend for a simple 2-address
machine.
For a very simple program:
define i16 @add2aa(i16 %a, i16 %b) nounwind {
entry:
%tmp3 = add i16 %b, %a ; <i16> [#uses=1]
ret i16 %tmp3
}
The arguments a and b are passed in r15 and r14. The result is returned
in r15.
The generated code is:
add2aa:
add.w r15,r14
mov.w r14,r15
ret
If the legs of the add.w were reversed, the mov.w would not be
necessary. I have declared the add instruction to be "commutable".
What do I have to do to cause the optimization?
thanks,
bagel
More information about the llvm-dev
mailing list