手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7534 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

41|后端优化:生成LIR和指令选择

你好,我是宫文学。
前面几节课中,我们讨论的主要是中端的优化。中端优化是跟具体硬件关系并不大,但由于我们还要生成针对具体 CPU 的汇编代码或机器码,所以做完中端优化之后,我们还要针对具体 CPU 的特性来做一些优化,也就是后端优化。
其实,我们已经接触过一些后端优化技术了。比如,之前我们已经讲过寄存器分配算法、尾调用和尾递归的优化,这些基本上都属于后端优化。不过,那个时候,我们是从 AST 直接生成汇编代码,然后在这个过程中做一些后端优化的。
在第三部分优化篇中,我们引入了新的、基于图的 IR,进行了很多与硬件无关的优化。用这个基于图的 IR 来做后端优化,效果又怎样呢?接下来,我们就要修改以前的生成汇编代码的逻辑,改成从这个 IR 来生成汇编代码,并在这个过程中做一些优化。
今天这一节课,我就带你从中端过渡到后端,看看如何实现后端优化,并生成目标代码。这其中包括 IR 的 Lower、生成 LIR 和指令选择,以及寄存器分配、指令重排序、窥孔优化和汇编代码的生成,等等工作。不过有些知识点我之前已经讲过了,还有一些知识点不是我们这门课的重点,我就不再展开讲了,重点帮你贯穿一下整个过程。
首先,我们先了解一下给 IR 做 Lower 的过程。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了后端优化中生成LIR和指令选择的过程。首先解释了后端优化与中端优化的关系,强调了后端优化需要根据具体CPU特性进行优化。文章详细介绍了IR的Lower过程,将高级抽象的节点转化为具体的指令操作,最终转化为与具体CPU架构相关的LIR格式。进一步讨论了指令选择的算法,包括条件跳转指令和内存访问的指令选择。通过举例说明了指令选择的工作原理,强调了目标CPU能够用更简洁的方式完成多项运算工作,从而提高效率。文章还提到了寄存器分配、指令重排序和窥孔优化等后端优化工作。最后,总结了IR的Lower过程、LIR与具体CPU架构的对应关系、指令选择算法以及后端优化的工作内容。整体来看,本文对于想要深入了解后端优化的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 奋斗的蜗牛
    太牛了,感觉打开了新世界
    2021-11-17
    2
  • ifelse
    学习打卡
    2022-10-04归属地:浙江
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部