全文基于作者主观理解,仅供参考:

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.td中。前两个参数是指有几个结果和几个操作数,因为一个SDNode结点里包括有这些内容。如果第二个参数为-1则说明该操作数个数不定。第三个参数是对操作数类型的约束。如这里的SDTCisInt就说明操作数应该是整型的,0则是代表约束的是第一个操作数。

3、def simm8    :    Operand<i32>{ let DecoderMethod = "DecodeSimm8"; }

Operand的原型在llvm/include/llvm/Target/Target.td中。个人理解是把simm8这个标识当作一个32位的操作数。例如有个8位的数,但是该系统只支持32位的,所以就要进行扩展,这在LLVM中就是SelectionDAG的legalize。

4、def men    :    Operand<iPTR>{

let PrintMethod = "printMemOperand";

let MIOperandInfo = (ops Cpu0Regs, simm8);

let EncoderMethod = "getMemEncoding"; }

这是定义了对内存的操作。(???)我推测MIOperandInfo定义的是一种寻址方式,如这里就是一个寄存器(CPURegs)加一个立即数(simm8)的方式。

5、def immSExt8    :    PatLeaf<(imm),[ return isInt<8>(N->getSExtValue()); }]>

原型在TargetSelectionDAG.td。(imm)是dag类型;N是一个操作数结点,后面就判断该N结点是否为8位的整型,是的话才返回。(但这个的含义也不懂)。给一个8位的立即操作数,之后返回一个常量结点。这样这个常量结点便可以代表这个8位立即数了。至于它是不是8位的立即数就得进行一下判断了。

6、def addr    :    ComplexPattern<iPTR, 2, "SelectAddr", [frameindex],[SDNPWantParent]>

原型在TargetSelectionDAG.td。这应该是为了处理地址模式比较复杂的情况。2是指SelectAddr方法所返回的操作数个数。SelectAddr似乎定义在了XXXDAGToDAGISel。

7、class ArithLogicI<bits<8> op, string instr_asm, SDNode OpNode,

FL<op, (outs GPROut:$ra), (ins RC:$rb, Od:$imm16), !strconcat(instr_asm, "\t$ra, $rb, $imm16"),

[(set GPROut:$ra, (OpNode RC:$rb, imm_type: $imm16))], IIAlu> {

let isReMaterializable = 1; }

llvm中的XXXInstrInfo.td相关推荐

  1. LLVM中指令的一生

    原作:http://eli.thegreenplace.net/2012/11/24/life-of-an-instruction-in-llvm/ 作者:Eli Bendersky LLVM是一个复 ...

  2. LLVM中的String相关

    LLVM中的String相关 1. 传递字符串(`StringRef` 类和 `Twine` 类) 1.1 `StringRef`类 1.1.1 StringRef.getAsInteger()成员函 ...

  3. HTML中th和td区别

    很多人想问在HTML中<th>和<td>标签都是用于单元格内容显示的,那么有什么区别呢? 下面我们将用实例和代码来演示. 由此可见,<th>和<td>标 ...

  4. jQuery遍历table中的tr td并获取td中的值

    jQuery遍历table中的tr td并获取td中的值 $(function(){$("#tableId tr").find("td").each(funct ...

  5. LLVM中几个重要的Passes子类

    LLVM中几个重要的Passes子类 ModulePass 它是最通用的超类.通过继承此类,可以分析整个模块.函数在模块内是无特定顺序的.要使用它时,需要编写一个继承自ModulePass并重载run ...

  6. CSS中设置表格TD宽度的问题

    CSS布局,表格宽度不听使唤的实例.想把表格第一例宽度设为20,其他自适应.但CSS中宽度是等宽的.只设这一行也不起作用.但是在实际应用中总是等宽处理,并不按照样式来走. XML/HTML代码 < ...

  7. html 中 table tr td br 什么意思 是什么的缩写

    HTML(HyperText Mark-up Language)即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言.设计HTML语言的目的是为了能把存放在 ...

  8. table标签中tr和td的英文单词

    table标签 tr标签 td标签 th标签 首标签<table>和尾标签</table>分别表示一个表格的开始与结束.这是不难理解的. tr是"table row( ...

  9. LLVM中的PHI节点

    PHI 节点,它会选择来自不同分支的 i,因为我们的 IR 是 SSA(single static assignment,静态单赋值)形式的.在控制流图中,一个给定的变量可以来自两个不同的基本块(两条 ...

最新文章

  1. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
  2. Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...
  3. Mysql学习积累之一[网摘收藏 个人学习参考]
  4. 【AI-1000问】Face detection、alignment、verification、identification(recognization) 你能分的清楚吗?
  5. 编写yara规则,检测恶意软件(自定义yara规则)
  6. 解读年度数据库性能:PostgreSQL的日志文件和数据加载
  7. python数组的使用方法_使用Python记录数组的正确方法是什么
  8. python的sdk是什么意思_python sdk
  9. jq ajax input file,基于jq的input file文件上传
  10. python计算单词长度_附加一个计算单词长度的列表
  11. matlab求函数偏导
  12. 明知故犯还是执迷不悟?
  13. php输出白天时间,php 判断白天黑夜
  14. JAVA-日期类(Date、SimpleDateFormat)
  15. PTMs-ALBERT
  16. 伏神月破、伏神跟飞神、动爻、日月关系的思考
  17. 三种方法获取公众号文章素材的永久链接
  18. html5游戏占内存和cpu,IIS解决CPU和内存占用率太高的问题
  19. 记 随手科技2020届实习生笔试题(Java开发工程师)笔试题
  20. linux系统下html中文乱码

热门文章

  1. 简单动画制作方法,教程在这里! | 万彩动画大师
  2. C#Lua 过滤筛选脏字
  3. PHP中PSR-[0-4]规范
  4. Activiti基础
  5. 故障:fork failed:Resource Temporarily Unavailable解决方案
  6. 一文带你了解 Google I/O 2022 精彩汇总与个人感想
  7. hibernate mysql 中文乱码_使用Hibernate和mysql中文乱码问题
  8. 转:2014年最酷的30个JavaScript库
  9. 正则表达式提取html 中的网址,C#正则表达式模式从给定的字符串中提取网址 - 不是完整的html网址,也包括裸链接...
  10. 大写的服!84 岁的程序员