做者: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的人去認真學習一下。代碼很少,可是把問題介紹的很清楚。