看板 CompilerDev 關於我們 聯絡資訊
本篇可能會有很多有關編譯器的特性的的地方, 如果描述有錯,還請大家鞭小力一點>< 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
Dracarys: 我今天被問為何蘋果要用lldb,我回答license==04/15 01:02
VF84: 要我回答你老闆,我大概會回「青菜蘿蔔各有所好,你愛用 gcc04/15 22:20
VF84: 就去用阿」之類的04/15 22:20
學術上,我不知道這這個問題值不值得思考並寫進去相關研究XD ※ 編輯: shane87123 (114.43.60.48 臺灣), 04/16/2022 00:42:43
Lipraxde: 文件、社群活躍人數也有影響吧? 04/16 11:37
VF84: 廢渣如我連 gcc 都建不起來...QQ 04/16 15:12