Starofus

你好呀,我是Sans

给LLVM的CPU0后端增加一个指令

2026-03-02

LLVM自定义后端流程熟悉

代码:https://github.com/mrzhuzhe/LLVM-12X

1. 概述

  • 如何适配自定义硬件的新指令集?
  • 在LLVM的框架上开发编译器后端,分为哪几个步骤? 哪些是不相关的?
  • 如何参与LLVM的上游开发 / LLVM 的官方论坛

2. 相关工作

  • 1. 自定义指令DSP,浮点数,多线程,图优化
  • 2. LLVM backend 的结构和功能划分,指令选择,指令合并,指令legalize
  • 3. LLVM IR / Machine IR / tableGen
  • 4. 如何更高效的组织汇编代码,如何规划栈和堆,函数调用
  • 5. 本次大部分代码都来自 LLVM官方教程中backend部分文档例子CPU0

3. 实验设计

  • 1. 增加一个二元binaryOP指令,以Sqsum为例
  • 2. 增加一个三元指令,注意不是浮点
  • 3. 增加硬浮点支持
  • 4. fastSel / globalsel / selectDag 都支持

4. 实验结果

5. 总结和展望

  • 1. 编译器本身就是一个虚拟机
  • 2. frame , ABI, libc操作系统编程接口
  • 3. LLVM 的目前的路线是什么?还没解决的问题有哪些?
  • 4. 过度设计?
  • 5. testSuite and benchmark
  • 6. LLVM codgen目前涉及到的流程为 LLParse > prelogue > type leglize > selectDag > combineDag > register allocation > epilogue
  • 7. 多核?

6. 参考资料

编译器