LLVM用語集¶
注意
このドキュメントは作成中です!
定義¶
A¶
- ADCE
アグレッシブデッドコード削除
- AST
抽象構文木。
Clangの影響(主に、Cおよび特にC++の場合、解析と意味解析が非常に密接に絡み合っているという事実)により、LLVMコミュニティにおけるASTの一般的な実用的な定義は、おおよそ「入力プログラムのコンパイラの最初の完全なシンボリック(テキストではなく)表現」です。そのため、「AST」は「ツリー」ではなく、より一般的なグラフになる可能性があります(一般的な「連結リストノード」の型に対するシンボリック表現を考えてください)。この実用的な定義は、一部の著者が「注釈付き抽象構文木」と呼ぶものに近いです。
詳細については、お気に入りのコンパイラの本または検索エンジンを参照してください。
B¶
- BBベクトル化
基本ブロックベクトル化
- BDCE
ビット追跡デッドコード削除。一部のビット単位命令(シフト、アンド、オアなど)は、入力ビットの一部を「kill」します。つまり、プログラムの制御またはデータフローに影響を与えることなく、これらのビットをゼロまたは1にすることができます。BDCEパスは、これらのデッドビットのみを計算する命令を削除します。
- BURS
ボトムアップ書き換えシステム — コード生成のための命令選択の方法。例としては、BURGツールがあります。
C¶
- CFI
この略語には2つの意味があります。いずれか:コールフレーム情報。DWARFデバッグ情報およびC++アンワインド情報で使用され、関数のプロローグがスタックフレームをどのようにレイアウトするかを示します。
または:制御フローの整合性。広範囲のマルウェア攻撃がプログラムの実行フロー(制御フロー)をリダイレクトするのを防ぐための一般的なコンピュータセキュリティ技術用語。
- CIE
共通情報エントリ。FDEのサイズを削減するために使用されるCFIの一種。コンパイラは、すべてのFDEに共通の情報を含むCIEを作成します。その後、各FDEはそのCIEを指します。
- CSE
共通部分式削除。共通部分式の計算を削除する最適化。たとえば、
(a+b)*(a+b)
には、同じ部分式が2つあります:(a+b)
。この最適化は、加算を1回だけ実行し、その後乗算を実行します(ただし、計算上正しい/安全な場合に限ります)。
D¶
- DAG
有向非巡回グラフ
- 派生ポインタ
ガベージコレクタが到達可能性分析にポインタを使用できないようなオブジェクトの内部へのポインタ。派生ポインタが有効な間、対応するオブジェクトポインタをルートに保持する必要があります。そうしないと、コレクタは参照されているオブジェクトを解放する可能性があります。コピーコレクタを使用すると、派生ポインタには、セーフポイントで無効になる可能性があるという追加の危険性があります。この用語は、オブジェクトポインタとは対照的に使用されます。
- DSA
データ構造解析
- DSE
デッドストア削除
E¶
- ento
この名前空間には、Clang静的アナライザがあります。これは、昆虫学の略です。
「昆虫学は、昆虫の科学的研究です。」
過去には、この名前空間にはGR(別名グラフ到達可能性)だけでなく、entoSAという名前もありました。
F¶
- FCA
ファーストクラスアグリゲート
- FDE
フレーム記述エントリ。1つの関数のスタックフレームを記述するために使用される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を指します。C++の場合、LSDAには、その関数のcatchステートメントの型と場所に関する情報が含まれています。
- Load-VN
ロード値ナンバリング
- LTO
リンク時最適化
M¶
- MC
マシンコード
N¶
- NFC
「機能的な変更なし」。コミットメッセージで使用され、パッチが純粋なリファクタリング/クリーンアップであることを示します。通常は1行目で使用されるため、実際のコミットメールを開かなくても表示されます。
O¶
- オブジェクトポインタ
ガベージコレクタがオブジェクト内に含まれる参照を追跡できるようなオブジェクトへのポインタ。この用語は、派生ポインタとは対照的に使用されます。
P¶
- PGO
プロファイルガイド最適化
- PR
問題レポート。LLVMバグ追跡システムに提出されたバグ。
- PRE
部分冗長性削除
R¶
RAUW
すべてを置換。関数
User::replaceUsesOfWith()
、Value::replaceAllUsesWith()
、およびConstant::replaceUsesOfWithOnConstant()
は、def/useチェーンを反復処理し、すべてのポインタを新しい値を指すように修正することにより、ある値を別の値に置換することを実装します。def/useチェーンも参照してください。
- 再結合
より良い冗長性削除やその他の最適化を促進するために、結合式を再配置すること。たとえば、
(A+B-A)
を(B+A-A)
に変更すると、(B+0)
、次に(B)
に最適化できます。- RFC
コメントのリクエスト。提案された変更に関するフィードバックを求めるために、プロジェクトメーリングリストに送信されたメール。
- ルート
ガベージコレクションでは、ヒープの外側にあるポインタ変数であり、コレクタが到達可能性分析を開始します。コード生成のコンテキストでは、「ルート」はほとんど常に「スタックルート」を指します。これは、実行中の関数内のローカル変数または一時変数です。
- RPO
逆ポストオーダー
- RTTI
実行時型情報
S¶
- セーフポイント
ガベージコレクションでは、到達可能性分析を進めるためにスタックルートを識別する必要があります。すべての命令に対してこの情報を提供することは実現可能ではない可能性があるため、代わりに、指定されたセーフポイントでのみ情報が計算されます。コピーコレクタを使用すると、派生ポインタはセーフポイントをまたいで保持してはならず、オブジェクトポインタはスタックルートからリロードする必要があります。
- SDISel
選択DAG命令選択。
- SCC
強連結成分
- SCCP
疎な条件付き定数伝播
- SLP
スーパーワードレベル並列処理。基本ブロックのベクトル化と同じです。
- スプラット
スプラットとは、同一のスカラ要素からなるベクトルのことを指します。
この用語は、ハードウェアでこの機能を提供していたPowerPC Altivec命令に基づいています。例えば、「vsplth」や対応するソフトウェア組み込み関数「vec_splat()」などがあります。この動作に対する他のハードウェア名としては、「duplicate」(ARM)や「broadcast」(x86)などがあります。
- SRoA
集約体のスカラ置換
- SSA
静的単一代入
- スタックマップ
ガベージコレクションにおいて、実行中の関数のスタックフレーム内のルートを識別するコードジェネレータが出力するメタデータ。
T¶
- TBAA
型に基づくエイリアス解析
W¶
- WPD
プログラム全体の仮想化解除