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

       

[置顶] LLVM每日谈之十五 LLVM自带的examples的更多相关文章

  1. LLVM每日谈之十九 LLVM的第一本系统的书<Getting Started with LLVM Core Libraries>

    作者:史宁宁(snsn1984) LLVM最终有了一本系统的书了--<Getting Started with LLVM Core Libraries>. 这本书号称是LLVM的第一本书, ...

  2. [置顶] 【Git入门之十五】Github操作指南

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12374633 最终篇,介绍一下Github网站的使用,主要是翻译为主,简化了 ...

  3. LLVM每日谈之二十 Everything &amp;&amp; Clang driver

    作者:史宁宁(snsn1984) 近期在读<Getting Started with LLVM Core Libraries>.这是读的第一本LLVM的书.非常多地方尽管讲的是自己知道的东 ...

  4. LLVM每日谈21 一些编译器和LLVM/Clang代码

    作者:闪亮宁(snsn1984) 一些自己的收藏LLVM/Clang代码,而他自己写一些一点点LLVM/Clang译器的代码.在这里把这些代码库分享出来,欢迎大家交流探讨. 1.crange http ...

  5. [置顶] 【Git入门之十四】Git GUI

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12374495 文章都快写完了,Git GUI才浮出水面,很多人要骂我,这么方 ...

  6. [置顶] 【Git入门之十】Rebase操作

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309627 Rebase,衍合?变基?唉,我也不知道要怎么翻译合适...变 ...

  7. Qt浅谈之四十五QSplitter实现自由伸缩滑动窗口

    一.简介 最近看到一篇Qt实现伸缩滑动的窗口的文章,但其代码不完整.便在此重新书写了完整的代码,并开源出来.窗口的中央有滑动条可以动态改变子窗口的大小,隐藏的按钮可以快速伸缩子窗口.其效果图如下: 二 ...

  8. 每日算法之三十五:Wildcard Matching

    模式匹配的实现,'?'代表单一字符,'*'代表随意多的字符.写代码实现两个字符串是否匹配. Implement wildcard pattern matching with support for ' ...

  9. [置顶] JDK工具(零)--简要介绍JDK1.6自带的42个工具

    Java的开发人员肯定都知道JDK的bin目录中有“java.exe”和“javac.exe”这两个命令行工具, 但并非所有的Java程序员都了解过JDK的bin目录之中其它命令行程序的作用. JDK ...

随机推荐

  1. ADS1.2安装

    一.ADS1.2的安装 1. 解压 2. 双击打开ads1.2 3.我们选择当中的SETUP.EXE文件,进行安装 4.点击Next: 5.这是许可文件,假设允许的话选择Yes: 6.选择安装文件夹, ...

  2. Office 2013 正式版 下载地址 带正版验证

    万众期待的正式版Office 2013 降临---英文版/中文简体版 英文版软件下载地址: office_professional_plus_2013_x86_dvd en_office_profes ...

  3. AngularJs 父子级Controller传递数据

    <div ng-controller="MyAccountCtrl"> <div ng-controller="TransferCtrl"&g ...

  4. 【Demo 0010】事件响应链

    本章学习要点:       1.  熟悉iOS事件分发过程以及事件响应链;       2.  掌握基本事件响应方法(单击,双击):       3.  掌握基本手势处理方法:

  5. IE7IE8兼容性设置_服务器端设定

    用ASP.NET开发的web程序,客户端是IE7以上时,需要设置IE的兼容性,否则web页面可能混乱,但这样在每客户端设置不太现实, 对策: ①在站点的配置文件中,修改web.config文件,使得该 ...

  6. 与众不同 windows phone (25) - Input(输入)之捕获 UIElement 之外的触控操作, Silverlight 方式捕获手势操作, XNA 方式捕获手势操作, 多点触控

    原文:与众不同 windows phone (25) - Input(输入)之捕获 UIElement 之外的触控操作, Silverlight 方式捕获手势操作, XNA 方式捕获手势操作, 多点触 ...

  7. 深入分析 Java 中的中文编码问题(1)

    几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...

  8. 解决Eclipse中文乱码的方法

    (1)设置Project的编码格式: 在 Workspace中新建的项目默认继承Workspace的编码设置.我们也能够单独更改某个项目的编码格式.右键点击project.选择 Properties, ...

  9. 参数传递方法(Delphi1.0与win16API使用pascal方法,即从左到右)

    参数传递方法李维的InsideVCL<第一章>中提到Windows定义的回调函数typedef LRESULT (CALLBACK*WNDPROC)(HWND,UNIT,WPARAM,LP ...

  10. [Android学习笔记]Canvas的使用

    Canvas文档 http://developer.android.com/training/index.html 在绘制view时候,重写onDraw(canvas)方法,可能需要在canvas上绘 ...