LLVM 詞彙表¶
備註
本文件仍在編寫中!
定義¶
A¶
- ADCE
積極的死碼消除(Aggressive Dead Code Elimination)
- AST
抽象語法樹(Abstract Syntax Tree)。
由於 Clang 的影響(主要是因為對於 C 語言,尤其是 C++ 語言,解析和語義分析是如此緊密地交織在一起),LLVM 社群中對 AST 的典型工作定義大致是「編譯器對輸入程式的第一個完整符號(相對於文字)表示」。因此,「AST」可能是一個更通用的圖,而不是「樹」(考慮典型「鏈接列表節點」類型的符號表示)。這個工作定義更接近於一些作者所說的「帶註釋的抽象語法樹」。
有關更多詳細資訊,請參閱您最喜歡的編譯器書籍或搜尋引擎。
B¶
- BB 向量化
基本塊向量化(Basic-Block Vectorization)
- BDCE
位元追蹤死碼消除(Bit-tracking dead code elimination)。一些位元操作指令(移位、與、或等)會「殺死」它們的一些輸入位元,也就是說,它們會使這些位元變成零或一,而不會影響程式的控制或資料流程。BDCE 階段會移除僅計算這些無效位元的指令。
- BURS
由下而上的重寫系統(Bottom Up Rewriting System)—— 一種用於程式碼生成的指令選擇方法。一個例子是 BURG 工具。
C¶
- CFI
這個縮寫有兩個含義。一種是:呼叫框架資訊(Call Frame Information)。用於 DWARF 除錯資訊和 C++ 回溯資訊中,以顯示函數序言如何佈局堆疊框架。
另一種是:控制流程完整性(Control Flow Integrity)。計算機安全技術的總稱,用於防止各種惡意軟件攻擊重定向程式執行流程(控制流程)。
- CIE
通用資訊條目(Common Information Entry)。一種用於減少 FDE 大小的 CFI。編譯器會創建一個 CIE,其中包含所有 FDE 的通用資訊。然後,每個 FDE 都會指向其 CIE。
- CSE
公共子表達式消除(Common Subexpression Elimination)。一種移除公共子表達式計算的優化。例如,
(a+b)*(a+b)
有兩個相同的子表達式:(a+b)
。這種優化只會執行一次加法運算,然後執行乘法運算(但前提是計算結果正確/安全)。
D¶
- DAG
有向無環圖(Directed Acyclic Graph)
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 包含有關該函數中 catch 語句的類型和位置的信息。
- Load-VN
加載值編號
- LTO
鏈接時優化
M¶
- MC
機器碼
N¶
- NFC
「無功能變更」。用於提交訊息中,表示修補程序是純粹的重構/清理。通常用於第一行,因此無需打開實際的提交電子郵件即可看到。
O¶
- 對象指針
指向對象的指針,以便垃圾回收器能夠跟踪對象中包含的引用。這個術語與 派生指針 相對。
P¶
- PGO
設定檔引導最佳化 (Profile-Guided Optimization)
- PR
問題報告。在 LLVM 臭蟲追蹤系統 上提交的錯誤。
- PRE
部分冗餘消除 (Partial Redundancy Elimination)
R¶
RAUW
以新值取代所有使用 (Replace All Uses With)。函數
User::replaceUsesOfWith()
、Value::replaceAllUsesWith()
和Constant::replaceUsesOfWithOnConstant()
透過迭代其定義/使用鏈並修正所有指向新值的指標來實現以一個值替換另一個值。另請參閱 定義/使用鏈。
- 重新關聯 (Reassociation)
重新排列關聯式以促進更好的冗餘消除和其他優化。例如,將
(A+B-A)
改為(B+A-A)
,允許將其優化為(B+0)
,然後是(B)
。- RFC
意見徵求 (Request for Comment)。發送到專案郵件清單的電子郵件,旨在徵求對擬議變更的反饋。
- 根 (Root)
在垃圾回收中,一個指向堆積 (heap) 之外的指標變數,回收器從中開始其可達性分析。在程式碼生成的上下文中,「根」幾乎總是表示「堆疊根」——執行函數中的局部變數或暫存變數。
- RPO
反向後序 (Reverse postorder)
- RTTI
執行時期型別資訊 (Run-time Type Information)
S¶
- 安全點 (Safe Point)
在垃圾回收中,需要識別堆疊根,以便進行可達性分析。為每條指令提供此資訊可能不可行,因此僅在指定的安全點計算資訊。使用複製回收器時,衍生指標不能跨安全點保留,並且必須從堆疊根重新載入物件指標。
- SDISel
選擇 DAG 指令選擇 (Selection DAG Instruction Selection)。
- SCC
強連通元件 (Strongly Connected Component)
- SCCP
稀疏條件常數傳播 (Sparse Conditional Constant Propagation)
- SLP
超字級平行化 (Superword-Level Parallelism),與 基本區塊向量化 相同。
- Splat
Splat 指的是由相同純量元素組成的向量。
該術語基於 PowerPC Altivec 指令,這些指令在硬體中提供了此功能。例如,「vsplth」和相應的軟體內建函數「vec_splat()」。此動作的其他硬體名稱範例包括「複製」(ARM) 和「廣播」(x86)。
- SRoA
聚合的純量替換 (Scalar Replacement of Aggregates)
- SSA
靜態單一賦值 (Static Single Assignment)
- 堆疊映射 (Stack Map)
在垃圾回收中,由程式碼產生器發出的中繼資料,用於識別執行函數的堆疊框架內的根。
T¶
- TBAA
基於類型的別名分析 (Type-Based Alias Analysis)
W¶
- WPD
全程式去虛擬化 (Whole Program Devirtualization)