编译原理实战课
宫文学
北京原点代码 CEO
26066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
真实编译器解析篇 (19讲)
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

30 | 后端总结:充分发挥硬件的能力

参考资料
一课一思
思维导图
编译器后端与语言设计
寄存器分配算法
指令选择算法
编译器后端技术总结

该思维导图由 AI 生成,仅供参考

你好,我是宫文学。
后端的工作,主要是针对各种不同架构的 CPU 来生成机器码。在第 8 讲,我已经对编译器在生成代码的过程中,所做的主要工作进行了简单的概述,你现在应该对编译器的后端工作有了一个大致的了解,也知道了后端工作中的关键算法包括指令选择、寄存器分配和指令排序(又叫做指令调度)。
那么今天这一讲,我们就借助在第二个模块中解析过的真实编译器,来总结、梳理一下各种编译器的后端技术,再来迭代提升一下原有的认知,并加深对以下这些问题的理解:
首先,在第 8 讲中,我只讲了指令选择的必要性,但对于如何实现指令选择等步骤,我并没有展开介绍。今天这一讲,我就会带你探索一下指令选择的相关算法。
其次,关于寄存器分配算法,我们探索过的好几个编译器,比如 Graal、gc 编译器等,采用的都是线性扫描算法,那么这个算法的原理是什么呢?我们一起来探究一下。
最后,我们再回到计算机语言设计的主线上来,一起分析一下不同编译器的后端设计,是如何跟该语言的设计目标相匹配的。
OK,我们先来了解一下指令选择的算法。

指令选择算法

回顾一下,我们主要是在GraalGo 语言的编译器中,分析了与指令选择有关的算法。它们都采用了一种模式匹配的 DSL,只要找到了符合模式的指令组合,编译器就生成一条低端的、对应于机器码的指令。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了编译器后端工作的核心问题,重点介绍了指令选择的算法。首先强调了基于模式匹配的指令生成算法的必要性,并通过实例展示了幼稚算法和贪婪策略算法的匹配过程和生成的汇编代码。随后,文章提出了BURS算法,即“自底向上重写系统”,采用了动态规划的数学方法来获取最优解,同时保持了较低的算法复杂度。通过对动态规划的原理进行简要介绍,文章引出了BURS算法的重要性和优势。文章还提到了动态规划的特点,即通过子问题的最优解,得到总的问题的最优解,这种方法也可以用于生成最优的指令组合。最后,文章介绍了BURS算法在具体执行时的三遍扫描过程,以及在实际应用中的优化力度。总的来说,本文为读者提供了深入了解和思考编译器后端工作核心问题的机会,尤其对指令选择算法进行了详尽的探讨,对于对编译器技术感兴趣的读者具有重要参考价值。 在寄存器分配算法方面,文章介绍了线性扫描算法的原理和应用,强调了其简单性和对于活跃变量的寄存器分配。同时,提及了线性扫描算法的局限性,以及一些优化策略,如溢出到内存和重新复活到寄存器等。此外,还探讨了编译器后端与语言设计的关系,包括平衡编译速度和优化效果、确定支持的硬件平台以及设计后端DSL等方面的因素。 总的来看,本文内容涵盖了编译器后端工作的关键算法和与语言设计的关系,为读者提供了全面的技术视角和深入的思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • coder
    LLVM描述后端硬件指令的是tablegen,类似地,gcc也有类似的工具

    作者回复: 是的。掌握LLVM后端,就一定要弄清楚tablegen。

    2020-09-01
    1
  • Tino's Park
    寄存器分配,本质上是在有限的条件下求到最优解,约束求解算法是不是在这个上面会有用?

    作者回复: 你的直觉很好,很适合做研究工作:-) 寄存器分配,以及指令调度,都可以用约束求解的方法来做优化。参考论文:https://robcasloz.github.io/publications/TRITA-EECS-AVL-2018-48.pdf 根据论文里的介绍,它的优化效果比llvm要好。 不过,用这个思路也是有代价的,就是编译时间更长,从而获得更优化的代码。

    2020-09-17
    2
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部