ユーザーガイド¶
注記: LLVMベースのコンパイラの使用のみに関心のあるユーザーは、代わりにClangを検討してください。このドキュメントは、中間LLVM表現を扱う必要があるユーザーを対象としています。
Clang¶
- ARMでのビルド方法
ARMでのLLVM/Clangのビルドとテストに関する注意事項。
- プロファイルに基づく最適化を使用したClangとLLVMのビルド方法
PGOを使用したLLVM/Clangのビルドに関する注意事項。
- Clang/LLVMを使用してClang/LLVMをクロスコンパイルする方法
LLVM/Clangのクロスビルドとテストに関する注意事項。
- C、C++、ObjC、およびObjC++フロントエンドのビルド方法
ソースからclangフロントエンドをビルドするための手順。
- LLVMコードカバレッジマッピングフォーマット
これは、LLVMのコードカバレッジマッピングに使用されるフォーマットとエンコーディングについて説明します。
- 制御フロー検証ツールの設計ドキュメント
制御フローの整合性を検証するためのツールの説明。
LLVMのビルドと配布¶
- LLVMディストリビューションの構築
LLVMのCMakeビルドシステムを使用してLLVMベースのツールをパッケージ化および配布するためのベストプラクティスガイド。
- CMakeを使用したLLVMのビルド
CMakeビルドシステムを使用するユーザー向けの、メインの入門ガイドへの追加事項。
- LLVMをビルドするためのDockerfileのガイド
LLVMで提供されるDockerfileを使用するためのリファレンス。
- サポートライブラリ
このドキュメントでは、LLVMサポートライブラリ(
lib/Support
)とLLVMソースコードの移植性を維持する方法について説明します。- 高度なビルド構成
このドキュメントでは、より高度なビルド構成について説明します。
最適化¶
- LLVMパスの作成
新しいパス マネージャーでLLVM変換を作成する方法に関する情報。
- LLVMパスの作成 (従来のPMバージョン)
従来のパス マネージャーでLLVM変換と分析を作成する方法に関する情報。
- LLVMの分析と変換パス
LLVMに実装されている最適化と分析のリスト。
- スタック安全分析
このドキュメントでは、ローカル変数のスタック安全分析の設計について説明します。
- MergeFunctionsパス、その仕組み
関数のマージ最適化について説明します。
- LLVMエイリアス分析インフラストラクチャ
新しいエイリアス分析実装を作成する方法、または既存の分析を使用する方法に関する情報。
- MemorySSA
LLVMのMemorySSAユーティリティと、その使用方法に関する情報。
- LLVMループの用語(および標準形)
LLVMで使用されるループと関連用語について説明したドキュメント。
- LLVMサイクルの用語
サイクルをループの一般化として説明したドキュメント。
- LLVMの自動ベクトル化
このドキュメントでは、LLVMにおけるベクトル化の現状について説明します。
- LLVMリンク時最適化:設計と実装
このドキュメントでは、LLVMモジュール間オプティマイザとリンカ間のインターフェースとその設計について説明します。
- LLVM goldプラグイン
Linuxでリンク時最適化を使用してプログラムをビルドする方法。
- 備考
LLVMでの備考の実装に関するリファレンス。
- LLVMを使用したソースレベルデバッグ
このドキュメントでは、LLVMソースレベルデバッガの設計と哲学について説明します。
- デバッグ情報の更新方法
このドキュメントでは、さまざまな種類のコード変換でデバッグ情報を正しく更新する方法について説明します。
- デバッグ情報のための命令参照
このドキュメントでは、LLVMが値の追跡、つまり命令参照を使用して、コンパイルの最終段階でデバッグ情報の変数の場所を決定する方法について説明します。
- デバッグ情報の移行:組み込み関数からレコードへ
これは、dbg.valueなどの組み込み関数を使用したデバッグ情報から、非命令DbgRecordオブジェクトの使用に移行する方法を説明した移行ガイドです。
- インストゥルメンテーションプロファイルフォーマット
このドキュメントでは、インストゥルメンテーションベースのプロファイルの2つのバイナリ形式について説明します。
- InstCombineコントリビューターガイド
このドキュメントでは、InstCombineおよび関連パスへの貢献に関するガイドラインを規定しています。
コード生成¶
- LLVMバックエンドの作成
マシンターゲット向けにLLVMバックエンドを作成する方法に関する情報。
- LLVMターゲット非依存コードジェネレータ
LLVMコードジェネレータの設計と実装。LLVMを新しいアーキテクチャにリターゲットしたり、新しいcodegenパスを設計したり、既存のコンポーネントを強化したりする場合に役立ちます。
- TableGen
LLVMコードジェネレータで多用されるTableGenツールについて説明します。
GlobalISel¶
- MIRパターン
MIRパターンの設計と使用方法について説明します。
JIT¶
- MCJITの設計と実装
MCJIT実行エンジンの内部動作について説明します。
- ORCの設計と実装
ORC APIの設計と実装について説明します。いくつかの使用例と、ORCv1からORCv2に移行するユーザー向けのガイドが含まれています。
- JITLinkとORCのObjectLinkingLayer
JITLinkライブラリ、ORCの新しいJITリンカの設計とAPIについて説明します。
- JITedコードのデバッグ
GDBを使用してJITedコードをデバッグする方法。
GDBを使用してJITedコードをデバッグする方法。
追加トピック¶
- CommandLine 2.0ライブラリマニュアル
コマンドライン解析ライブラリの使用方法に関する情報を提供します。
- LLVMの拡張:命令、組み込み関数、型の追加など
LLVMに命令と組み込み関数を追加する方法については、こちらをご覧ください。
- 制約付き浮動小数点組み込み関数の追加方法
LLVMに新しい制約付き数学組み込み関数を追加する際に必要な手順を示します。
- Windows Itaniumアプリケーションのビルド方法。
Windows Itanium環境の構築に関する注意事項。
- Arm用Compiler-rt組み込み関数をクロスコンパイルする方法
Arm用compiler-rt組み込み関数のクロスビルドとテストに関する注意事項。
- ビッグエンディアンモードでのARM NEON命令の使用
ビッグエンディアンARMターゲットでNEON命令を生成するためのLLVMのサポートはやや直観的ではありません。このドキュメントでは、実装と理論的根拠について説明します。
- LLVMにおけるAArch64スケーラブル行列拡張のサポート
AArch64 SME ACLEとABIのLLVMサポート
- clangを使ったCUDAのコンパイル
CUDAのLLVMサポート
- NVPTXバックエンドのユーザーガイド
このドキュメントでは、NVPTXバックエンドを使用してGPUカーネルをコンパイルする方法について説明します。
- AMDGPUバックエンドのユーザーガイド
このドキュメントでは、AMDGPUバックエンドを使用してGPUカーネルをコンパイルする方法について説明します。
- ヘテロジニアスデバッグのためのDWARF拡張
このドキュメントでは、AMDGPUバックエンドなどのターゲットのヘテロジニアスデバッグをサポートするためのDWARF拡張について説明します。
- DWARF式スタックでの場所記述の許可
このドキュメントでは、DWARF式スタックでの場所記述を許可するためのDWARF拡張について説明します。ヘテロジニアスデバッグのためのDWARF拡張の一部です。
- SPIR-Vターゲットのユーザーガイド
このドキュメントでは、SPIR-Vターゲットを使用してGPUカーネルをコンパイルする方法について説明します。
- DirectXターゲットのユーザーガイド
このドキュメントでは、DirectXターゲットを使用してDirectXランタイム用のGPUコードをコンパイルする方法について説明します。
- RISC-Vターゲットのユーザーガイド
このドキュメントでは、RISC-Vターゲットの使用方法について説明します。
- RISC-Vベクトル拡張
このドキュメントでは、RISC-Vベクトル拡張をLLVM IRでどのように表現できるか、およびバックエンドでどのようにコードが生成されるかについて説明します。
- サンドボックスIR
このドキュメントでは、LLVM IR上のトランザクションレイヤーであるサンドボックスIRの設計と使用方法について説明します。