LLVM 词汇表¶
注意
此文档尚在编写中!
定义¶
A¶
- ADCE
积极的死代码消除
- AST
抽象语法树。
由于 Clang 的影响(主要是 C 和特别是 C++ 的解析和语义分析紧密结合),LLVM 社区中 AST 的典型工作定义大致为“编译器对输入程序的第一个完整的符号(而不是文本)表示”。因此,“AST”可能是一个更通用的图,而不是“树”(考虑典型“链表节点”类型的符号表示)。此工作定义更接近某些作者所说的“带注释的抽象语法树”。
请查阅您喜欢的编译器书籍或搜索引擎以获取更多详细信息。
B¶
- BB 矢量化
基本块矢量化
- BDCE
基于位的死代码消除。某些按位指令(移位、与、或等)会“杀死”某些输入位——也就是说,它们使得这些位可以为零或一,而不会影响程序的控制流或数据流。BDCE 过程会移除仅计算这些死位的指令。
- BURS
自底向上重写系统——一种用于代码生成的指令选择方法。例如 BURG 工具。
C¶
- CFI
此缩写有两个含义。或者:调用帧信息。用于 DWARF 调试信息和 C++ 解卷绕信息中,以显示函数序言如何布局堆栈帧。
或者:控制流完整性。用于防止各种恶意软件攻击重定向程序执行流(控制流)的计算机安全技术的总称。
- CIE
通用信息条目。一种用于减小 FDE 大小的 CFI。编译器会创建一个包含所有 FDE 共有信息的 CIE。然后每个 FDE 都指向其 CIE。
- CSE
公共子表达式消除。一种消除公共子表达式计算的优化。例如
(a+b)*(a+b)
有两个相同的子表达式:(a+b)
。此优化将仅执行一次加法,然后执行乘法(但前提是计算上是正确/安全的)。
D¶
- DAG
有向无环图
E¶
- ento
此命名空间包含Clang 静态分析器。它是昆虫学的缩写。
“昆虫学是对昆虫进行科学研究。”
过去,此命名空间不仅包含名称GR(即图可达性),还包含entoSA。
F¶
- FCA
一等聚合体
- FDE
帧描述条目。一种用于描述一个函数的堆栈帧的 CFI。
G¶
- GC
垃圾回收。使用可达性分析而不是显式内存管理来回收未使用的内存的做法。
- GEP
GetElementPtr
。一种 LLVM IR 指令,用于获取聚合数据结构的子元素的地址。在此处详细介绍了它。- GVN
全局值编号。GVN 是一种将函数计算的值划分为同余类的过程。落在同一同余类中的值保证在程序的每次执行中都相同。在这方面,同余是编译时对运行时值等价性的近似。
H¶
- 堆
在垃圾回收中,使用可达性分析管理的内存区域。
I¶
- ICE
内部编译器错误。此缩写用于描述 LLVM 或 Clang 在编译源代码时发生的错误。例如,如果有效的 C++ 源程序在编译时触发 Clang 中的断言,则可以将其称为“ICE”。
- ICF
相同代码折叠
- ICP
间接调用提升
- IPA
过程间分析。指在过程、函数或编译单元(模块)之间发生的各种代码分析。
- IPO
过程间优化。指在过程、函数或编译单元(模块)之间发生的各种代码优化。
- ISel
指令选择
L¶
- LCSSA
循环封闭静态单赋值形式
- LGTM
“看起来不错”。在审查线程中,这表示审阅者认为该补丁可以提交。
- LICM
循环不变代码移动
- LSDA
特定于语言的数据区域。C++“零成本”解卷绕构建在通用解卷绕机制之上。当解卷绕器遍历每个帧时,它会调用“个性”函数来执行特定于语言的分析。每个函数的 FDE 都指向一个可选的 LSDA,该 LSDA 会传递给个性函数。对于 C++,LSDA 包含有关该函数中捕获语句的类型和位置的信息。
- Load-VN
加载值编号
- LTO
链接时优化
M¶
- MC
机器代码
N¶
- NFC
“无功能更改”。在提交消息中使用,表示补丁是纯重构/清理。通常用于第一行,以便在不打开实际提交电子邮件的情况下可见。
O¶
- 对象指针
指向对象的指针,垃圾回收器能够跟踪对象中包含的引用。此术语与派生指针相对。
P¶
- PGO
配置文件引导优化
- PR
问题报告。在LLVM Bug Tracking System上提交的 Bug。
- PRE
部分冗余消除
R¶
RAUW
用所有用法替换。函数
User::replaceUsesOfWith()
、Value::replaceAllUsesWith()
和Constant::replaceUsesOfWithOnConstant()
通过遍历其 def/use 链并修复所有指针以指向新值来实现用一个 Value 替换另一个 Value。另请参见def/use 链。
- 重结合
重新排列关联表达式以促进更好的冗余消除和其他优化。例如,将
(A+B-A)
更改为(B+A-A)
,允许将其优化为(B+0)
,然后(B)
。- RFC
征求意见。发送到项目邮件列表的电子邮件,以征求对拟议更改的反馈。
- 根
在垃圾回收中,位于堆外部的指针变量,收集器从该变量开始其可达性分析。在代码生成上下文中,“根”几乎总是指“堆栈根”——正在执行的函数中的局部变量或临时变量。
- RPO
逆后序遍历
- RTTI
运行时类型信息
S¶
- 安全点
在垃圾回收中,有必要识别堆栈根,以便可达性分析可以继续进行。为每个指令提供此信息可能不可行,因此,信息仅在指定的安全点计算。对于复制收集器,派生指针不得跨安全点保留,并且必须从堆栈根重新加载对象指针。
- SDISel
选择 DAG 指令选择。
- SCC
强连通分量
- SCCP
稀疏条件常量传播
- SLP
超字级并行,与基本块矢量化相同。
- Splat
Splat 指的是具有相同标量元素的向量。
该术语基于 PowerPC Altivec 指令,这些指令在硬件中提供了此功能。例如,“vsplth”和相应的软件内联函数“vec_splat()”。此操作的其他硬件名称示例包括“复制”(ARM)和“广播”(x86)。
- SRoA
聚合的标量替换
- SSA
静态单赋值
- 堆栈映射
在垃圾回收中,由代码生成器发出的元数据,用于识别正在执行的函数的堆栈帧中的根。
T¶
- TBAA
基于类型的别名分析
W¶
- WPD
全程序去虚拟化