[LLVMdev] How to use property 'isCommutable' in target description file?

Heyu Zhu zhu.heyu at gmail.com
Mon Dec 7 02:45:26 PST 2009

Hi everyone,

I  practice writing target description file with MSP430 reference.

I add a multiply-and-add instruction as below:

let isTwoAddress=1 in {

  def MULADD:Pseudo<(out GR16:$dst), (ins GR16:$src1, GR16:$src2,

                                "muladd\t{$dst, $src2, $src3}",

                                [(set GR16:$dst, (add GR16:$src1, (mul
GR16:$src2, GR16:$src3)))]>


How can i tell the system X=A*B + C == X = B*A + C == X=C+A*B == X=C+B*A by
property 'isCommutable'? Is it necessary to do that?

***  Another question: Why set isCommutable = 1 in ADD16rr but NOT set in

let isCommutable = 1 in { // X = ADD Y, Z  == X = ADD Z, Y
def ADD16rr : Pseudo<(outs GR16:$dst), (ins GR16:$src1, GR16:$src2),
                     "add.w\t{$src2, $dst}",
                     [(set GR16:$dst, (add GR16:$src1, GR16:$src2)),
                      (implicit SRW)]>;
def ADD16ri : Pseudo<(outs GR16:$dst), (ins GR16:$src1, i16imm:$src2),
                     "add.w\t{$src2, $dst}",
                     [(set GR16:$dst, (add GR16:$src1, imm:$src2)),
                      (implicit SRW)]>;

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20091207/13deea8b/attachment.html>

More information about the llvm-dev mailing list