2023-08-25 10:49:58 +08:00
|
|
|
|
# LLVM 库
|
|
|
|
|
|
|
|
|
|
|
|
## LLVM CORE
|
|
|
|
|
|
|
|
|
|
|
|
该库提供了源代码和目标代码隔离的优化器,同时支持许多CPU的代码生成支持。这些库基于专门定义的代码表示,被称为LLVM中间表示即LLVM IR。该库提供了完整的文档,可以简单的使用该库作为优化器或者代码生成器来,开发自己的编程语言,或者扩展现有语言。
|
|
|
|
|
|
|
|
|
|
|
|
## Clang
|
|
|
|
|
|
|
|
|
|
|
|
LLVM原生的C/C++/Objective-C编译器,设计目标是使实现快速编译、提供极端有用的错误和警告信息以及提供构建源代码级工具的平台。该子项目包括了Clang Static Analyzer和clang-tidy两个用于自动code check的工具,也是使用clang对C/C++代码进行语法分析的最佳示例
|
|
|
|
|
|
|
|
|
|
|
|
## LLDB
|
|
|
|
|
|
|
|
|
|
|
|
LLDB基于 LLVM core和Clang构建,为LLVM项目的原生调试器。使用Clang ASTs和表达式语法分析器,LLVM JIT,LLVM反汇编器等构建,因此使用感极佳。相比于GDB可以更快且更节省内存的加载符号。
|
|
|
|
|
|
|
|
|
|
|
|
## libc++ & libc++ ABI
|
|
|
|
|
|
|
|
|
|
|
|
这两个子项目为提供了C++标准库的标准规范和高性能实现,包括对C++11和C++14的完整支持。
|
|
|
|
|
|
|
|
|
|
|
|
## compiler-rt
|
|
|
|
|
|
|
|
|
|
|
|
该子项目提供底层代码生成器的高度校准的实现。该项目同时提供运行时库的实现以及动态测试代码如AddressSanitizer,ThreadSanitizer,MemorySanitizer和DataFlowSanitizer实现。
|
|
|
|
|
|
|
|
|
|
|
|
## MLIR
|
|
|
|
|
|
|
|
|
|
|
|
该子项目是构建一个可重用且可扩展的编译器的基础架构。其目标是解决软件分片,提供针对异构硬件的编译效果,降低构建领域定制编译器的成本以及帮助连接现有的编译器。
|
|
|
|
|
|
|
|
|
|
|
|
## OpenMP
|
|
|
|
|
|
|
|
|
|
|
|
提供在Clang中使用OpenMP时的OpenMP运行时环境。
|
|
|
|
|
|
|
|
|
|
|
|
## polly
|
|
|
|
|
|
|
|
|
|
|
|
实现了一系列cache局部优化,以及使用一个polyhedral模型实现了自动化并行化和向量化。
|
|
|
|
|
|
|
|
|
|
|
|
## libclc
|
|
|
|
|
|
|
|
|
|
|
|
该子项目的目标是实现一个OpenCL标准库。
|
|
|
|
|
|
|
|
|
|
|
|
## klee
|
|
|
|
|
|
|
|
|
|
|
|
实现了一个符号化虚拟机,该项目采用了一个定理证明器来评估所有的动态路径,通过一个试图寻找bug和实现功能证明的程序。klee的主要特性是其发现bug时可提供一个测试用例。
|
|
|
|
|
|
|
|
|
|
|
|
## LLD
|
|
|
|
|
|
|
|
|
|
|
|
该项目为一个新的链接器。可用于替换系统链接器,且链接速度更快。
|
|
|
|
|
|
|
|
|
|
|
|
## 2. LLVM pass实验准备
|
|
|
|
|
|
|
|
|
|
|
|
该项目的核心为"LLVM",包括所有用于处理中间表示和将IR转换为目标文件的工具,库和头文件。工具包括汇编器,反汇编器,二进制分析器,二进制优化器。同样包括基本的回归测试。类似C的语言可使用Clang作为前端。该组件可将C,C++,Objective C和Objective C++编译为LLVM bitcode(LLVM引入的一种中间表示IR),且可将bitcode转换为目标文件。
|