编译器后端总结

为什么需要自研编译后端。

从 dsl语言到 可执行文件,如果采用genc code和 llvm-IR 需要通过 gcc 和 llvm , 这两个编译太heavy了,很多优化pass并不需要。

从IR到二进制文件的经历的pass 流

1,去除不必要block。 rm dead code , rm dead blocks

2, 重排block, 按SCC。

3, 分配局部变量

4,转换成SSA

5,InstCombine (常量表达式折叠, 根据use/def 链条做窥孔优化, 删除无用的load/store)

6,  公共子表达式子消除 CSE

7,死代码删除   DCE

8, 指令的正规化 legalization

9,寄存器的分配

10. ABI对齐, 重调寄存器分配

11, 正规化, 堆栈的配平

 

指令的选择 IR足够简单,已经能够X86/ARM指令映射

posted @ 2024-07-10 17:46  zzas12345  阅读(3)  评论(0编辑  收藏  举报