作者:snsn1984
在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都有對應的文檔專門介紹:http://llvm.org/docs/tutorial/ 。它展示了如何在LLVM之上建構一個支援一門自己定義的程式設計語言的編譯器。這不但有利于了解編譯器的工作流程,也非常有利于了解LLVM。是非常适合剛接觸LLVM的人學習的一個例子,因為它配有詳細的文檔說明,并且貫穿了編譯器的整個流程,沒有理由不認真的學習它。
llvm/examples/ModuleMaker 這個例子展示了如果建立Module,并且在它之中建立函數的過程。代碼很少,但是行行都是經典,是一直可以用來參考的例子。基本上參照它,就可以完成一個Module的大部分功能的建立。
llvm/examples/OCaml-Kaleidoscope 這個例子和Kaleidoscope例子的差別在于,它是Objective Caml版本的Kaleidoscope。除此之外,并無其他。
llvm/examples/ParallelJIT 這個例子是個并行版本的HowToUseJIT。是以适合需要了解如何在LLVM之下生成一個Module,并且要支援并行和JIT的人去認真學習一下。代碼不多,但是把問題介紹的很清楚。
