llvm/examples
使用LLVM IR和JIT的简单示例
llvm/include
LLVM的lib的公共头文件。其中有三个子目录:
llvm/include/llvm
所有LLVM特定的头文件和头文件子目录。子目录对应LLVM各个部分:Analysis,CodeGen,Target,Transforms,etc...
llvm/include/llvm/Support
LLVM提供的通用支持工具的lib头文件目录。例如,一些C++ STL小工具和命令行选项相关的lib的头文件会放在该文件夹里。
llvm/include/llvm/Config
由cmake配置的头文件。他们包括标准UNIX和C的头文件。源码可以引入这些自动处理的头文件。#include that cmake generates
llvm/lib
大部分源文件都在这里。LLVM使得各个tools之间共享源码非常容易。
llvm/lib/IR/
核心LLVM源文件,实现了核心的类如:Instruction和BasicBlock
llvm/lib/AsmParser/
解释汇编语言的源码
llvm/lib/Bitcode
读写字节码的源码
llvm/lib/Analysis
各种分析程序的源码,例如:Call-Graphs,Induction-Variables,Natural-Loop-Identification,etc
llvm/lib/Transforms
IR-to-IR 程序转换,例如:主动死代码消除,稀疏有条件常量传播,内联,循环不变码变化,死全局消除...
llvm/lib/Target
描述目标架构的代码生成。例如:llvm/lib/Target/X86 中存放X86机器的描述
llvm/lib/CodeGen
代码生成的主要部分:指令选择器,指令调度以及寄存器分配。
llvm/lib/MC
无备注
llvm/lib/ExecutionEngine
用于直接在JIT解释器中执行字节码的库
llvm/lib/Support
对应于llvm/include/ADT和llvm/include/Support的头文件
llvm/projects
这个目录严格上来说并不是llvm的一部分,是附属于llvm。这个目录可以存放用户自己利用llvm,构建的系统
llvm/test
特征和回归测试,以及其他LLVM基础设施的完整性检查。力求快速并广覆盖的检查环境,并不是面面俱到的。
test-suite
一个全面正确性,性能,及基准测试套件。git源:<https://github.com/llvm/llvm-test-suite>,由于其包含大量的不同许可的三方代码。获得更多测试的文档:http://llvm.org/docs/TestingGuide.html
llvm/tools
由以上文件构建出来的执行文件,其包含了用户主界面的大部分。你也可以获取一个tool的更多帮助信息,通过命令:tool_name -help。接下来简单介绍几个最重要的工具tool。更多详情参考:http://llvm.org/docs/CommandGuide/index.html
bugpoint
bugpoint用于优化passes和backends,定位passes或者指令的问题,无论是奔溃还是错误编译。更多信息参考:http://llvm.org/docs/HowToSubmitABug.html
llvm-ar
归档器,对LLVM字节码文件进行归档,可选使用索引来快速查找
llvm-as
转换器,从LLVM的IR转换到LLVM字节码
llvm-dis
转换器,从LLVM字节码转换到LLVM的IR
llvm-link
连接器,将多个LLVM模块链接到单个程序
lli
LLVM解释器,用于直接执行LLVM字节码(执行速度比较慢)。在X86,Sparc和PowerPC下,由于支持即时编译,lli的执行效率要高得多。
llc
LLVM后端编译器,将LLVM字节码编译成本机汇编代码。
opt
将LLVM字节码,应用LLVM一些列转换(命令行定义),并输出结果的字节码。使用命令:opt -help来获取在LLVM支持的转换的列表。 此外opt也可以做LLVM字节码的特定分析,将结果打印出来。大多数用于调试分析。
llvm/utils
LLVM源码的实用程序。有些是构建器的一部分,应为它们是代码生成的一部分。
codegen-diff
codegen-diff找出LLC和LLI生成代码的不同之处。如果你在调试其中一个,另一个是正确的程序,这个工具将对你非常有用。使用命令:perldoc codegen-diff, 获取全部的用户参考手册
emacs
LLVM汇编文件和TableGen描述文件的Emacs和XEmacs语法高亮。查看README来获取更多的使用信息
llvmgrep
使用正则表达式查找每个LLVM源文件(在每个文件中执行egrep -H -n re-expression)。这是一个非常高效的基于正则表达式的源文件搜索工具。
TableGen
用于生成寄存器信息,指令集描述,以及其他普通的编译器描述文件
vim
vim高亮语法文件
参考:
http://llvm.org/docs/GettingStarted.html
llvm 源码目录布局
猜你喜欢
转载自blog.csdn.net/Rubison/article/details/90718356
今日推荐
周排行