关于Target Description的约束(TargetSelectionDAG.td)

本文深入解析TargetDescription的TargetSelectionDAG.td文件,重点介绍如何约束操作数类型以及SDNode的使用。通过实例展示SDTCisSameAs和SDTCisInt等约束,说明SDNode的定义和opcode匹配。同时探讨SDNodeXForm的转换功能,以AVR后端的ComplexPattern应用为例,阐述DAG匹配与转换的实现。
摘要由CSDN通过智能技术生成
  • 指明操作数的编号
class SDTypeConstraint<int opnum> {
  int OperandNum = opnum;
}
  • 指明特定操作数的类型,表示第opnum号操作数是vt这种类型
class SDTCisVT<int OpNum, ValueType vt> : SDTypeConstraint<OpNum> {
  ValueType VT = vt;
}
  • 约定两个操作数有相同的类型
class SDTCisSameAs<int OpNum, int OtherOp> : SDTypeConstraint<OpNum> {
  int OtherOperandNum = OtherOp;
}

 

  • 描述DAG类型的要求,numresults表示结果操作数数量,numoperands表示输入操作数数量
class SDTypeProfile<int numresults, int numoperands,
                    list<SDTypeConstraint> constraints> {
  int NumResults = numresults;
  int NumOperands = numoperands;
  list<SDTypeConstraint> Constraints = constraints;
}
  • 结合上面的代码,下面作出一个示例:
def SDTIntBinOp : SDTypeProfile<1, 2, [     // add, and, or, xor, udiv, etc.
  SDTCisSameAs<0, 1>, SDTCisSameAs<0, 2>, SDTCisInt<0>
]>;

这个示例表示定义了一个约束,这个约束有1个结果操作数,2个输入操作数。SDTCisSameAs<0,1>表示0号操作数与一号操作数类型相同,SDTCisSameAs<0,2>表示0号操作数与2号操作数类型相同,SDTCisInt<0>表示0号操作数位整型。

  • 定义匹配SDNode,opcode操作码代号
class SDNode<string opcode, SDTypePr
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值