[LLVMdev] Inserting nodes into SelectionDAG (X86)

Dan Gohman gohman at apple.com
Sat Jun 27 16:21:18 PDT 2009

On Jun 26, 2009, at 4:49 AM, Artjom K. wrote:

> Thank you for your help.
> I think I managed to create the instruction I wanted:
>  // mov eax, 41
>  Chain = DAG.getCopyToReg(Chain, DAG.getRegister(X86::EAX, MVT::i32),
> DAG.getConstant(41, MVT::i32), InFlag);
>  InFlag = Chain.getValue(1);
> I don't understand though what InFlag is for. As I read the code, it  
> even
> remains uninitialized when first passed to some node creation method.

Flag operands in SelectionDAG are special.  SelectionDAG currently
requires Flag operands for copies to and from physical registers,
though not for virtual registers.

> Unfortunately I still don't manage to create more sophisticated  
> error free
> instructions that actually appear in the assembly generated by llc.  
> For
> example after the CopyToReg instruction, I want to increase eax by  
> 1. In X86
> 'inc eax' would probably be the way to go, which I try to model by  
> ISD 'addc
> eax, eax, 1' or something of that sort (it's probably rather 'addc  
> eax, 1').

ADDC is add-with-carry. If you just want to add 1 to EAX and don't care
about the carry result, ADD is easier.  The result type of ADD is just
MVT::i32 (assuming you're working with i32 operands).


More information about the llvm-dev mailing list