MLIR

Multi-Level IR コンパイラフレームワーク

非推奨・リファクタ中の機能

このページでは、MLIR における近日削除予定の API および機能、 そして大きなリファクタ及びマイグレーションを掲載しています。 ここでリストアップすることにより、ダウンストリームのユーザーが MLIR の開発状況についていけるようにしています。

非推奨の機能

matchAndRewritematch / rewrite の代わりに使用してください

RewritePatternConversionPatternmatch 及び rewrite 関数は非推奨になりました。 統合された matchAndRewrite を使用してください。

vector.broadcastvector.splat の代わりに使用してください

vector.splat op は非推奨になりました。

Discourse 上での議論

OpTy::create(builder, loc, ...)builder.create<OpTy>(loc, ...) の代わりに使用してください

OpBuilder::create API は、op ごとに生成される OpTy::create メソッドの登場により非推奨になりました。

Discourse 上での議論

実行中のリファクタリング・大きな変更

過去の非推奨・リファクタ

LLVM 17

「約束されたインターフェース」と FuncDialect 使用時に InlinerExtension を明示的に登録する必要性

インターフェースをシステム外部から注入する際の契約条件の強化を、 DialectInterface を皮切りに開始しています。 現在特に注目すべき変更点としては、 FuncDialect を用いたインライナーを使用している場合は、 MLIRContext のセットアップ時に func::registerAllExtensions(registry); を呼ぶ必要があります。

プロパティとそれに伴う汎用プリント形式の変更

Discourse をご覧ください。

プロパティは、op 固有の属性と消しても良い属性を区別できるようにするための MLIR の新機能です。主な目に見える変更としては、汎用アセンブリ形式において <> で囲まれた新しい属性エントリが追加される点があります。

preloadDialectInContext は1年以上の非推奨期間の後削除されました

https://github.com/llvm/llvm-project/commit/9c8db444bc85 をご覧ください。

もし使用されている mlir-opt ツールが preloadDialectInContext に依存している場合、 パイプラインを見直す必要があります。 このオプションを mlir-opt で利用した場合、パイプラインの問題が隠され、 getDependentDialects() 不足の警告が表示されない場合があります。 Discourse 上での議論

mlir-opt 様ツールが MlirOptMainConfig を使うようマイグレーション

https://github.com/llvm/llvm-project/commit/ffd6f6b91a3 をご覧ください。

お使いの mlir-opt 様のツールが MlirOptMain(int argc, char **argv, ...) エントリポイントを使用している場合、影響はありません。 その他の場合、 Discourse 上での議論 をご覧ください。

GPU コンパイル設定属性の登場による gpu-to-(cubin|hsaco) の非推奨化

GPU コンパイル設定属性 は、 GPU モジュールをバイナリやその他形式にコンパイルする際の設定を拡張性のある形で制御するための全く新しいメカニズムです。 この仕組みにより、従来の GPU シリアライゼーションパスが抱えていた多くの制約が解消されます。 例えば、CUDA ドライバが存在する場合にのみ利用可能であったり、LibDevice にリンクしないといった制約です。

重要な変更点としては、PTX をバイナリにコンパイルする際に pxtas あるいは nvptxcompiler ライブラリを用いることで、 そのためバイナリの生成には CUDAToolkit が必要です。

この属性が正しく動作するためには、 registerNVVMTargetInterfaceExternalModelsregisterROCDLTargetInterfaceExternalModels、 そして registerOffloadingLLVMTranslationInterfaceExternalModels といった登録関数の呼び出しが必要です。

gpu-to-(cubin|hsaco) パスは将来のリリースで削除されます。

LLVM 18

LLVM 方言における不透明ポインタの使用について

LLVM 17 で公式に型付きポインタのサポートが終了され、MLIR の LLVM 方言でもこのサポートを切っている最中です。 これは 2023 年の 2 月 ( PSA) に告知され、現在最終ステップであるところの型付きポインタの削除が開始されました ( PSA)。 型付きポインタを用いた LLVM 方言をターゲットにしている場合、 不透明ポインタをサポートするようなアップデートが必要です。

LLVM 19

GPU コンパイル設定属性の登場による gpu-to-(cubin|hsaco) の削除

お知らせ: gpu-to-(cubin|hsaco) パスはモノレポから削除されたため、ターゲット属性を代わりに使用してください。詳しくはこのページの LLVM 17 セクションをご覧ください。

LLVM 20

vector.reshape の削除

この op は 2019 年に追加されて以来、MLIR や MLIR を利用したプロジェクトで変換元 op となったり、 あるいは使用されたことはありませんでした。 使用例が無いことにより、この op の削除が決定しました。

Discourse 上での議論

LLVM 21

dyn_cast/cast/isa/… はフリー関数版を使用してください

属性や型をキャストする際には、例えば dyn_cast<T>(x)isa<T>(x) などのようなフリー関数版を使用してください。 x.dyn_cast<T>() のようなキャストメソッドは、 https://github.com/llvm/llvm-project/pull/135556 で削除されるため新しいコードでは使用しないでください。

Discourse 上での議論