[all-commits] [llvm/llvm-project] edae8f: [mlir] Make `classof` substitution in interface us...

Markus Böck via All-commits all-commits at lists.llvm.org
Thu Sep 7 00:47:11 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: edae8f6ce29a980d83761f59f81b88167a0fd815
      https://github.com/llvm/llvm-project/commit/edae8f6ce29a980d83761f59f81b88167a0fd815
  Author: Markus Böck <markus.boeck02 at gmail.com>
  Date:   2023-09-07 (Thu, 07 Sep 2023)

  Changed paths:
    M mlir/include/mlir/IR/Interfaces.td
    M mlir/test/lib/Dialect/Test/TestInterfaces.td
    M mlir/test/lib/Dialect/Test/TestOps.td
    M mlir/test/mlir-tblgen/op-interface.td
    M mlir/tools/mlir-tblgen/OpInterfacesGen.cpp
    M mlir/unittests/IR/InterfaceTest.cpp

  Log Message:
  -----------
  [mlir] Make `classof` substitution in interface use an instance (#65492)

The substitution supported by `extraClassOf` is currently limited to
only the base instance, i.e. `Operation*`, `Type` or `Attribute`, which
limits the kind of checks you can perform in the `classof`
implementation.

Since prior to the user code, the interface concept is fetched, we can
use it to construct an instance of the interface, allowing use of its
methods in the `classof` check.

Since an instance of the interface allows access to the base class
methods through the `->` operator, I've gone ahead and replaced the
substitution of `$_op/$_type/$_attr` with an interface instance. This is
also consistent with `extraSharedClassDeclaration` and other methods
created in the interface class which do the same.




More information about the All-commits mailing list