全文基于作者主观理解,仅供参考:
XXXInstrInfo.td文件中定义的是目标机的指令格式。这种td文件会被TableGen自动生成c++类型文件。下面主要是要讨论该文件中的代码含义。
1、def CPU0Ret : SDNode<"CPU0ISD::Ret", SDTNone, [SDNPHasChain,SDNoptInGlue,SDNPVariadic]>;
参考了这篇文档。每个SelectionDAG节点类型都有一个对应的SDNode定义。该函数的原型在llvm/include/llvm/Target/TargetSelectionDAG.td中。第一个参数"CPU0ISD::Ret"指的是这个Node结点的名称。第二个参数是SDTypeProfile类型,它描述了该结点的一些类型要求,详细介绍见下一小节。上面的SDTNone指没有什么要求。第三个参数指的是该结点所应该具有的属性。上面代码中SDNPHasChai的意思是R/W chain operand and result(具体含义自行理解); SDNPVariadic的含义则是说该结点有可变参数。其余的属性都可以在TargetSelectioDAG.td中找到。上面这段代码应该是定义了一个返回类型的SDNode结点。
2、def SDT_Cp0Ret : SDTypeProfile<0, 1, [SDTCisInt<0>]>;
SDTypeProfile的原型也在TargetSelectionDAG