LLVM目标无关代码生成器(下)(译)

💡 原文中文,约14400字,阅读约需35分钟。
📝

内容提要

本文介绍了LLVM目标无关代码生成器的工作原理,包括指令选择的过程和使用的SelectionDAG。还讨论了寄存器分配、指令解析和指令别名处理等内容。

🎯

关键要点

  • LLVM目标无关代码生成器的工作原理包括多个阶段。
  • 指令选择是将LLVM IR转换为特定机器指令的过程,LLVM使用基于SelectionDAG的指令选择器。
  • SelectionDAG是一种有向无环图,包含SDNode实例,表示操作码和操作数。
  • SelectionDAG的合法性是指只使用目标机支持的操作和类型。
  • 指令选择过程包括构建初始DAG、优化DAG、类型合法化、操作合法化等步骤。
  • SelectionDAG调度和指令序列化阶段将指令指定线性顺序并输出为MachineFunction。
  • 活跃区间表示变量在程序中的活跃范围,影响寄存器分配。
  • 寄存器分配将无限虚拟寄存器映射为有限物理寄存器,可能导致虚拟寄存器溢出。
  • LLVM中物理寄存器用整数表示,虚拟寄存器由开发者创建。
  • 寄存器分配器有多种类型,包括Fast、Basic、Greedy和PBQP。
  • LLVM支持实现完整的独立汇编器,指令解析和别名处理是关键步骤。
  • 指令别名处理将不同文本形式的指令标准化为一种形式,助记符别名和指令别名是两种主要形式。
➡️

继续阅读