AI软件栈:LLVM分析(六)
LLVM后端代码生成的关键步骤
文章目录
- 指令选择
- 指令调度
- 寄存器分配
指令选择
- 完成从基于LLVM IR的DAG转换为基于特定目标平台的DAG(注意,此时描述格式依然是DAG形态)
- 基于TabGen完成指令重映射(典型的处理包括:指令拆散、数据表示向上折叠、指令组合等)
指令调度
- 分为寄存器分配前指令调度和寄存器分配后指令调度(原因,寄存器分配会显著影响指令调度的结果。比如,部分指令的结果如果需要写回堆栈,其执行性能会打折,其数据局部性就会被破坏)
寄存器分配
- 前者的优化与调节都是基于虚拟寄存器完成的(包括PTX的描述也是如此),在实际执行时必须整体考虑寄存器的使用策略。典型地,如果寄存器不足时,需要通过对比将部分结果数据转移到L1、L2或者外部存储