LLVM IR 理解
LLVM IR表示
LLVM IR有三個不同的形式:
內存中編譯中間語言(IR)
保存在硬盤上的 bitcode(.bc
文件,適合快速被一個 JIT 編譯器加載)
一個可讀性的匯編語言表示(.ll
文件)。
LLVM為高效編譯轉換和分析,提供一個強大的中間表示。LLVM 的三種不同的形式都是等價的。以下是三種表示的轉化方式。
LLVM 語言在輕量、底層、同時富有表現力,類型化,易於擴展。LLVM IR 語言目標是成為一種"通用中間語言",通過足夠低層次,使高級語言可以清晰的映射。通過提供類型信息,LLVM IR 語言可作為優化的目標:
例如,通過指針分析,可以證明,一個 C 自動變量,從不當前函數之外訪問,允許被提升到一個簡單的 SSA 值,而不是一個堆變量。
LLVM接口構建IR代碼
LLVM提供很多API,用於操作IR。使用這些接口,直接在內存中生成IR,直接運行,輸出結果。(開發一種新的編程語言,完成詞法語法解析后,利用LLVM 接口生成有效的中間代碼,很快編譯到目標平台上。)
LLVM IR 結構:
llvm是編譯器后端,前端詞語法分析,要生成機器代碼。首先定義一個虛擬機,生成字節代碼,將代碼轉化成對應系統結構。編譯過程中,加入了流程控制,讓開發者介入。
開發一種新的編程語言,在詞法,語法解析完成后,生成中間代碼,然后優化,最后編譯成目標機器碼。llvm 中間代碼,效率高,可讀性好。按照語法規則,利用llvm操作IR接口,生成等價的IR。如何編譯成目標代碼呢?llvm不僅僅是虛擬機,實現了模塊化的優化策略和多種后端,后面都交給llvm。
總之:開發一種新編程語言,需要完成詞法和語法解析,根據接口,生成可用的IR。
LLVM IR編譯歸納圖