PR:この記事にはアフィリエイトリンクが含まれます。
LLVM本を探し始めると、C++で小さなコンパイラを組む本やClangと最適化パスを扱う本、バックエンドを学ぶ本に出会います。書名は似ていても、学べる範囲はけっこう違うんですよね。
LLVM本の早見表
| 書名 | 中心となる領域 | 主な内容 | 出版情報 |
|---|---|---|---|
Learn LLVM 17 | コンパイラ全体 | C++、IR生成、最適化、Clang tooling、バックエンド | 第2版・2024年・416ページ |
LLVM Techniques, Tips, and Best Practices | Clangとミドルエンド | Clang拡張、Pass Manager、IR操作、PGO、sanitizer | 第1版・2021年・370ページ |
LLVM Code Generation | バックエンド | TableGen、MachineIR、MC、命令選択、レジスタ割り当て | 第1版・2025年・620ページ |
3冊ともLLVMがテーマですが、学びの着地点はそれぞれ異なります。コンパイラの流れを一通り実装する本、Clangや中間層の開発を扱う本、機械語生成を学ぶ本です。この違いを押さえておくと、書名から内容を想像しやすくなります。
どれも出版社ページにPaperback版の販売表示があります。紙版の価格は販売店や時期で変わるため、購入時に表示される金額を目安にしてください。ページ数や対象範囲も、読み切る時間を見積もる手掛かりになります。
LLVMが担う役割
LLVMは、言語処理やコード生成の部品を組み合わせる基盤です。ClangはCやC++などのソースを解析し、LLVMの中間表現へつなぎます。役割分担がわかると、各書で扱う技術の位置づけも見えやすくなります。
コンパイラの工程はフロントエンド、ミドルエンド、バックエンドの三つに分けられます。ソースを解析し、IRを変換し、最後にCPU向け命令へ落とす流れです。LLVM本は、このうちどこに重心を置くかで特色が変わります。
C++の関数を機械語にするなら、まず文法や型を読み取ります。その後IRに置き換え、対象CPUの命令へ変換します。工程の役割を知っていれば、コンパイルエラーが起きた場所も追いやすくなりますよ。
LLVMを学ぶと、特定の言語やCPUを越えて通用する設計の考え方にも触れられます。複数の言語やターゲットを共通の中間表現と変換処理でつなぐ仕組み。ここがLLVMのおもしろいところですね。
LLVM IRの見どころ
LLVM IRは、ソースコードと機械語の間にある表現です。人が読めるテキスト形式のほか、ビットコード形式でも扱われます。高水準言語に比べると低レベルですが、CPU固有の命令に縛られすぎない形です。
IRを読む鍵のひとつはSSA形式。値は一度だけ定義され、必要な場所で参照されます。初見では少し独特ですが、値がどこで生まれ、どこへ渡るのかを追いやすくする仕組みなんです。
たとえば整数にゼロを足す処理は、結果を変えずに簡単な式へ整理できます。最適化パスの前後でIRを見比べると、どの処理がどんな規則で整理されたのかも見えてきます。
IRの形やAPIはLLVMの版によって変わることがあります。基本の考え方を学びつつ、手元のLLVMでサンプルを動かして確かめるのが大切です。古いコード例をそのまま貼ると、ビルドが通らないこともあります。
Learn LLVM 17
『Learn LLVM 17: A beginner’s guide to learning LLVM compiler tools and core libraries with C++』は、Kai Nacke氏とAmy Kwan氏による第2版です。2024年刊の416ページで、LLVM 17を対象にしています。
本書では、実際の言語の一部を題材に小さなコンパイラを組み立てます。C++でフロントエンドからIRを生成し、最適化から機械語生成までを追う構成です。LLVMの各部品がどうつながるか、実装を通して確かめられます。
コンパイラの構成やIR生成を扱い、最適化パイプラインと変換パスも解説します。Clang toolingとバックエンドにも触れるため、扱う範囲は広めです。全体の流れを経験したい人におすすめです。
中級程度のC++経験を想定していて、基本文法から解説する本ではありません。クラスや関数を読めてLLVMの実装に取り組みたい初心者には、全体像を学ぶ入口になります。
Clang実務を掘る
『LLVM Techniques, Tips, and Best Practices: Clang and Middle-End Libraries』は、Min-Yih Hsu氏による2021年刊の第1版です。370ページで、C++14対応コンパイラを前提としています。
Clangの拡張やツールチェーン設定、新PassManagerを使うパス、IRの確認と変更を扱います。PGOやカスタムsanitizerにも触れ、Clangとミドルエンドの開発実務に重点を置いています。
本書は対象LLVM版をひとつに固定していませんが、本文例にはrelease 10.xへの言及があります。環境によってAPIやビルド手順が一致しない箇所もありえます。考え方を学びながら、コードを手元の版に合わせて確かめるとよいでしょう。
Clangや最適化パスを使った開発ツールを作りたい人には、この本がおすすめです。IRの確認にとどまらず、変換処理を書く話題も扱っています。C++でLLVMの実務を学びたい人にも読みどころのある一冊です。
コード生成の奥へ
『LLVM Code Generation: A deep dive into compiler backend development』は、Quentin Colombet氏による2025年刊の第1版です。全620ページで、LLVM IRからアセンブリやオブジェクトコードへ進む工程を詳しく扱います。
最適化パスやPass Managerを扱い、TableGenやMachineIR、MCも取り上げます。バックエンドの仕組みを中心に、命令選択とレジスタ割り当てもLLVM APIのコード例で解説します。
toy backendを段階的に作る内容もあります。バックエンドの部品がどう組み合わさるかを実装しながら学べるのは魅力です。命令選択やレジスタ割り当てを深く学びたい人におすすめです。
複数のLLVM版で安定する考え方を中心に据えた構成です。対象読者はLLVM初心者から経験者まで。620ページを読み通すには時間が必要でしょう。コード生成を腰を据えて学びたい人におすすめです。
Clang拡張の現場
Clang toolingは、C++のソースを解析し、プロジェクト独自の検査や書き換えを行うための仕組みです。エディタ機能やコード移行ツールにもつながり、コンパイラ技術を開発者向けの道具にできます。
Clangの構文理解を利用すると、単純な文字検索では見分けにくいコードの構造も扱えます。独自ルールで検査したり、古いAPIの利用箇所を見つけたりして、チームのコード品質を支えます。
Clang拡張やツールチェーンを学びたい人には、『LLVM Techniques, Tips, and Best Practices』がおすすめです。『LLVM Code Generation』にもClangは登場しますが、中心テーマはコード生成です。扱う領域を押さえると、各書の主題をつかみやすくなりますね。
結論
コンパイラの流れを実装しながら学びたい人には、『Learn LLVM 17』がおすすめです。 C++でIR生成から最適化、コード生成へ進み、LLVMの部品同士の関係をつかめます。
Clangの拡張や最適化パスの実務に関心があるなら『LLVM Techniques, Tips, and Best Practices』。命令選択やレジスタ割り当てを深く知りたい人には『LLVM Code Generation』が有力です。
自分がLLVMで作りたいものを考えると、学びの軸が定まります。全体像、開発ツール、バックエンドのどこに時間をかけるかが見えれば、学んだ内容を次の実装へつなげやすくなります。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。




