llvm 代码结构

发布时间:2014-10-23 23:30:15
来源:分享查询网

翻译于(http://llvm.org/docs/GettingStarted.html) 以下是一个简短的介绍代码布局: llvm/examples 这个目录包含一些简单的示例,这些演示如何使用LLVM IR和JIT。 llvm/include llvm/include/llvm 这个目录包含所有的LLVM特定头文件。这个目录的子目录也有不同部分的LLVM:Analysis,CodeGen,Target,Transforms, 等。。。 llvm/include/llvm/Support 这个目录包含,LLVM提供的泛型支持库但不一定是特定于LLVM。例如,一些c++ STL utilities和一个命令行选项处理库头文件存储在这里 llvm/include/llvm/Config 这个目录包含头文件配置的配置脚本。这里包装了“标准的”UNIX和C头文件。源码可以包含这些头文件,这些头文件能自动考虑到条件句 #includes 并且配置脚本生成。 llvm/lib系统的 这个目录包含大部分的LLVM的系统的源文件。在LLVM中,几乎所有的代码存在于libraries,这样使在不同的tools中共享代码是很容易的。 llvm/lib/VMCore/ 此目录保存着核心LLVM源文件, 这些文件实现了核心的类 比如Instruction 和BasicBlock。 llvm/lib/AsmParser/ 此目录保存着LLVM汇编语言解析器库的源代码。 llvm/lib/BitCode/ 此目录保存着读写LLVM bitcode的源代码。 llvm/lib/Analysis/ 这个目录包含各种不同的程序分析,例如 Dominator 信息,Call Graphs,Induction Variables,IntervalIdentification,Natural Loop Identification 等。 llvm/lib/Transforms/ 此目录包含了 从LLVM 到LLVM程序转换的源代码,例如Aggressive Dead Code Elimination,Sparse Conditional Constant Propagation,Inlining,Loop Invariant Code Motion,Dead Global Elimination等。 llvm/lib/Target/ 这个目录包含的文件描述了各种目标架构的代码生成。例如llvm/lib/Target/X86目录 是 X86机器的描述,而llvm/lib/Target/ARM 实现的是ARM 的后端。 llvm/lib/CodeGen/ 这个目录包含了主要部分的代码生成器:InstructionSelector,Instruction Scheduling 和Register Allocation llvm/lib/MC/ llvm/lib/Debugger/ 这个目录包含源代码级调试器库,它使LLVM program 成为一个工具,当程序执行的时候,Debugger 可以识别源代码的位置。 llvm/lib/ExecutionEngine/ 这个目录包含了在运行时解释和JIT编译的形式直接执行LLVM字节码的库。 llvm/lib/Support/ 这个目录包含llvm/include/ADT/和llvm/include/Support/头文件相对应的源代码。 llvm/projects 这个目录包含的projects 不是严格意义上的llvm的部分,但是是LLVM附带的。这个应该是你创建自己的基于llvm项目的目录。参见lvm/projects/sample ,如何建立自己的项目。 llvm/runtime 这个目录包含库的编译成LLVM bitcode的库,这些库在用clang 前端链接程序的时候被使用。大部分的库是真实库的精简版;例如,libc是一个精简版本的glibc。 与其他的LLVM套件不同,这个目录需要LLVM GCC前端编译。 llvm/test 这个目录包含功能和回归测试和其他LLVM infrastructure的正常的检查。这些旨在快速运行和覆盖大量的区域而不是详尽的。 test-suite 在通常的llvm模块里,这不是一个目录;它是一个一定要被取出的单独Subversion模块(通常在projects/test-suite) llvm/tools tools 目录包含了,由libraries 构建生成的可执行文件,这构成了用户借口的主要部分。你通常可以通过 输入 工具名 -help 的方式获得相应的帮助。一下是对重要工具的简短的介绍。更多的细节信息在Command Guide bugpoint bugpoint用于debug优化的passes或是代码生成的后端,通过引发问题的最小数量的passes或是指令不管是一个崩溃还是误编译来缩小给定的测试用例。见HowToSubmitABug.html更多关于使用 bugpoint 的信息。 llvm-ar 这个归档器生成一个关于LLVM bitcode 文件的存档,可选地与一个索引用于快速查找。 llvm-as 汇编器将人可读的LLVM 装配成LLVM bitcode. llvm-dis 反汇编器将 LLVM bitcode 转换成 人可都的LLVMllvm-link llvm-link, 没什么惊奇的,就是将多个LLVM模块到一个单独的程序。lli是LLVM 的解释器,可以直接执行LLVM bitcode(尽管很慢)。对于架构,它自持(现在是x86,Sparc 和PowerPC),默认,lli 将会当作一个 Just-In - time 的编译器运行(如果这个功能被编译了的),并将执行比解释器快得多。 llc llc 是LLVM 后端编译器。它会将LLVM bitcode 转换成一个本地代码汇编文件或是C代码文件(用 -march=C 的选项)。 opt opt 读取LLVM bitcode,应用一系列的LLVM 到LLVM transformations(在命令行中指定),然后生成 合成的bitcode。“opt - help '命令是一个很好的方式在LLVM中获得一组可用的程序转换。 opt 也可以用于运行特定的analysis 在输入的LLVM bitcode 文件并且打印输出运行结果。它主要用于调试分析,或是熟悉分析做什么。 llvm/utils codegen-diff codegen-diff是一个脚本,用于发现LLC和LLI产生代码的差异。这是一个有用的工具如果你调试其中之一,假设其他产生正确的输出。获取完整的用户手册,运行‘perldoc codegen-diff’。 emacs/ emacs目录包含语法高亮文件,他将会与Emacs和XEmacs editors一起起作用。为LLVMassembly 文件和TableGen描述文件提供语法高亮支持。关于如何使用语法文件请查阅目录里的README文件。 getsrcs.sh getsrcs.sh脚本找到并输出所有非生成的源文件。这是有用的如果一个人想要做很多跨目录的项目。一种方式使用它是运行,例如:xemacs`utils/getsources.sh` 在您顶层的LLVM源代码树。 llvmgrep 这个小工具执行egrep -H -n在LLVM 中的每个源文件 并传递给llvmprep 的命令行提供的正则表达式。 makellvm makellvm 脚本编译当前目录的所有文件并且编译链接第一个参数的tool。例如,假定您在目录llvm/lib/Target/Sparc,如果makellvm是在您的路径,简单地运行makellvm llC 将会构建当前的目录,切换到llvm/tools/llc 目录并且构建它,然后会引发重新链接LLC。 TableGen/ TableGen 目录包含这样的工具,它用于产生寄存器描述,指令集描述,甚至是有关常见的TableGen描述的汇编程序。 vim/ vim目录包含文件的语法高亮现实文件,他将伴随vim编辑器的使用。为LLVMassembly 文件和TableGen描述文件提供语法高亮支持。关于如何使用语法文件请查阅目录里的README文件。 *转载请注明出处

返回顶部
查看电脑版