[LLVMdev] How do I model MUL with multiply-accumulate instruction?

Greg McGary greg at mcgary.org
Thu Apr 16 14:19:47 PDT 2009

The only multiplication instruction on my target CPU is 
multiply-and-accumulate.  The result goes into a special register that 
can destructively read at the end of a sequence of multiply-adds.  The 
following sequence is required to so a simple multiply:

    acc r0   # clear accumulator, discarding its value (r0 reads as 0, 
and sinks writes)
    mac rSRC1, rSRC2   # multiply sources, store result in accumulator
    acc rDEST   # fetch accumulator value to rDEST

What's the best way to model simple MUL as this 3-insn sequence in the 
LLVM backend?

Should the internal accumulation register be explicitly modeled as its 
own register class with a pattern to copy its value to a general register?

Is it possible to code the three insn sequence in TableGen alone, or 
must I resort to custom C++ code?


More information about the llvm-dev mailing list