LLVM IR 了解
LLVM IR有三個不同的形式:
記憶體中編譯中間語言(IR)
儲存在硬碟上的 bitcode(<code>.bc</code> 檔案,适合快速被一個 JIT 編譯器加載)
一個可讀性的彙編語言表示(<code>.ll</code> 檔案)。
LLVM為高效編譯轉換和分析,提供一個強大的中間表示。LLVM 的三種不同的形式都是等價的。以下是三種表示的轉化方式。
LLVM 語言在輕量、底層、同時富有表現力,類型化,易于擴充。LLVM IR 語言目标是成為一種"通用中間語言",通過足夠低層次,使進階語言可以清晰的映射。通過提供類型資訊,LLVM IR 語言可作為優化的目标:
例如,通過指針分析,可以證明,一個 C 自動變量,從不目前函數之外通路,允許被提升到一個簡單的 SSA 值,而不是一個堆變量。
LLVM接口建構IR代碼
LLVM提供很多API,用于操作IR。使用這些接口,直接在記憶體中生成IR,直接運作,輸出結果。(開發一種新的程式設計語言,完成詞法文法解析後,利用LLVM 接口生成有效的中間代碼,很快編譯到目标平台上。)
LLVM IR 結構:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SZ3YjYyADOhRTNiNDNkV2NjhjYyETZ2YTYjV2NmJTMi9CXxMzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
llvm是編譯器後端,前端詞文法分析,要生成機器代碼。首先定義一個虛拟機,生成位元組代碼,将代碼轉化成對應系統結構。編譯過程中,加入了流程控制,讓開發者介入。
開發一種新的程式設計語言,在詞法,文法解析完成後,生成中間代碼,然後優化,最後編譯成目标機器碼。llvm 中間代碼,效率高,可讀性好。按照文法規則,利用llvm操作IR接口,生成等價的IR。如何編譯成目标代碼呢?llvm不僅僅是虛拟機,實作了子產品化的優化政策和多種後端,後面都交給llvm。
總之:開發一種新程式設計語言,需要完成詞法和文法解析,根據接口,生成可用的IR。
LLVM IR編譯歸納圖
人工智能晶片與自動駕駛