CompilerDev 板


LINE

LLVM大概是現在最受產業界以及學術界歡迎的編譯器框架之一了 很可惜的由於貢獻與參與的人數以接近指數倍的速度增長 專案本身結構的複雜度 也逐年增高,這邊就來提供一個簡單的專案結構導覽。 你主要可以學到兩個重點: - 常見的元件(e.g.優化演算法、register allocator)可以在哪邊找到? - LLVM命名以及安排資料夾的習慣是什麼 (這邊只涵蓋LLVM,其他子專案例如Clang,礙於篇幅以及筆者也不怎麼熟悉,就留到 未來再說吧) Top Level Strucutre (llvm-project/llvm) 有幾個資料夾是一定要知道的 /lib: LLVM 最大的優點之一就是模組化:所有的功能與演算法都被包成個別 的函式庫,使用者只需挑選他們需要的函式庫就可以了。而這個資料夾底下放的就是所有 LLVM的演算法。從非常專門的編譯器演算法(e.g. instruction selection),到非常通用 、可以給其他子專案用的的功能(e.g. FileSystem API)。等一下會就個別的子資料夾 進行介紹 /include: 所有的標頭檔都放在這兒。這底下還有兩個資料夾、llvm和llvm-c ,分別是 C++ 和 C API。LLVM 的API介面穩定性以及相容性(compability)一直都是個 有點大的問題,主要是因為核心成員希望整個計畫在開發上能夠越靈活越好、必然的結果 就是API interface會變化的非常快,導致其他使用者(downstream user)苦不堪言。目前 一個暫時的解決辦法就是不保證 C++ API 的穩定性、只維護 C API 的相容性,所以才會 有兩套 API 系統。(其實LLVM不只API,ABI介面的穩定性也是個長年困擾大家的問題 ,但那又是另外一個故事了) /test 與 /unittests: 前者是 regression test,後者是 unit tests 的資 料夾。Regression test 又暱稱 IR test,因為裡面大部分的測試輸入檔都是 textual IR。仍會叫 regression test 是因為那些 test case 大多源自於 bug。 Regression test是用一套叫做 llvm-lit 的 test runner 來跑的(以及一些附註工具 像是 FileCheck)。llvm-lit 還有 FileCheck 個人認為神好用,而且非常容易用在一般 的專案裡面,有機會可以寫一篇專門的文章。筆者認為這兩個資料夾很重要的原因在於 很多時候如果不知道某個元件的行為或用法(e.g. 不知道對應Pass的CLI option 怎麼下) 可以直接去查閱這些 test,還蠻實用的。 /tools: 只要是使用 LLVM libraries 的 command line tools 基本上都放 這邊。例如大家所熟知的 opt 和 llc,雖然這些 tools 原始碼量都不多、畢竟主要功能 都放在 library 裡面,但有些時候特定的功能,例如某個 CLI option,其實是放在這裡 。Clang 以前也是放在 tools 資料夾底下,但現在已經移到llvm-project最上層了 LLVM Libraries (llvm-project/llvm/lib) 這邊也是挑幾個重要的資料夾來講。大部分元件的標頭檔都會放在 include/llvm 裡 對應的資料夾、因此除非有特例要不然就不多贅述: /IR: 顧名思義這個資料夾放的就是所有的 IR 實作。但其實還不止那些, 其他重要的元件包括新的 PassManager(如大家所知,LLVM 目前已經快要完成遷移 到新的 PassManager,因此舊的 PassManager 現在已經改名為 IR/LegacyPassManager.cpp,而且將在不久之後完全移除),還有一些 "builder",例如 比較多人所熟知的 IRBuilder 以及 debug info builder (DIBuilder) /Passes: 承接上方關於新的PassManager的話題,這個資料夾放的是其他 有關(新版)Pass的元件,例如 PassBuilder 以及 PassRegistry.def。前者很重要是因為 很多時候你會想知道、例如 -O3 到底跑了哪些 Pass,這裡就可以給你一些指引。後者 則是新 PassManager 特有的東西,基本上就是新版的Pass註冊表。 /Transforms: 所有IR層級(也就是 target-independent)的優化演算法。 底下的資料夾簡介如下: - /InstCombine: 就是LLVM的 peephole optimization。老實講我還真的 不知到為啥最初不要命名成 peephole。 - /Vectorize: 顧名思義就是放所有關於 vectorize 的演算法。小弟在這 方面沒有研究得很透徹,但基本上目前 LLVM 使用兩大 vectorize 演算法:SLP 和 VPlan。SLP算是蠻經典的,沒記錯的話GCC也有,VPlan 則是比較新。 - /IPO: 所有的 inter-procedure 優化演算法。 - /Scalar: 基本上所有非前述類別的演算法都丟在這邊XDD (包括loop相關) 所以要找某個演算法就先從這個資料夾開始找吧。 其他蠻重要的還有 /Utils,放了很多超級實用的小功能、像是切割 basic block、還有 把特定一群的 basic block 抓出來變成獨立的函式。 ============= 本篇就先到這邊吧,下一篇會涵蓋剩下的 /lib 重要子資料夾(e.g. CodeGen, Analysis) 。還有其他實用的 utilities (e.g. include/llvm/ADT) --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 169.234.228.195 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/CompilerDev/M.1593371133.A.EA4.html
1F:推 sonicyang: 好文推 06/29 18:36
2F:推 frank030310: 感謝分享 讓我更了解llvm的架構 06/30 19:55
3F:推 jerry0715no1: 感謝大神分享好文 07/01 12:51
4F:推 Dracarys: 感謝分享 07/01 21:14
5F:推 kishow01: 推推分享 07/02 04:40
6F:推 SMMIT: 推分享 07/03 21:49
7F:推 poolongkong: 感謝分享 順便勘誤一下,InstCombine的不知"到" 07/09 21:31
8F:推 JameC: 推,受益良多 07/10 20:51
9F:推 unimaybe: 用心,推推!! 06/26 03:56
10F:推 eopXD: 推好文~~ 07/11 19:39







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP