MLIRについてもう少し具体的な例を勉強するために、資料を読み込んでいくことにした。前回の続き。
以下の資料を参考にした。Chris Lattnerの所属がSiFiveに変わっているので、比較的最近の資料だ。
MLIRとLLVM IR
MLIRをLLVM IRの代替として使う方法
MLIRにはLLVM IRを組み込むことができ、既存のLLVM IRパスを移動して再実装することができる。ただし、これには非常に膨大な作業が必要となってしまう。
LLVM IRをMLIRに移行することで、より優れたデータ構造に移行することができる。MLIR実装チームはLLVMでの多くの実装経験がある。
最大の機能は、マルチスレッドコンパイルが可能になった。MLIRは最初からこれをサポートするように設計されている。MLIR PassManagerには優れた機能が搭載されており、インスタンス固有のパスオプションと、Statistics、パイプラインクラッシュの再現の生成などが含まれている。
LLVM IRのPHIノードについて取り上げる。PHIノードをスキャンした場合、ブロックの先頭などに命令を挿入する必要がある。PHIノードのエントリは順序図消されていないため、ルックアップテーブルを利用してオペランドリストをスキャンする必要があり、これに時間がかかる。
さらに、MLIRのデバッグ情報はLLVM IRのデバッグ情報よりも優れている。
LLVMのループ最適化を再実装するよりも、MLIRを使用することで効率的に実装できる。