[LLVMdev] LLVM Backend DAGToDAGISel INTRINSIC
Ambuj Agrawal
ambujbwt at gmail.com
Mon Mar 9 04:07:12 PDT 2015
I am currently working on DAGToDAGISel class for MIPS and am trying to
figure out a way to use INTRINSIC_W_CHAIN for an intrinsic which can return
a value.
My intrinsic is defined as:
Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_i32_ty,llvm_i32_ty,llvm_i32_ty],[IntrReadWriteArgMem]>;
i.e. it has four arguments and one return value
In DAGToDAGISel when I try to pass it with four arguments and a return
register it fails the assertion `ResNo < NumValues && "Illegal result
number!"'.
More specifically I am doing something like:
EVT ReturnValueVT = Node->getValueType(0) ;
SDValue ChainIn = Node->getOperand(0);
SDValue Zero = CurDAG->getCopyFromReg(ChainIn, DL,
Mips::ZERO, MVT::i32);
SDValue op0 = Node->getOperand(2);
SDValue op1 = Node->getOperand(3);
SDValue op2= Node->getOperand(4);
SDValue op3 = Node->getOperand(5);
SDValue Ops[]= { op0, op1, op2, op3, Zero, ChainIn };
SDNode *Result =
CurDAG->getMachineNode(Mips::BWT_DROP_RESULT, SDLoc(Node),
ReturnValueVT, Ops);
ReplaceUses(Node, Result);
return std::make_pair(true, Result);
Any clues on how INTRINSIC_W_CHAIN differs from INTRINSIC_VOID?
Thanks,
Ambuj Agrawal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150309/31c4c6c9/attachment.html>
More information about the llvm-dev
mailing list