Skip to the content.

LLVMのディレクトリ構成

導入

前回書いた今後やるべきことリストを確認する。

  • LLVM内部での処理の流れを追う
  • LLVMのデータ構造を知る
  • LLVMのファイル構成を知る
  • LLVM IRを知る

LLVM IRについては(本当に簡単にではあるが)学んだので、今回はファイル構造を知る。 どこのファイルにどんなものが入っているかを理解する。

これもドキュメントに書いてあるみたいだけどね。

llvm-project

GitHubから落としてきた場合は、LLVMプロジェクトの各プロジェクト用のディレクトリがいろいろ入っている。
以下ではドキュメントに沿ってllvmの中身を説明していく。(他のプロジェクトも似たような構成にはなっている)

llvm

cmake

モジュール単位でのcmake用のファイルが置かれている

examples

LLVMの動作を理解するためのサンプルコードがある。

include

言わずもがなヘッダーファイルが入っている。量が多すぎる。
あとllvmllvm-cというのがあるが、基本的にはllvmの方だけ見ればいいらしい。

Doxygenとかも有効活用した方がいいかも。

lib

ソースコード(C++)が入っている。紛らわしいからsrcとかにしてほしい

いくつか重要そうなものをピックアップ

  • IR: InstructionBasicBlockといったクラスはここで扱う
  • Analysis: 解析をする
  • Transform: 最適化(コード変形)をする
  • CodeGen: LLVM IRから実際のコードを生成する(命令の選択、スケジューリング、レジスタ割当てなど)

test

LLVMの機能テスト用のディレクトリ
テストデータはLLVM IR

tools

便利なツール群のソースコード
GNU Binutilsみたいな感じ

まとめ

libの中にC++ソースコードが、includeの中にヘッダーファイルが入っている。
量が多いので適宜Doxygenを参照した方がよさそう。