天天看點

LLVM IR 了解

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 結構: 

LLVM IR 了解

 llvm是編譯器後端,前端詞文法分析,要生成機器代碼。首先定義一個虛拟機,生成位元組代碼,将代碼轉化成對應系統結構。編譯過程中,加入了流程控制,讓開發者介入。

開發一種新的程式設計語言,在詞法,文法解析完成後,生成中間代碼,然後優化,最後編譯成目标機器碼。llvm 中間代碼,效率高,可讀性好。按照文法規則,利用llvm操作IR接口,生成等價的IR。如何編譯成目标代碼呢?llvm不僅僅是虛拟機,實作了子產品化的優化政策和多種後端,後面都交給llvm。

總之:開發一種新程式設計語言,需要完成詞法和文法解析,根據接口,生成可用的IR。

LLVM IR編譯歸納圖

LLVM IR 了解

人工智能晶片與自動駕駛

上一篇: Docker Compose
下一篇: Ruby 判斷

繼續閱讀