LLVM
昔はLow-Level Virtual Machineの略
今は何の略でもないらしい
コンパイル時、リンク時、実行時などあらゆる時点でプログラムを最適化するよう設計された、任意のプログラミング言語に対応可能なコンパイラ基盤
コンパイラとツールチェーン技術の集まり
Rust、Swiftが採用例?
SSAベース
code:mermaid
%%{init:{'theme':'neutral'}}%%
flowchart LR
subgraph three-phase3フェーズ
direction LR
frontend"フロントエンド" ---> optimizer"オプティマイザ" ---> backend"バックエンド"
end
source"ソース言語" ---> three-phase ---> machine"機械語"
フロントエンド
いろいろな言語のフロントエンドがある
コンパイラバックエンドは中間表現(IR)をネイティブコード(機械語)に変換する
中間表現はLLVM IR
フロントエンドの例
Clang
rustc
Emscripten
共通オプティマイザ(Common Optimizer)
バックエンド
共通オプティマイザから吐かれた中間表現をネイティブコードに変換する
公式ページ: The LLVM Compiler Infrastructure Project
GitHub: llvm/llvm-project: The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
Getting Started with the LLVM System — LLVM 18.0.0git documentation
LLVMで何か作る
手を動かせばできるLLVMバックエンド チュートリアル
確認用
Q. LLVM
Q. コンパイラバックエンド
Q. フロントエンド
Q. バックエンド
関連
LLDB
MLIR
OpenCL
言語処理系
参考
LLVMとは | DevelopersIO
雑把の仮想マシン(JVM, .NET, BEAM, スクリプト言語, LLVM) | プログラマーズ雑記帳
雑把の仮想マシン - Google スライド
The Architecture of Open Source Applications: LLVM
手を動かせばできるLLVMバックエンド チュートリアル
Introducing MIR | Rust Blog
#C/C++ #IR #仮想マシン(VM) #コンパイラ基盤