[LLVMdev] Custom Opcodes versus built-in opcodes
Chris Lattner
clattner at apple.com
Fri Sep 19 11:46:42 PDT 2008
On Sep 19, 2008, at 11:35 AM, Villmow, Micah wrote:
> Make sure to use DAG.getTargetNode() with custom opcodes. "target"
> nodes are encoded with an implicit delta added to their enum value.
>
> Is this documented anywhere that getTargetNode is the preferred
> method to use in a Custom Lowering function? Even the other backends
> use getNode in their lowering functions with custom opcodes.
> This is from SparcISelLowering.cpp
> CompareFlag = DAG.getNode(SPISD::CMPFCC, MVT::Flag, LHS, RHS);
> if (SPCC == ~0U) SPCC = FPCondCCodeToFCC(CC);
> Opc = SPISD::BRFCC;
> }
> return DAG.getNode(Opc, MVT::Other, Chain, Dest,
> DAG.getConstant(SPCC, MVT::i32), CompareFlag);
Actually, I'm wrong, sorry about that. It looks like the encoding is
in the definition of the enum:
enum {
FIRST_NUMBER = ISD::BUILTIN_OP_END+SP::INSTRUCTION_LIST_END,
CMPICC, // Compare two GPR operands, set icc.
CMPFCC, // Compare two FP operands, set fcc.
BRICC, // Branch to dest on icc condition
BRFCC, // Branch to dest on fcc condition
...
Are your "targetISD" enums properly defined with the offset?
getTargetNode is required when passing in MachineInstr opcode numbers
at isel time.
-Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080919/d109daf6/attachment.html>
More information about the llvm-dev
mailing list