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

プログラム全体の仮想化解除