MLIRはMulti Level Intermediate Representationの略で、LLVM IRよりも更にメタ化したような中間言語だ。LLVM IRでは吸収しきれないような各言語で定義される中間表現を、許容するために開発された。
これを使ってみたいので、まずはToyに似たような言語を使って自分でMLIRを生成できるようになりたい。いくつか試行をしている。
MLIRのブロックを作らなければならないのだけれども、これがどうにもうまく行かない。ビルド時にエラーで落ちてしまう。 (手元にx86マシンが無くて試すことができていない)
Undefined symbols for architecture arm64: "mlir::mysv::ConstantOp::verifyInvariantsImpl()", referenced from: mlir::OpTrait::OpInvariants<mlir::mysv::ConstantOp>::verifyTrait(mlir::Operation*) in Dialect.cpp.o "mlir::mysv::ConstantOp::build(mlir::OpBuilder&, mlir::OperationState&, mlir::Type, long long)", referenced from: mlir::mysv::ConstantOp mlir::OpBuilder::create<mlir::mysv::ConstantOp, mlir::Type&, unsigned long long>(mlir::Location, mlir::Type&, unsigned long long&&) in MLIRGen.cpp.o "mlir::mysv::MYSVDialect::materializeConstant(mlir::OpBuilder&, mlir::Attribute, mlir::Type, mlir::Location)", referenced from: vtable for mlir::mysv::MYSVDialect in Dialect.cpp.o "mlir::detail::TypeIDResolver<mlir::mysv::ConstantOp, void>::id", referenced from: mlir::detail::TypeIDResolver<mlir::mysv::ConstantOp, void>::resolveTypeID() in MLIRGen.cpp.o mlir::detail::TypeIDResolver<mlir::mysv::ConstantOp, void>::resolveTypeID() in Dialect.cpp.o ld: symbol(s) not found for architecture arm64
うーん、MLIRのリファレンスマニュアルを見てもよくわからない。