llvm的初步理解

LLVM是一個構建編譯器的開源項目,其中Clang是其中一個比較典型的子項目。html

LLVM的核心架構思想以下圖前端

 

上圖關鍵是LLVM IR,LLVM IR 把這個編譯流程分爲前端-中間優化-後端三個部分。後端

前端是把某種語言編譯爲LLVM IR,中間優化是LLVM的固定優化管線,後端是針對LLVM IR 生成各類目標框架支持的彙編語言。架構

LLVM IR有三種形式:二進制文件.bc、人類可閱讀文件.ll、內存的表達;框架

相似 clang -emit-llvm -c hello.c -o hello.bc 生成bc文件優化

相似 llvm-dis hello.bc 生成.ll文件htm

.ll文件結構以下:語法接近C語言,比彙編語言抽象,比C語言底層而繁雜。blog

IR的結構簡單分爲Module、body內存

其中全局變量用@,局部變量用%,%1指的是第一個寄存器(抽象意義上的寄存器,不一樣於CPU的寄存器), alloca 是聲明, align是字節對齊位數,store是存儲,load是加載文檔

 經過LLVM源碼還能夠定製本身的編譯器和編譯流程,咱們留待下篇解答。

文檔連接:https://llvm.org/docs/WritingAnLLVMPass.html

相關文章
相關標籤/搜索