LLVM IR 理解


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編譯歸納圖

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM