gcc, LLVM的新前後端開發難易度
本篇可能會有很多有關編譯器的特性的的地方,
如果描述有錯,還請大家鞭小力一點><
LLVM 迷人的地方就是他很多東西都模組化,是一個高度模組化的專案
簡單來說
近期我發現 LLVM 某個 IR 優化對特定程式會有優化失敗的問題,(效能變差)
因此自己額外寫一個演算法加在這個優化裡面,避免優化失敗。
而這個優化失敗的問題在 gcc 上不會出現(當然,兩者的優化邏輯應該不太一樣)
因此被老闆問到:要解決這問題為什麼不用 gcc 就好?
這個問題瞬間考倒我XDD
我的回應是:「因為 LLVM 高度模組化的關係,開發者開發新的前端或後端時,
只需專注在串接前端->優化器或優化器->後端即可,中間優化的過程不用那麼費心力開發
。
該 IR 優化產生的優化失敗若解決掉,即可解決所有高階語言的類似的程式碼從前端編譯
到所有後端
的效能變差的問題;若往後有開發者開發新的後端前端,可不必考慮這個優化失敗的問題
。
gcc 是單向編譯器,開發上比較繁重,因此在開發過程中,皆須考量有可能會有這優化失
敗
的問題產生。」
其實我一直以為 gcc 的編譯流程是這樣:
高階語言
|
|
target-dependent IR
|
|
Optimization
|
|
assembly code
...
(請原諒我的無知)
不過我後來 survey 後,gcc 的編譯流程應該是這樣:
高階語言
|
|
target-independent IR (GIMPLE)
|
|
Optimization
|
|
SSA
|
|
RTL (target-dependent ?)
|
|
assembly code
好像其實模組性也很高,假如我今天只開發前端,
只需做掉高階語言->GIMPLE 這段就好
雖然我不是很了解 gcc 但乍看之下好像是這樣,
原本以為 gcc 是一對一進行編譯(C->X86 C->MIPS...),不過似乎也不是
可能我觀念上有錯誤,還請版友鞭小力一點QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.20.240 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/CompilerDev/M.1649924696.A.973.html
推
04/15 01:02,
3年前
, 1F
04/15 01:02, 1F
推
04/15 22:20,
3年前
, 2F
04/15 22:20, 2F
→
04/15 22:20,
3年前
, 3F
04/15 22:20, 3F
學術上,我不知道這這個問題值不值得思考並寫進去相關研究XD
※ 編輯: shane87123 (114.43.60.48 臺灣), 04/16/2022 00:42:43
→
04/16 11:37,
3年前
, 4F
04/16 11:37, 4F
推
04/16 15:12,
3年前
, 5F
04/16 15:12, 5F