LLVM IR 理解
LLVM IR 理解
LLVM IR表示
LLVM IR有三個(gè)不同的形式:
內(nèi)存中編譯中間語言(IR)
保存在硬盤上的 bitcode(.bc 文件,適合快速被一個(gè) JIT 編譯器加載)
一個(gè)可讀性的匯編語言表示(.ll 文件)。
LLVM為高效編譯轉(zhuǎn)換和分析,提供一個(gè)強(qiáng)大的中間表示。LLVM 的三種不同的形式都是等價(jià)的。以下是三種表示的轉(zhuǎn)化方式。
LLVM 語言在輕量、底層、同時(shí)富有表現(xiàn)力,類型化,易于擴(kuò)展。LLVM IR 語言目標(biāo)是成為一種"通用中間語言",通過足夠低層次,使高級語言可以清晰的映射。通過提供類型信息,LLVM IR 語言可作為優(yōu)化的目標(biāo):
例如,通過指針分析,可以證明,一個(gè) C 自動(dòng)變量,從不當(dāng)前函數(shù)之外訪問,允許被提升到一個(gè)簡單的 SSA 值,而不是一個(gè)堆變量。
LLVM接口構(gòu)建IR代碼
LLVM提供很多API,用于操作IR。使用這些接口,直接在內(nèi)存中生成IR,直接運(yùn)行,輸出結(jié)果。(開發(fā)一種新的編程語言,完成詞法語法解析后,利用LLVM 接口生成有效的中間代碼,很快編譯到目標(biāo)平臺上。)
LLVM IR 結(jié)構(gòu):
llvm是編譯器后端,前端詞語法分析,要生成機(jī)器代碼。首先定義一個(gè)虛擬機(jī),生成字節(jié)代碼,將代碼轉(zhuǎn)化成對應(yīng)系統(tǒng)結(jié)構(gòu)。編譯過程中,加入了流程控制,讓開發(fā)者介入。
開發(fā)一種新的編程語言,在詞法,語法解析完成后,生成中間代碼,然后優(yōu)化,最后編譯成目標(biāo)機(jī)器碼。llvm 中間代碼,效率高,可讀性好。按照語法規(guī)則,利用llvm操作IR接口,生成等價(jià)的IR。如何編譯成目標(biāo)代碼呢?llvm不僅僅是虛擬機(jī),實(shí)現(xiàn)了模塊化的優(yōu)化策略和多種后端,后面都交給llvm。
總之:開發(fā)一種新編程語言,需要完成詞法和語法解析,根據(jù)接口,生成可用的IR。
LLVM IR編譯歸納圖
總結(jié)
以上是生活随笔為你收集整理的LLVM IR 理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4D毫米波雷达Radar
- 下一篇: OpenCL通用异构开放环境