做者: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的人去认真学习一下。代码很少,可是把问题介绍的很清楚。