最近LLVMについて調べてみたのでまとめてみる。自分はコンパイラの専門家でも何でもないので間違った内容があるかもしれない。GCCとコンパイラの仕組みLLVMの前にまずはコンパイラ一般の話。コンパイラはまずソースコードを解析して内部表現にする。これはたいていツリー構造となる。このツリー構造のデータに対して文法チェックを行ったり最適化処理を行ったりした後に、オブジェクトファイルを生成する。コンパイラの内部表現だが、実際には複数の種類の内部表現を使っていることが多いらしく、GCCもそのようになっている([1]の図3)。これによるとまずはその言語固有のツリーにするようだ(C trees, C++ treesなど)。これをGENERICという形式にする。GENERICは名前のとおり言語に依存しない一般的な形式で、どの言語の場合も一度GENERICにする。GENERICはその後さらにGIMPLEという