[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