LLVM每日談之十五 LLVM自帶的examples
01-30
在LLVM源碼的目錄下,有一個目錄叫做examples,這個目錄下邊有幾個LLVM的例子,初學者一般不會太關注這些例子,但是這些例子確實是精華中的精華,在LLVM的學習過程中不可避免的要對這些例子所涉及內容要精通。所以希望大家一定要對這些例子重視起來,它們都是經典中的經典。從我個人而言,從這些例子中學到了很多,文檔說了很多都沒能讓人明白的東西,在這裡,一個簡單的例子就講的很清楚了。
首先,要想執行這些例子,可以在cmake的時候加上參數 -DLLVM_BUILD_EXAMPLES=ON 。這樣在最終編譯出的bin目錄下的可執行文件中,就多了這幾個例子的可執行文件,運行這些文件就可以看到這些例子的輸出。 接下來,我們看看這些例子到底都講了什麼東西。llvm/examples/BrainF (Need To Do)
llvm/examples/ExceptionDemo (Need To Do)從名字上來看,這個例子介紹的是LLVM的Exception模型,但是這塊我目前還沒有涉獵,沒有進行研究,所以暫時不做介紹。 llvm/examples/Fibonacci 這個例子很像HowToUseJIT,所做的工作差不多,創建Module,創建Function,然後使用JIT,然後讓函數運行。唯一的不同之處是這個例子實現的是Fibonacci,並且在裡面展示了如何創建了判斷分支語句。 llvm/examples/HowToUseJIT 這個例子以一個很簡單的程序演示了如何使用JIT,同時因為要演示使用JIT,順便構建了一個新的Module,並且在這個Module中構建了兩個函數,這兩個函數之間還存在調用關係。所以這個例子不僅僅展示了如何使用JIT,還順便做了ModuleMaker的工作。llvm/examples/Kaleidoscope 這個例子和後面的OCaml-Kaleidoscope都有對應的文檔專門介紹:LLVM Tutorial: Table of Contents 。它展示了如何在LLVM之上構建一個支持一門自己定義的編程語言的編譯器。這不但有利於理解編譯器的工作流程,也非常有利於理解LLVM。是非常適合剛接觸LLVM的人學習的一個例子,因為它配有詳細的文檔說明,並且貫穿了編譯器的整個流程,沒有理由不認真的學習它。
llvm/examples/ModuleMaker 這個例子展示了如果創建Module,並且在它之中創建函數的過程。代碼很少,但是行行都是經典,是一直可以用來參考的例子。基本上參照它,就可以完成一個Module的大部分功能的創建。 llvm/examples/OCaml-Kaleidoscope 這個例子和Kaleidoscope例子的區別在於,它是Objective Caml版本的Kaleidoscope。除此之外,並無其他。 llvm/examples/ParallelJIT 這個例子是個並行版本的HowToUseJIT。所以適合需要了解如何在LLVM之下生成一個Module,並且要支持並行和JIT的人去認真學習一下。代碼不多,但是把問題介紹的很清楚。2013年7月8日
推薦閱讀:
※誰說不能與龍一起跳舞:Clang / LLVM (3)
※LLVM中如何獲取程序的控制流圖CFG?
※llvm memcpy的本質?
※LLVM國內的開發者需要Social一下嗎?
TAG:LLVM | Clang | ChrisLattner |