LLVM每日谈之十五 LLVM自带的examples

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

       

时间: 2024-09-26 22:25:11

LLVM每日谈之十五 LLVM自带的examples的相关文章

LLVM每日谈之十六 LLVM的学习感悟

这些总结并非我自己写的,而是摘自LLVM的版本比较老的文档中.因为老版本的文档已经鲜有人关注了,而这篇总结的非常好,到现在也很有用处,所以就把这部分内容贴出来了.这只是原文档的一部分. 原文档地址:http://llvm.org/releases/1.1/docs/Stacker.html 正文内容: Lessons I Learned About LLVM Everything's a Value! Although I knew that LLVM uses a Single Static

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

作者:史宁宁(snsn1984) LLVM终于有了一本系统的书了--<Getting Started with LLVM Core Libraries>.这本书号称是LLVM的第一本书,但是据说日本早就有两本日文的关于LLVM的书,这个了解的不多.不过可以肯定的是,这本书是英文表述的第一本书. 这本书的覆盖范围很广,从简单的如何安装LLVM一直到各个部分的介绍,以及如何使用这些部分去创建自己的工具,都有所介绍.对于想使用LLVM去创建自己的工具的人,完全是够用的,而且是非常不错的一本书.这也是

LLVM每日谈之十三 使用LLVM自带的PASS

作者:snsn1984 PS:最近一段时间,投入在LLVM上的时间有些减少.差点把对它的研究断掉,今天开始继续.对LLVM的研究需要很长一段时间的坚持不懈才可以彻底搞明白. 前面已经介绍过如何写自己的PASS,并且也针对一个简单的PASS进行了分析和介绍.相信大家也可以从LLVM源码中找到很多的PASS,这些PASS太多,他们每个到底是做什么用?如何去调用这些系统已经有的PASS?这就是这次每日谈要关注的问题. 在文档 http://llvm.org/docs/Passes.html 中,列出了

LLVM每日谈之十四 如何给Clang添加一个属性

每次内容主要出自文档: "Clang" CFE Internals Manual 地址: http://clang.llvm.org/docs/InternalsManual.html 在这个文档中,以简明的的一个例子说明了如何按照这个方式在Clang中添加一个属性.讲的很清楚,我在这里不再累述,只是将例子中的部分代码和文档结合起来,一起展现给大家. How to add an attribute¶ To add an attribute, you'll have to add it

LLVM每日谈之十八 GEP Instruction的几点总结

In summary, here's some things to always remember about the GetElementPtr instruction: The GEP instruction never accesses memory, it only provides pointer computations. The first operand to the GEP instruction is always a pointer and it must be index

LLVM每日谈之十 LLVM Test简介

作者:snsn1984 就像很多优秀的软件都有自己的测试框架一样,LLVM也有自己的测试框架.LLVM的测试主要分为两 部分:regression tests 和 whole programs.其中,regression tests主要位于LLVM源码/test目录下,主要是 用来测试LLVM的一些特性或者是用来测试一些bug的.我们在平时的工作中,一般使用的就是这个类型的test. whole programs这个类型的测试,不在LLVM的源码中,在SVN库上有自己的单独目录,一般称之为tes

LLVM每日谈之二十三 LLVM/Clang编译Linux内核资料

作者:史宁宁(snsn1984) 之前有朋友问到这个问题,是否有使用LLVM/Clang编译Linux内核的,随手找了一些相关资料,在这里贴出来,与大家共享. 网址:http://llvm.linuxfoundation.org 项目简介: LLVMLinux Project Overview This project aims to fully build the Linux kernel using Clang which is the C front end for the LLVM co

LLVM每日谈之七 Clang

作者:snsn1984         官方介绍Clang是LLVM native的一个面向C/C++/Objective-C的编译器,目标是要提供一个编译非常快的编译器.他们宣称在Debug模式下编译Objective-C比GCC快3倍.至于是否能比GCC快这么多,总有人去做对比,大家可以搜索下,好像确实快了些. Clang一般被说是LLVM的一个前端.关于前端的定义,大家可以从LLVM每日谈之二里面看到前端在整个LLVM体系中的位置.Clang当初的定位就是要做下一个十年中一个伟大的前端,这

LLVM每日谈之四 Pass初探

作者:snsn1984 LLVM 的Pass框架是LLVM系统的一个很重要的部分.每个Pass都是做优化或者转变的工作,LLVM的优化和转换工作就是由很多个Pass来一起完成的. 所以按照我的理解,Pass就是LLVM系统转化和优化的工作的一个节点,每个节点做一些工作,这些工作加起来就构成了LLVM整个系统的优化和转化.Pass架构这么做的话,可重用性非常好,你可以选择已有的一些Pass,自己去构建出自己想要的优化和转化效果.并且自己也可以重新写Pass去做自己想要的优化和转变,因为每个Pass