30 | 后端总结:充分发挥硬件的能力
该思维导图由 AI 生成,仅供参考
指令选择算法
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了编译器后端工作的核心问题,重点介绍了指令选择的算法。首先强调了基于模式匹配的指令生成算法的必要性,并通过实例展示了幼稚算法和贪婪策略算法的匹配过程和生成的汇编代码。随后,文章提出了BURS算法,即“自底向上重写系统”,采用了动态规划的数学方法来获取最优解,同时保持了较低的算法复杂度。通过对动态规划的原理进行简要介绍,文章引出了BURS算法的重要性和优势。文章还提到了动态规划的特点,即通过子问题的最优解,得到总的问题的最优解,这种方法也可以用于生成最优的指令组合。最后,文章介绍了BURS算法在具体执行时的三遍扫描过程,以及在实际应用中的优化力度。总的来说,本文为读者提供了深入了解和思考编译器后端工作核心问题的机会,尤其对指令选择算法进行了详尽的探讨,对于对编译器技术感兴趣的读者具有重要参考价值。 在寄存器分配算法方面,文章介绍了线性扫描算法的原理和应用,强调了其简单性和对于活跃变量的寄存器分配。同时,提及了线性扫描算法的局限性,以及一些优化策略,如溢出到内存和重新复活到寄存器等。此外,还探讨了编译器后端与语言设计的关系,包括平衡编译速度和优化效果、确定支持的硬件平台以及设计后端DSL等方面的因素。 总的来看,本文内容涵盖了编译器后端工作的关键算法和与语言设计的关系,为读者提供了全面的技术视角和深入的思考。
《编译原理实战课》,新⼈⾸单¥59
全部留言(2)
- 最新
- 精选
- coderLLVM描述后端硬件指令的是tablegen,类似地,gcc也有类似的工具
作者回复: 是的。掌握LLVM后端,就一定要弄清楚tablegen。
2020-09-011 - Tino's Park寄存器分配,本质上是在有限的条件下求到最优解,约束求解算法是不是在这个上面会有用?
作者回复: 你的直觉很好,很适合做研究工作:-) 寄存器分配,以及指令调度,都可以用约束求解的方法来做优化。参考论文:https://robcasloz.github.io/publications/TRITA-EECS-AVL-2018-48.pdf 根据论文里的介绍,它的优化效果比llvm要好。 不过,用这个思路也是有代价的,就是编译时间更长,从而获得更优化的代码。
2020-09-172