note/专业积累/工具/LLVM.md
2023-08-25 10:49:58 +08:00

49 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 JITLLVM反汇编器等构建因此使用感极佳。相比于GDB可以更快且更节省内存的加载符号。
## libc++ & libc++ ABI
这两个子项目为提供了C++标准库的标准规范和高性能实现包括对C++11和C++14的完整支持。
## compiler-rt
该子项目提供底层代码生成器的高度校准的实现。该项目同时提供运行时库的实现以及动态测试代码如AddressSanitizerThreadSanitizerMemorySanitizer和DataFlowSanitizer实现。
## MLIR
该子项目是构建一个可重用且可扩展的编译器的基础架构。其目标是解决软件分片,提供针对异构硬件的编译效果,降低构建领域定制编译器的成本以及帮助连接现有的编译器。
## OpenMP
提供在Clang中使用OpenMP时的OpenMP运行时环境。
## polly
实现了一系列cache局部优化以及使用一个polyhedral模型实现了自动化并行化和向量化。
## libclc
该子项目的目标是实现一个OpenCL标准库。
## klee
实现了一个符号化虚拟机该项目采用了一个定理证明器来评估所有的动态路径通过一个试图寻找bug和实现功能证明的程序。klee的主要特性是其发现bug时可提供一个测试用例。
## LLD
该项目为一个新的链接器。可用于替换系统链接器,且链接速度更快。
## 2. LLVM pass实验准备
该项目的核心为"LLVM"包括所有用于处理中间表示和将IR转换为目标文件的工具库和头文件。工具包括汇编器反汇编器二进制分析器二进制优化器。同样包括基本的回归测试。类似C的语言可使用Clang作为前端。该组件可将CC++Objective C和Objective C++编译为LLVM bitcodeLLVM引入的一种中间表示IR且可将bitcode转换为目标文件。