gcc, LLVM的新前後端開發難易度

看板CompilerDev作者 (陽光大肥宅)時間3年前 (2022/04/14 16:24), 3年前編輯推噓3(302)
留言5則, 3人參與, 3年前最新討論串1/1
本篇可能會有很多有關編譯器的特性的的地方, 如果描述有錯,還請大家鞭小力一點>< 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
我今天被問為何蘋果要用lldb,我回答license==
04/15 01:02, 1F

04/15 22:20, 3年前 , 2F
要我回答你老闆,我大概會回「青菜蘿蔔各有所好,你愛用 gcc
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
廢渣如我連 gcc 都建不起來...QQ
04/16 15:12, 5F
文章代碼(AID): #1YLzfObp (CompilerDev)