【ちゅうかんひょうげん】

中間表現(IR) とは?

最終更新:
💡 プログラムを整えて変換するための、中間の表現

コンパイラの処理途中でプログラムを表す形式。LLVM IRを例に、最適化やコード生成での役割と、CPUへの依存が残る点を解説します。

📌 このページのポイント
中間表現:解析・変換の途中の形ソースコード中間表現(IR)解析・最適化対象CPU Aのコード対応する生成処理対象CPU Bのコード対応する生成処理IRの仕組みを、変換処理の共通化に使う対象CPUへの依存が残る場合もある
IRを使うコンパイラの役割分担を単純化しています。一つの生成済みIRが無条件にどのCPUにも使えるという意味ではありません。
ひよこ ひよこ
中間表現って、変換途中のメモみたいなもの?
ペンギン先生 ペンギン先生
そのイメージに近いよ。コンパイラがプログラムを解析し、最適化したり別のコードへ変換したりする途中で扱う表現なんだ。人が書く元のコードと、CPUの命令のどちらとも違う形を使えるんだよ。
ひよこ ひよこ
なぜ元のコードだけで処理しないの?
ペンギン先生 ペンギン先生
変換や解析に合う形にすることで、処理を共通化しやすくなるからだよ。LLVMではIRを使う解析や変換と、対象CPUに合わせたコード生成の仕組みを分けて組み合わせるんだ。
ひよこ ひよこ
LLVM IRは、読めるファイルなの?
ペンギン先生 ペンギン先生
人が読めるテキストにもできるよ。公式資料では、コンパイラのメモリ上のIR、保存用のビットコード、読みやすいテキストという三つの形式を説明している。文字のファイルだけがIRではないんだ。
ひよこ ひよこ
同じIRなら、どのCPUでもそのまま使える?
ペンギン先生 ペンギン先生
無条件には使えないよ。コードを出すための対象CPUへの対応が必要だし、LLVM IRにはポインターの大きさやメモリ配置など、対象に関する条件が含まれることもある。IRを使うことと、どこでも動くことは分けて考えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「中間表現」って出てきたら「コンパイラが解析や変換の途中で使う、プログラムの表し方」と思えばだいたいOK!
📖 おまけ:英語の意味
「Intermediate Representation」 = 中間の表現
💬 Intermediateは途中にあること、Representationは表し方です。IRはその頭文字で、単一の決まったファイル形式の名前ではありません。

参考資料

← 用語集にもどる