CompilerDev 板


LINE

第二篇我們延續重要 LLVM Libraries (e.g. llvm/lib/*) 元件介紹: /Analysis: 這個大概是LLVM數一數二重要的元件之一。就如大家所知道的 compiler optimizations 往往需要大量的資訊:從最簡單的 dominator tree 到複雜的 alias analysis。全部都放在這個資料夾裡面。LLVM 的 Analysis 幾乎跟一般 Pass 無異,最大的差別莫過於不能修改輸入的 IR unit,同時也有著頗為複雜的invalidation 機制 (當某個 IR unit 被更動後,那些 analysis 不受影響,哪些又要重新計算) /Support 與 llvm/include/llvm/ADT: 兩者為一堆極為實用的 utilities 集合。ADT 就如他們名字(Abstract Data Structure)所示,放的大多是資料結構, 尤其是針對少量資料優化的資料結構,例如大家最耳熟能詳的 SmallVector,或是一些 非常針對 compiler 所設計的資料結構,例如 IntervalMap (用在 register allocation 上)。Support 就比較通用一點,包含像是跨平台的 thread 函式庫、跨平台的 FileSystem,或是Graphviz DOT的小工具。個人強料推薦以下兩種情況之前,先看看看 這兩個地方有沒有你想要用的東西: 1. 想使用 standard library 的資料結構之前 2. 想寫自己的 helper library,甚至用外部的 utility library(像是 Boost)之前 關於第一點,並不是說 standard library 不好,而是就如前面所解釋的,ADT有很多 針對特殊情況優化的資料結構。至於什麼時候該用 standard library 什麼時候要用 ADT ,官方網站的 Programmer Manual (http://llvm.org/docs/ProgrammersManual.html) 有非常詳盡的解說與指引,我個人工作的時候基本上都把那個頁面開在旁邊。 /CodeGen: 這邊放的就是所有真正 "backend" 做 code generation 的元件。 LLVM 將所有硬體特定實作全丟到 /Target,所以這邊放的其實是 target-independent 、使用 /Target 傳來的資訊來做 code generation。這邊列出重要的子元件分別放在 哪兒: 1. Register Allocation: RegAlloc*.cpp 2. Instruction Scheduling: ScheduleDAG*.cpp, MachineScheduler.cpp 3. Instruction Selection 的故事就長了,因為這個部分也有新舊版本:舊的是基於 SelectionDAG 的實作(/SelectionDAG 資料夾),新的則是叫做 GlobalISel (/GlobalISel 資料夾)。新的 GlobalISel 目標是更快的速度以及提供更好的測試 環境 (SelectionDAG 在測試的時候只能整個當黑箱一起測,GlobalISel 可以切成 好幾個部分分別測試) /Target: 每個硬體架構在這邊都有專門的一個資料夾,描述的就是硬體專有的訊息。 除了大家大概都知道的指令集格式外,其實還有很多重要的訊息, 例如 Calling Convention, Stack Frame 長什麼樣子, 或是 scheduling 的限制。 /MC: CodeGen 最後會生出目標架構的 assembly code。在古早以前,LLVM 接下來會呼叫外部的 assembler,例如 NASM 或者 GNU AS,將這些 assembly 組譯成 object code,然後再呼叫外部的 linker,例如最經典的 BFD linker,把這些 object files 組合成最終想要的檔案 (i.e. executable or libraries)。LLVM 現在都有自己的 assembler 和 linker 了,其中 assembler 部分就是這個 MC layer (linker 就是 LLD) 。筆者對 MC layer 沒有很透徹的研究,但基本上他有很多資訊也是來自於各別硬體 於 /Target 底下的實作。 /ExecutionEngine: 這個資料夾放的包括最為人所知的 JIT Engine。目前 LLVM 已經從舊的 MCJIT (/MCJIT) 轉換成新版的 OrcJIT (/Orc)。OrcJIT 有非常多的優點, 包括更小的編譯單位以及更為模組化的設計,讓客製化 JIT Engine 變得更簡單也 更有彈性。 ==== 以上就是所有我個人認為重要的 LLVM 元件的簡介 當然也歡迎大家補充!:) --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 169.234.228.195 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/CompilerDev/M.1593929787.A.C95.html
1F:→ Lipraxde: 之前用 OrcJIT 的時候發現 SectionMemoryManager 在處 07/05 14:54
2F:→ Lipraxde: 理一堆小 Module 的時候會用蠻浪費的方式配置 Memory, 07/05 14:54
3F:→ Lipraxde: 一直不太知道為什麼QQ 07/05 14:54
4F:推 JameC: 推推,受益無窮 07/10 20:56
5F:推 jerry0715no1: 推 感謝說明 07/11 06:46
6F:推 ChampYen: 推! 07/12 20:22
7F:推 NCTUcs: 推 07/13 13:13
8F:推 Dracarys: 推 07/21 17:49
9F:推 unimaybe: 推推,感謝分享!!((是說中間的"強料建議"打錯了XD 06/26 04:00







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燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP