这是从我《一份关于各种安装LLVM的方法的总结》中分支出来的。因为这个内容写进那一篇会太杂乱。

还是以翻译+自己总结的形式写出来,官网上介绍的东西太好了。

还不完善,会持续更新其中的内容,欢迎大家指正。


目录层次结构Directory Layout

一个很有用的LLVM源码信息的来源是LLVM的doxygen文档http://llvm.org/doxygen/

llvm/examples

这个目录是一些使用LLVM IR和JIT的简单例子

llvm/include

这是从LLVM library中导出的公共头文件。在llvm/include下还有三个主要的子目录:

llvm/include/llvm

这个子目录下是所有LLVM的专用头文件,在这个子目录下还有很多子目录,比如:/Analysis,  /CodeGen,  /Target,  /Transform...

llvm/include/llvm/Support

这个子目录下是LLVM提供的生成的支持库,但不是专门针对LLVM的。比如说,是一些C++ STL的工具和一个处理库存储在这里的头文件的命令行选项

llvm/include/llvm/Config

是由configure脚本配置的头文件。封装了标准UNIX和C的头文件。可以在源代码中使用#include的包含这些由configure脚本生成的头文件。

(实际上我在源码中看到的/Support文件夹下是有很多的头文件,反而/Config文件夹下不是)

llvm/lib

这个目录下存放着大部分的源码,将源码放进库中,可以使得LLVM能在一些工具间分享代码。(对于Realease版本的是很多库文件)。这个目录下的其他主要的子目录:

llvm/lib/IR

核心的LLVM的源码文件(.cpp文件),这些文件实现了很多核心的类(class),比如:Instruction类,BasicBlock类。

llvm/lib/AsmParser

LLVM汇编语言解析器库的源代码。

llvm/lib/Bitcode/

(?)Code for reading and writing bitcode.

llvm/lib/Analysis/

很多程序分析工具,比如: Call Graphs, Induction Variables, Natural Loop Identification。

llvm/lib/Transforms/

IR的转换程序,比如:Aggressive Dead Code Elimination, Sparse Conditional Constant Propagation, Inlining, Loop Invariant Code Motion, Dead Global Elimination等。

llvm/lib/Target/

存放描述代码生成的目标架构的文件。比如说,llvm/lib/Traget/x86子目录下存放的就是X86架构的相关描述。

llvm/lib/CodeGen/

代码生成器的主要部分,包含:Instruction Selector, Instruction Scheduling, and Register Allocation。

llvm/lib/MC/

官网文档上没写具体的。

llvm/lib/ExecutionEngine/

存放直接在解释和JIT-编译的场景中在运行时执行的bitcode。

llvm/lib/Support/

存放llvm/include/ADT和llvm/include/Support/目录下的头文件所对应的源码。

llvm/projects

这个目录对应的内容,严格意义上讲,不是LLVM的一部分,而是随LLVM一起交付的。这也是用于创建自己的基于LLVM的项目的目录,这些项目利用了LLVM构建系统。

llvm/test

LLVM基础结构上的特性和回归测试以及其他健全性检查。它们旨在快速运行并覆盖很多领域,而不会很低效。

llvm/tools

这个目录下存放的是由之前介绍过的库文件build而成的可执行文件(工具),这是用户交互的主要部分。获取帮助的方式是输入命令:xxx(tool_name) -help。接下来是对重要工具的简要介绍。

工具使用方法的更多的细节信息在命令指南中http://llvm.org/docs/CommandGuide/index.html。

bugpoint工具

主要用于调试起优化作用的pass(遍)或者用于代码生成的后端,通过将给定的测试案例缩小到 使用最低数量的pass(遍)或者指令,来看会不会崩溃或编译错误。

详细使用方式,参照:http://llvm.org/docs/HowToSubmitABug.html

llvm-ar  (llvm archiver)

The archiver produces an archive containing the given LLVM bitcode files, optionally with an index for faster lookup.

llvm-as (llvm asembler )

The assembler transforms the human readable LLVM assembly to LLVM bitcode.

llvm-dis(llvm disassembler)

The disassembler transforms the LLVM bitcode to human readable LLVM assembly.

llvm-link

llvm-link, not surprisingly, links multiple LLVM modules into a single program.

lli (llvm interpreter)

lli is the LLVM interpreter, which can directly execute LLVM bitcode (although very slowly…). For architectures that support it (currently x86, Sparc, and PowerPC), by default, lli will function as a Just-In-Time compiler (if the functionality was compiled in), and will execute the code much faster than the interpreter.

llc (llvm backend compiler)

llc is the LLVM backend compiler, which translates LLVM bitcode to a native code assembly file.

opt

opt reads LLVM bitcode, applies a series of LLVM to LLVM transformations (which are specified on the command line), and outputs the resultant bitcode. ‘opt -help’ is a good way to get a list of the program transformations available in LLVM.

opt can also run a specific analysis on an input LLVM bitcode file and print the results. Primarily useful for debugging analyses, or familiarizing yourself with what an analysis does.

llvm/utils

与LLVM源码相关的一些工具,有的工具是build过程的一部分,因为他们是部分框架的代码生成器。

codegen-diff

cedegen-diff用于发现LLC和LLI生成的代码的不同。在你使用两者之一进行调试的时候很有用。获取完整的用户手册,运行命令:perldoc codegen-diff

emacs/

Finds and outputs all non-generated source files, useful if one wishes to do a lot of development across directories and does not want to find each file. One way to use it is to run, for example: xemacs`utils/getsources.sh` from the top of the LLVM source tree.

llvmgrep

Performs an egrep -H -n on each source file in LLVM and passes to it a regular expression provided on llvmgrep’s command line. This is an efficient way of searching the source base for a particular regular expression.

TableGen/

Contains the tool used to generate register descriptions, instruction set descriptions, and even assemblers from common TableGen description files.

vim/

vim syntax-highlighting for LLVM assembly files and TableGen description files. See the  README for how to use them.

(有的没有翻译是因为,我发现英文其实更好理解,或者我自己没有实际使用过对应的工具,没有体验过,害怕翻译出来引起误导,后面我搞清楚之后会补充,更多的解释内容我会尽可能持续更新...)

LLVM的源码目录结构相关推荐

  1. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

  2. Android 10 根文件系统和编译系统(四):Android源码目录结构

    配套系列教学视频链接: Android 10.0 AOSP源码编译: https://www.100ask.net/detail/p_60a1e037e4b0adb2d864c6d8/6 Androi ...

  3. asterisk源码目录结构

    版本:asterisk-1.8.7.1 下载地址:asterisk-1.8.7.1.tar.gz main函数所在文件:main/asterisk.c (3182行) 文件夹: addons :ast ...

  4. 【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接

    http://blog.csdn.net/geng823/article/details/37567557 [原创][专栏]<Linux设备驱动程序>--- LDD3源码目录结构和源码分析 ...

  5. RTOS之uCOS-II源码下载及源码目录结构、常见的RTOS!

    RTOS有众多种,用得最火的是FreeRTOS,因为它即使用于商业途径,也是开源免费的:其次是就是uCOS-II和uCOS-III.uCOS-II用于商业途径是需要付费的,但是对于学习研究却是免费的. ...

  6. linux与安卓系统目录,android系统架构及源码目录结构

    1. android系统架构: android系统架构采用了分层架构的思想,如下图所示,从上到下共4层,分别为:应用程序层.应用程序框架层.系统库和android运行时层.linux内核层. 每层功能 ...

  7. 【lLinux驱动】linux内核源码目录结构

    linux内核源码目录结构 代码目录结构 在阅读源码之前,还应知道Linux内核源码的整体分布情况.现代的操作系统一般由进程管理.内存管理.文件系统.驱动程序和网络等组成.Linux内核源码的各个目录 ...

  8. Pixhawk飞控源码目录结构及编译流程分析

     http://blog.csdn.net/xlb7679/article/details/51658956 (PS:这是第一次写博客,以前也有记录一些经验总结心得什么的,不过都是手写笔记或者记在 ...

  9. Android系统源码学习——源码目录结构介绍

    2019独角兽企业重金招聘Python工程师标准>>> Android 4.0源码目录结构: 本文介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Andr ...

最新文章

  1. L2-006. 树的遍历(不建树)
  2. php如何按降序,PHP数组如何按键名实现降序排列
  3. java date 一个月_java中的日期加一个月的计算
  4. 计划任务如何使用 java_java – 如何计划任务以定期间隔运行?
  5. java6特性_Java开发者:你应该远离的6个Java特性
  6. 从零开始学习音视频编程技术(四) FFMPEG的使用
  7. 学习.net 2.0需要讲究一下策略
  8. Java到底如何更优雅的处理空值?
  9. 网站降权原因解析 -转
  10. Qt_qDebug 原理详解
  11. Chrome 谷歌浏览器安装Axure插件
  12. C语言输出菱形(C笔记)
  13. Python之Selenium模拟浏览器
  14. Matlab根据excel数据画图
  15. 20162316刘诚昊 Java Queue的测试
  16. GIF录制工具(免安装)
  17. Spark~Spark介绍
  18. 在命令行中查看apk的签名信息
  19. C#:魔术师发牌-解法思路
  20. 对于一颗满二叉排序树深度为K,求最小子树根节点值 Python代码实现

热门文章

  1. 瑞芯微PX30芯片参数和处理器介绍
  2. time datetime 总结
  3. 四川托普计算机职业学校环境,四川四川托普计算机职业学校
  4. 在matlab中画收敛域,已知用下列差分方程描述的一个线性移不变因果系统(用MATLAB方法求解)。y(n)=y(n-1)+y(n-2)十x(n-1.. - 上学吧找答案...
  5. 自定义View学习之仿QQ运动步数进度效果
  6. 51智能小车pwm调速
  7. 产品读书《数字化生存》
  8. android立体3D效果_3D立体画手绘墙体彩绘
  9. 嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区
  10. 应届生招聘的一些感悟和思考