FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

MLIRについての勉強 (チュートリアルをベースとした自作言語作成2)

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のリファレンスマニュアルを見てもよくわからない。