LLVM每日談之壹 LLVM是什麽
寫在前面的話:最近接觸llvm比較多,在這個上面花了不少的時間。感覺llvm要完全理解透是個很不容易的事情,需要在學習過程中好好的整理下自己的思路。剛好又閱讀了開源項目Storm的作者Nathan Marz的博客《You should blog even if you have no readers》,就打開自己的blog,開始了這個llvm每日談的系列。希望自己能堅持的久壹點,多寫寫llvm的每個方面,多寫寫自己的理解。llvm是low level virtual machine的簡稱,其實是壹個編譯器框架。llvm隨著這個項目的不斷的發展,已經無法完全的代表這個項目了,只是這種叫法壹直延續下來。llvm是壹個開源的項目。它最早的時候是Illinois的壹個研究項目,主要負責人是Chris Lattner,他現在就職於Apple. Apple 目前也是llvm項目的主要贊助者之壹。llvm的主要作用是它可以作為多種語言的後端,它可以提供可編程語言無關的優化和針對很多種CPU的代碼生成功能。此外llvm目前已經不僅僅是個編程框架,它目前還包含了很多的子項目,比如最具盛名的clang.llvm的優點是開源,有壹個表達形式很好的IR語言,模塊化作的特別好。llvm這個框架目前已經有基於這個框架的大量的工具可以使用。llvm的官方網站地址是:llvm.org。在這裏可以下載最新的發布代碼,也可以找到介紹llvm的相關文檔。附錄:llvm目前支持的工具(描述來自網絡)llvm-as 將人類可讀的 .ll 文件匯編成字節代碼llvm-dis 將字節代碼文件反編成人類可讀的 .ll 文件opt 在壹個字節代碼文件上運行壹系列的 LLVM 到 LLVM 的優化llc 為壹個字節代碼文件生成本機器代碼lli 直接運行使用 JIT 編譯器或者解釋器編譯成字節代碼的程序llvm-link 將幾個字節代碼文件連接成壹個llvm-ar 打包字節代碼文件llvm-ranlib 為 llvm-ar 打包的文件創建索引llvm-nm 在 字節代碼文件中打印名字和符號類型llvm-prof 將 'llvmprof.out' raw 數據?式化成人類可讀的報告llvm-ld 帶有可裝載的運行時優化支持的通用目標連接器llvm-config 打印出配置時 LLVM 編譯選項、庫、等等llvmc 壹個通用的可定制的編譯器驅動llvm-diff 比較兩個模塊的結構bugpoint 自動案例測試減速器llvm-extract 從 LLVM 字節代碼文件中解壓出壹個函數llvm-bcanalyzer 字節代碼分析器 (分析二進制編碼本身,而不是它代表的程序)FileCheck 靈活的文件驗證器,廣泛的被測試工具利用tblgen 目標描述閱讀器和生成器lit LLVM 集成測試器,用於運行測試