編譯器後端總結

zzas12345發表於2024-07-10

為什麼需要自研編譯後端。

從 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指令對映

相關文章