[LLVMdev] Custom lowering binary operations on one register machines.
evan.cheng at apple.com
Tue Nov 11 08:43:03 PST 2008
On Nov 10, 2008, at 9:51 AM, sanjiv gupta wrote:
> Ours is an accumulator based architecture.
> So one operand of ADD/SUB operations is in REG (accumulator) and the
> other one is in Memory. The result can be left either in REG or
> The LLVM DAG for such operations expect both operands in REG.
> for example:
> char a, b, c, d, e;
> a = (b - c) + (d - e);
> addc:i8 (subc:i8(b,c), subc:i8(d,e))
> Looks like we need to custom lower addc here. LegalizeOp needs
> modification to allow custom lowering of ADDC, etc.I will post a patch
> to do the same.
> Any suggestions on how do we custom lower such things?
> is using MFI::CreateFixedObject () to generate a FI and then using
> FI to Store one REG operand to memory and then generate a Load from
> FI is a good idea?
That should work. I don't see an alternative. I don't think it's legal
to re-associate the expression, right?
> sth like
> store (subc:i8(d, e), FI)
> addc:i8(subc:i8(b,c) - load (FI))
> - Sanjiv
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev