llvm 源码目录布局

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

发布了8 篇原创文章 · 获赞 1 · 访问量 443

猜你喜欢

转载自blog.csdn.net/Rubison/article/details/90718356