llvm的初步理解


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

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文件

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

IR的結構簡單分為Module、body

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

 通過LLVM源碼還可以定制自己的編譯器和編譯流程,我們留待下篇解答。

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


免責聲明!

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



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