[LLVMdev] Inserting nodes into SelectionDAG (X86)

Artjom K. artjom.kochtchi at googlemail.com
Fri Jun 26 04:49:31 PDT 2009


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.

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').

I've tried all sorts of combinations and ordering of operands I could come
up with, but I seem to be missing the point. This is the most complete
version:

  // inc eax
  Ops.push_back(Chain);
  Ops.push_back(DAG.getRegister(X86::EAX, MVT::i32)); // rather without
target register?
  Ops.push_back(DAG.getRegister(X86::EAX, MVT::i32));
  Ops.push_back(DAG.getConstant(1, MVT::i32));
  Ops.push_back(InFlag);
  Chain = DAG.getNode(ISD::ADDC, DAG.getVTList(MVT::Other, MVT::Flag),
&Ops[0], Ops.size());
  InFlag = Chain.getValue(1);

Usually, llc quits with the error message
llc: SelectionDAG.cpp:4417: llvm::SDValue
llvm::SelectionDAG::UpdateNodeOperands(llvm::SDValue, llvm::SDValue,
llvm::SDValue): Assertion `N->getNumOperands() == 2 && "Update with wrong
number of operands"' failed.
Omiting the target register or switching operand order seems not to change
anything.

I'd really appreciate your help on this.
Artjom
-- 
View this message in context: http://www.nabble.com/Inserting-nodes-into-SelectionDAG-%28X86%29-tp24211066p24218876.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.




More information about the llvm-dev mailing list