[mlir] Generare .cpp.inc files for dialects.

* Previously, we were only generating .h.inc files. We foresee the need to also generate implementations and this is a step towards that.
* Discussed in https://llvm.discourse.group/t/generating-cpp-inc-files-for-dialects/3732/2
* Deviates from the discussion above by generating a default constructor in the .cpp.inc file (and adding a tablegen bit that disables this in case if this is user provided).
* Generating the destructor started as a way to flush out the missing includes (produces a link error), but it is a strict improvement on its own that is worth doing (i.e. by emitting key methods in the .cpp file, we root vtables in one translation unit, which is a non-controversial improvement).

Differential Revision: https://reviews.llvm.org/D105070
This commit is contained in:
Stella Laurenzo 2021-06-28 22:54:11 +00:00
parent bb2cfca2f3
commit 485cc55edf
58 changed files with 355 additions and 26 deletions

View File

@ -15,6 +15,7 @@ function(add_mlir_dialect dialect dialect_namespace)
mlir_tablegen(${dialect}Types.h.inc -gen-typedef-decls)
mlir_tablegen(${dialect}Types.cpp.inc -gen-typedef-defs)
mlir_tablegen(${dialect}Dialect.h.inc -gen-dialect-decls -dialect=${dialect_namespace})
mlir_tablegen(${dialect}Dialect.cpp.inc -gen-dialect-defs -dialect=${dialect_namespace})
add_public_tablegen_target(MLIR${dialect}IncGen)
add_dependencies(mlir-headers MLIR${dialect}IncGen)
endfunction()

View File

@ -12,6 +12,8 @@
using namespace mlir;
using namespace mlir::standalone;
#include "Standalone/StandaloneOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// Standalone dialect.
//===----------------------------------------------------------------------===//

View File

@ -2,4 +2,5 @@ set(LLVM_TARGET_DEFINITIONS Ops.td)
mlir_tablegen(Ops.h.inc -gen-op-decls)
mlir_tablegen(Ops.cpp.inc -gen-op-defs)
mlir_tablegen(Dialect.h.inc -gen-dialect-decls)
mlir_tablegen(Dialect.cpp.inc -gen-dialect-defs)
add_public_tablegen_target(ToyCh2OpsIncGen)

View File

@ -20,6 +20,8 @@
using namespace mlir;
using namespace mlir::toy;
#include "toy/Dialect.cpp.inc"
//===----------------------------------------------------------------------===//
// ToyDialect
//===----------------------------------------------------------------------===//

View File

@ -2,4 +2,5 @@ set(LLVM_TARGET_DEFINITIONS Ops.td)
mlir_tablegen(Ops.h.inc -gen-op-decls)
mlir_tablegen(Ops.cpp.inc -gen-op-defs)
mlir_tablegen(Dialect.h.inc -gen-dialect-decls)
mlir_tablegen(Dialect.cpp.inc -gen-dialect-defs)
add_public_tablegen_target(ToyCh3OpsIncGen)

View File

@ -20,6 +20,8 @@
using namespace mlir;
using namespace mlir::toy;
#include "toy/Dialect.cpp.inc"
//===----------------------------------------------------------------------===//
// ToyDialect
//===----------------------------------------------------------------------===//

View File

@ -3,6 +3,7 @@ set(LLVM_TARGET_DEFINITIONS Ops.td)
mlir_tablegen(Ops.h.inc -gen-op-decls)
mlir_tablegen(Ops.cpp.inc -gen-op-defs)
mlir_tablegen(Dialect.h.inc -gen-dialect-decls)
mlir_tablegen(Dialect.cpp.inc -gen-dialect-defs)
add_public_tablegen_target(ToyCh4OpsIncGen)
# Most dialects should use add_mlir_interfaces().

View File

@ -21,6 +21,8 @@
using namespace mlir;
using namespace mlir::toy;
#include "toy/Dialect.cpp.inc"
//===----------------------------------------------------------------------===//
// ToyInlinerInterface
//===----------------------------------------------------------------------===//

View File

@ -3,6 +3,7 @@ set(LLVM_TARGET_DEFINITIONS Ops.td)
mlir_tablegen(Ops.h.inc -gen-op-decls)
mlir_tablegen(Ops.cpp.inc -gen-op-defs)
mlir_tablegen(Dialect.h.inc -gen-dialect-decls)
mlir_tablegen(Dialect.cpp.inc -gen-dialect-defs)
add_public_tablegen_target(ToyCh5OpsIncGen)
# Most dialects should use add_mlir_interfaces().

View File

@ -21,6 +21,8 @@
using namespace mlir;
using namespace mlir::toy;
#include "toy/Dialect.cpp.inc"
//===----------------------------------------------------------------------===//
// ToyInlinerInterface
//===----------------------------------------------------------------------===//

View File

@ -3,6 +3,7 @@ set(LLVM_TARGET_DEFINITIONS Ops.td)
mlir_tablegen(Ops.h.inc -gen-op-decls)
mlir_tablegen(Ops.cpp.inc -gen-op-defs)
mlir_tablegen(Dialect.h.inc -gen-dialect-decls)
mlir_tablegen(Dialect.cpp.inc -gen-dialect-defs)
add_public_tablegen_target(ToyCh6OpsIncGen)
# Most dialects should use add_mlir_interfaces().

View File

@ -21,6 +21,8 @@
using namespace mlir;
using namespace mlir::toy;
#include "toy/Dialect.cpp.inc"
//===----------------------------------------------------------------------===//
// ToyInlinerInterface
//===----------------------------------------------------------------------===//

View File

@ -3,6 +3,7 @@ set(LLVM_TARGET_DEFINITIONS Ops.td)
mlir_tablegen(Ops.h.inc -gen-op-decls)
mlir_tablegen(Ops.cpp.inc -gen-op-defs)
mlir_tablegen(Dialect.h.inc -gen-dialect-decls)
mlir_tablegen(Dialect.cpp.inc -gen-dialect-defs)
add_public_tablegen_target(ToyCh7OpsIncGen)
# Most dialects should use add_mlir_interfaces().

View File

@ -22,6 +22,8 @@
using namespace mlir;
using namespace mlir::toy;
#include "toy/Dialect.cpp.inc"
//===----------------------------------------------------------------------===//
// ToyInlinerInterface
//===----------------------------------------------------------------------===//

View File

@ -9,6 +9,7 @@ set(LLVM_TARGET_DEFINITIONS LLVMOps.td)
mlir_tablegen(LLVMOps.h.inc -gen-op-decls)
mlir_tablegen(LLVMOps.cpp.inc -gen-op-defs)
mlir_tablegen(LLVMOpsDialect.h.inc -gen-dialect-decls)
mlir_tablegen(LLVMOpsDialect.cpp.inc -gen-dialect-defs)
mlir_tablegen(LLVMOpsEnums.h.inc -gen-enum-decls)
mlir_tablegen(LLVMOpsEnums.cpp.inc -gen-enum-defs)
add_public_tablegen_target(MLIRLLVMOpsIncGen)

View File

@ -4,6 +4,7 @@ add_public_tablegen_target(acc_common_td)
set(LLVM_TARGET_DEFINITIONS OpenACCOps.td)
mlir_tablegen(OpenACCOpsDialect.h.inc -gen-dialect-decls -dialect=acc)
mlir_tablegen(OpenACCOpsDialect.cpp.inc -gen-dialect-defs -dialect=acc)
mlir_tablegen(OpenACCOps.h.inc -gen-op-decls)
mlir_tablegen(OpenACCOps.cpp.inc -gen-op-defs)
mlir_tablegen(OpenACCOpsEnums.h.inc -gen-enum-decls)

View File

@ -4,6 +4,7 @@ add_public_tablegen_target(omp_common_td)
set(LLVM_TARGET_DEFINITIONS OpenMPOps.td)
mlir_tablegen(OpenMPOpsDialect.h.inc -gen-dialect-decls -dialect=omp)
mlir_tablegen(OpenMPOpsDialect.cpp.inc -gen-dialect-defs -dialect=omp)
mlir_tablegen(OpenMPOps.h.inc -gen-op-decls)
mlir_tablegen(OpenMPOps.cpp.inc -gen-op-defs)
mlir_tablegen(OpenMPOpsEnums.h.inc -gen-enum-decls)

View File

@ -2,6 +2,7 @@ set(LLVM_TARGET_DEFINITIONS Ops.td)
mlir_tablegen(Ops.h.inc -gen-op-decls)
mlir_tablegen(Ops.cpp.inc -gen-op-defs)
mlir_tablegen(OpsDialect.h.inc -gen-dialect-decls)
mlir_tablegen(OpsDialect.cpp.inc -gen-dialect-defs)
mlir_tablegen(OpsEnums.h.inc -gen-enum-decls)
mlir_tablegen(OpsEnums.cpp.inc -gen-enum-defs)
add_public_tablegen_target(MLIRStandardOpsIncGen)

View File

@ -9,6 +9,7 @@ add_public_tablegen_target(MLIRBuiltinAttributesIncGen)
set(LLVM_TARGET_DEFINITIONS BuiltinDialect.td)
mlir_tablegen(BuiltinDialect.h.inc -gen-dialect-decls)
mlir_tablegen(BuiltinDialect.cpp.inc -gen-dialect-defs)
add_public_tablegen_target(MLIRBuiltinDialectIncGen)
set(LLVM_TARGET_DEFINITIONS BuiltinLocationAttributes.td)

View File

@ -267,6 +267,10 @@ class Dialect {
// If this dialect overrides the hook for materializing constants.
bit hasConstantMaterializer = 0;
/// If the dialect definition provides a non-default destructor.
/// If false, a default destructor implementation will be generated.
bit hasNonDefaultDestructor = 0;
// If this dialect overrides the hook for verifying operation attributes.
bit hasOperationAttrVerify = 0;

View File

@ -54,9 +54,13 @@ public:
/// Returns true if this dialect has a canonicalizer.
bool hasCanonicalizer() const;
// Returns true if this dialect has a constant materializer.
/// Returns true if this dialect has a constant materializer.
bool hasConstantMaterializer() const;
/// Returns true if the destructor definition is provided explicitly or
/// false if a default should be generated.
bool hasNonDefaultDestructor() const;
/// Returns true if this dialect has an operation attribute verifier.
bool hasOperationAttrVerify() const;

View File

@ -18,6 +18,8 @@
using namespace mlir;
#include "mlir/Dialect/AMX/AMXDialect.cpp.inc"
void amx::AMXDialect::initialize() {
addOperations<
#define GET_OP_LIST

View File

@ -26,6 +26,8 @@ using namespace mlir;
#define DEBUG_TYPE "affine-analysis"
#include "mlir/Dialect/Affine/IR/AffineOpsDialect.cpp.inc"
/// A utility function to check if a value is defined at the top level of
/// `region` or is an argument of `region`. A value of index type defined at the
/// top level of a `AffineScope` region is always a valid symbol for all

View File

@ -18,6 +18,8 @@
using namespace mlir;
#include "mlir/Dialect/ArmNeon/ArmNeonDialect.cpp.inc"
void arm_neon::ArmNeonDialect::initialize() {
addOperations<
#define GET_OP_LIST

View File

@ -22,6 +22,8 @@
using namespace mlir;
using namespace arm_sve;
#include "mlir/Dialect/ArmSVE/ArmSVEDialect.cpp.inc"
static Type getI1SameShape(Type type);
static void buildScalableCmpIOp(OpBuilder &build, OperationState &result,
CmpIPredicate predicate, Value lhs, Value rhs);

View File

@ -14,6 +14,8 @@
using namespace mlir;
using namespace mlir::async;
#include "mlir/Dialect/Async/IR/AsyncOpsDialect.cpp.inc"
void AsyncDialect::initialize() {
addOperations<
#define GET_OP_LIST

View File

@ -8,6 +8,8 @@
#include "mlir/Dialect/Complex/IR/Complex.h"
#include "mlir/Dialect/Complex/IR/ComplexOpsDialect.cpp.inc"
void mlir::complex::ComplexDialect::initialize() {
addOperations<
#define GET_OP_LIST

View File

@ -16,6 +16,8 @@
using namespace mlir;
#include "mlir/Dialect/DLTI/DLTIDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// DataLayoutEntryAttr
//===----------------------------------------------------------------------===//

View File

@ -14,6 +14,8 @@
using namespace mlir;
using namespace mlir::emitc;
#include "mlir/Dialect/EmitC/IR/EmitCDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// EmitCDialect
//===----------------------------------------------------------------------===//

View File

@ -29,6 +29,8 @@
using namespace mlir;
using namespace mlir::gpu;
#include "mlir/Dialect/GPU/GPUOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// MMAMatrixType
//===----------------------------------------------------------------------===//

View File

@ -36,6 +36,8 @@
using namespace mlir;
using namespace mlir::LLVM;
#include "mlir/Dialect/LLVMIR/LLVMOpsDialect.cpp.inc"
static constexpr const char kVolatileAttrName[] = "volatile_";
static constexpr const char kNonTemporalAttrName[] = "nontemporal";

View File

@ -30,6 +30,8 @@
using namespace mlir;
using namespace NVVM;
#include "mlir/Dialect/LLVMIR/NVVMOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// Printing/parsing for NVVM ops
//===----------------------------------------------------------------------===//

View File

@ -30,6 +30,8 @@
using namespace mlir;
using namespace ROCDL;
#include "mlir/Dialect/LLVMIR/ROCDLOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// Parsing for ROCDL ops
//===----------------------------------------------------------------------===//

View File

@ -36,6 +36,8 @@
using namespace mlir;
using namespace mlir::linalg;
#include "mlir/Dialect/Linalg/IR/LinalgOpsDialect.cpp.inc"
/// Forward declarations.
/// Generic entry point to create the block for the region of a LinalgOp.

View File

@ -12,6 +12,8 @@
using namespace mlir;
using namespace mlir::math;
#include "mlir/Dialect/Math/IR/MathOpsDialect.cpp.inc"
namespace {
/// This class defines the interface for handling inlining with math
/// operations.

View File

@ -12,6 +12,8 @@
using namespace mlir;
using namespace mlir::memref;
#include "mlir/Dialect/MemRef/IR/MemRefOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// MemRefDialect Dialect Interfaces
//===----------------------------------------------------------------------===//

View File

@ -17,6 +17,8 @@
using namespace mlir;
using namespace acc;
#include "mlir/Dialect/OpenACC/OpenACCOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// OpenACC operations
//===----------------------------------------------------------------------===//

View File

@ -22,6 +22,7 @@
#include "llvm/ADT/StringSwitch.h"
#include <cstddef>
#include "mlir/Dialect/OpenMP/OpenMPOpsDialect.cpp.inc"
#include "mlir/Dialect/OpenMP/OpenMPOpsEnums.cpp.inc"
using namespace mlir;

View File

@ -16,6 +16,8 @@
using namespace mlir;
using namespace mlir::pdl;
#include "mlir/Dialect/PDL/IR/PDLOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// PDLDialect
//===----------------------------------------------------------------------===//

View File

@ -14,6 +14,8 @@
using namespace mlir;
using namespace mlir::pdl_interp;
#include "mlir/Dialect/PDLInterp/IR/PDLInterpOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// PDLInterp Dialect
//===----------------------------------------------------------------------===//

View File

@ -23,6 +23,8 @@ using namespace mlir;
using namespace mlir::quant;
using namespace mlir::quant::detail;
#include "mlir/Dialect/Quant/QuantOpsDialect.cpp.inc"
void QuantizationDialect::initialize() {
addTypes<AnyQuantizedType, CalibratedQuantizedType, UniformQuantizedType,
UniformQuantizedPerAxisType>();

View File

@ -18,6 +18,8 @@
using namespace mlir;
using namespace mlir::scf;
#include "mlir/Dialect/SCF/SCFOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// SCFDialect Dialect Interfaces
//===----------------------------------------------------------------------===//

View File

@ -33,6 +33,8 @@
using namespace mlir;
using namespace mlir::spirv;
#include "mlir/Dialect/SPIRV/IR/SPIRVOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// InlinerInterface
//===----------------------------------------------------------------------===//

View File

@ -24,6 +24,8 @@
using namespace mlir;
using namespace mlir::shape;
#include "mlir/Dialect/Shape/IR/ShapeOpsDialect.cpp.inc"
namespace {
#include "ShapeCanonicalization.inc"
}

View File

@ -16,6 +16,8 @@
using namespace mlir;
using namespace mlir::sparse_tensor;
#include "mlir/Dialect/SparseTensor/IR/SparseTensorOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// TensorDialect Attribute Methods.
//===----------------------------------------------------------------------===//

View File

@ -28,6 +28,8 @@
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/raw_ostream.h"
#include "mlir/Dialect/StandardOps/IR/OpsDialect.cpp.inc"
// Pull in all enum type definitions and utility function declarations.
#include "mlir/Dialect/StandardOps/IR/OpsEnums.cpp.inc"

View File

@ -12,6 +12,8 @@
using namespace mlir;
using namespace mlir::tensor;
#include "mlir/Dialect/Tensor/IR/TensorOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// TensorDialect Dialect Interfaces
//===----------------------------------------------------------------------===//

View File

@ -23,6 +23,8 @@
using namespace mlir;
using namespace mlir::tosa;
#include "mlir/Dialect/Tosa/IR/TosaOpsDialect.cpp.inc"
//===----------------------------------------------------------------------===//
// Tosa dialect structs and interface includes.
//===----------------------------------------------------------------------===//

View File

@ -32,6 +32,7 @@
#include "llvm/ADT/bit.h"
#include <numeric>
#include "mlir/Dialect/Vector/VectorOpsDialect.cpp.inc"
// Pull in all enum type and utility function definitions.
#include "mlir/Dialect/Vector/VectorOpsEnums.cpp.inc"

View File

@ -18,6 +18,8 @@
using namespace mlir;
#include "mlir/Dialect/X86Vector/X86VectorDialect.cpp.inc"
void x86vector::X86VectorDialect::initialize() {
addOperations<
#define GET_OP_LIST

View File

@ -27,6 +27,8 @@ using namespace mlir;
// Builtin Dialect
//===----------------------------------------------------------------------===//
#include "mlir/IR/BuiltinDialect.cpp.inc"
namespace {
struct BuiltinOpAsmDialectInterface : public OpAsmDialectInterface {
using OpAsmDialectInterface::OpAsmDialectInterface;

View File

@ -69,6 +69,10 @@ bool Dialect::hasConstantMaterializer() const {
return def->getValueAsBit("hasConstantMaterializer");
}
bool Dialect::hasNonDefaultDestructor() const {
return def->getValueAsBit("hasNonDefaultDestructor");
}
bool Dialect::hasOperationAttrVerify() const {
return def->getValueAsBit("hasOperationAttrVerify");
}

View File

@ -28,6 +28,7 @@ set(LLVM_TARGET_DEFINITIONS TestOps.td)
mlir_tablegen(TestOps.h.inc -gen-op-decls)
mlir_tablegen(TestOps.cpp.inc -gen-op-defs)
mlir_tablegen(TestOpsDialect.h.inc -gen-dialect-decls -dialect=test)
mlir_tablegen(TestOpsDialect.cpp.inc -gen-dialect-defs -dialect=test)
mlir_tablegen(TestOpEnums.h.inc -gen-enum-decls)
mlir_tablegen(TestOpEnums.cpp.inc -gen-enum-defs)
mlir_tablegen(TestOpStructs.h.inc -gen-struct-attr-decls)

View File

@ -26,6 +26,8 @@
using namespace mlir;
using namespace mlir::test;
#include "TestOpsDialect.cpp.inc"
void mlir::test::registerTestDialect(DialectRegistry &registry) {
registry.insert<TestDialect>();
}

View File

@ -31,6 +31,7 @@ def Test_Dialect : Dialect {
let hasRegionArgAttrVerify = 1;
let hasRegionResultAttrVerify = 1;
let hasOperationInterfaceFallback = 1;
let hasNonDefaultDestructor = 1;
let dependentDialects = ["::mlir::DLTIDialect"];
let extraClassDeclaration = [{
@ -47,8 +48,6 @@ def Test_Dialect : Dialect {
getParseOperationHook(StringRef opName) const override;
LogicalResult printOperation(Operation *op,
OpAsmPrinter &printer) const override;
~TestDialect();
private:
// Storage for a custom fallback interface.
void *fallbackEffectOpInterfaces;

View File

@ -17,6 +17,7 @@
#include "mlir/TableGen/OpClass.h"
#include "mlir/TableGen/Operator.h"
#include "mlir/TableGen/Trait.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/Sequence.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/CommandLine.h"
@ -54,6 +55,29 @@ filterForDialect(ArrayRef<llvm::Record *> records, Dialect &dialect) {
DialectFilterIterator(records.end(), records.end(), filterFn)};
}
static Optional<Dialect>
findSelectedDialect(ArrayRef<const llvm::Record *> dialectDefs) {
// Select the dialect to gen for.
if (dialectDefs.size() == 1 && selectedDialect.getNumOccurrences() == 0) {
return Dialect(dialectDefs.front());
}
if (selectedDialect.getNumOccurrences() == 0) {
llvm::errs() << "when more than 1 dialect is present, one must be selected "
"via '-dialect'\n";
return llvm::None;
}
auto dialectIt = llvm::find_if(dialectDefs, [](const llvm::Record *def) {
return Dialect(def).getName() == selectedDialect;
});
if (dialectIt == dialectDefs.end()) {
llvm::errs() << "selected dialect with '-dialect' does not exist\n";
return llvm::None;
}
return Dialect(*dialectIt);
}
//===----------------------------------------------------------------------===//
// GEN: Dialect declarations
//===----------------------------------------------------------------------===//
@ -72,9 +96,11 @@ class {0} : public ::mlir::Dialect {
{2}
initialize();
}
void initialize();
friend class ::mlir::MLIRContext;
public:
~{0}() override;
static constexpr ::llvm::StringLiteral getDialectNamespace() {
return ::llvm::StringLiteral("{1}");
}
@ -210,34 +236,52 @@ static bool emitDialectDecls(const llvm::RecordKeeper &recordKeeper,
raw_ostream &os) {
emitSourceFileHeader("Dialect Declarations", os);
auto defs = recordKeeper.getAllDerivedDefinitions("Dialect");
if (defs.empty())
auto dialectDefs = recordKeeper.getAllDerivedDefinitions("Dialect");
if (dialectDefs.empty())
return false;
// Select the dialect to gen for.
const llvm::Record *dialectDef = nullptr;
if (defs.size() == 1 && selectedDialect.getNumOccurrences() == 0) {
dialectDef = defs.front();
} else if (selectedDialect.getNumOccurrences() == 0) {
llvm::errs() << "when more than 1 dialect is present, one must be selected "
"via '-dialect'";
Optional<Dialect> dialect = findSelectedDialect(dialectDefs);
if (!dialect)
return true;
} else {
auto dialectIt = llvm::find_if(defs, [](const llvm::Record *def) {
return Dialect(def).getName() == selectedDialect;
});
if (dialectIt == defs.end()) {
llvm::errs() << "selected dialect with '-dialect' does not exist";
return true;
}
dialectDef = *dialectIt;
}
auto attrDefs = recordKeeper.getAllDerivedDefinitions("DialectAttr");
auto typeDefs = recordKeeper.getAllDerivedDefinitions("DialectType");
Dialect dialect(dialectDef);
emitDialectDecl(dialect, filterForDialect<Attribute>(attrDefs, dialect),
filterForDialect<Type>(typeDefs, dialect), os);
emitDialectDecl(*dialect, filterForDialect<Attribute>(attrDefs, *dialect),
filterForDialect<Type>(typeDefs, *dialect), os);
return false;
}
//===----------------------------------------------------------------------===//
// GEN: Dialect definitions
//===----------------------------------------------------------------------===//
/// The code block to generate a default desturctor definition.
///
/// {0}: The name of the dialect class.
static const char *const dialectDestructorStr = R"(
{0}::~{0}() = default;
)";
static void emitDialectDef(Dialect &dialect, raw_ostream &os) {
// Emit all nested namespaces.
NamespaceEmitter nsEmitter(os, dialect);
if (!dialect.hasNonDefaultDestructor())
os << llvm::formatv(dialectDestructorStr, dialect.getCppClassName());
}
static bool emitDialectDefs(const llvm::RecordKeeper &recordKeeper,
raw_ostream &os) {
emitSourceFileHeader("Dialect Definitions", os);
auto dialectDefs = recordKeeper.getAllDerivedDefinitions("Dialect");
if (dialectDefs.empty())
return false;
Optional<Dialect> dialect = findSelectedDialect(dialectDefs);
if (!dialect)
return true;
emitDialectDef(*dialect, os);
return false;
}
@ -250,3 +294,9 @@ static mlir::GenRegistration
[](const llvm::RecordKeeper &records, raw_ostream &os) {
return emitDialectDecls(records, os);
});
static mlir::GenRegistration
genDialectDefs("gen-dialect-defs", "Generate dialect definitions",
[](const llvm::RecordKeeper &records, raw_ostream &os) {
return emitDialectDefs(records, os);
});

View File

@ -129,6 +129,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/IR/BuiltinDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/IR/BuiltinDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/IR/BuiltinDialect.td",
@ -778,6 +782,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/Affine/IR/AffineOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/Affine/IR/AffineOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/Affine/IR/AffineOps.td",
@ -847,6 +855,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/EmitC/IR/EmitCDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/EmitC/IR/EmitCDialect.cpp.inc",
),
(
["-gen-op-decls"],
"include/mlir/Dialect/EmitC/IR/EmitC.h.inc",
@ -904,6 +916,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/Async/IR/AsyncOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/Async/IR/AsyncOpsDialect.cpp.inc",
),
(
["-gen-typedef-decls"],
"include/mlir/Dialect/Async/IR/AsyncOpsTypes.h.inc",
@ -975,6 +991,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/ArmNeon/ArmNeonDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=arm_neon",
],
"include/mlir/Dialect/ArmNeon/ArmNeonDialect.cpp.inc",
),
(
["-gen-op-decls"],
"include/mlir/Dialect/ArmNeon/ArmNeon.h.inc",
@ -1093,6 +1116,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/ArmSVE/ArmSVEDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=arm_sve",
],
"include/mlir/Dialect/ArmSVE/ArmSVEDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/ArmSVE/ArmSVE.td",
@ -1173,6 +1203,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/AMX/AMXDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=amx",
],
"include/mlir/Dialect/AMX/AMXDialect.cpp.inc",
),
(
["-gen-op-decls"],
"include/mlir/Dialect/AMX/AMX.h.inc",
@ -1261,6 +1298,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/X86Vector/X86VectorDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=x86vector",
],
"include/mlir/Dialect/X86Vector/X86VectorDialect.cpp.inc",
),
(
["-gen-op-decls"],
"include/mlir/Dialect/X86Vector/X86Vector.h.inc",
@ -1355,6 +1399,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/SCF/SCFOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/SCF/SCFOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/SCF/SCFOps.td",
@ -1446,6 +1494,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/SparseTensor/IR/SparseTensorOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=sparse_tensor",
],
"include/mlir/Dialect/SparseTensor/IR/SparseTensorOpsDialect.cpp.inc",
),
(
["-gen-op-decls"],
"include/mlir/Dialect/SparseTensor/IR/SparseTensorOps.h.inc",
@ -1586,6 +1641,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/StandardOps/IR/OpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/StandardOps/IR/OpsDialect.cpp.inc",
),
(
["-gen-enum-decls"],
"include/mlir/Dialect/StandardOps/IR/OpsEnums.h.inc",
@ -2060,6 +2119,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/Shape/IR/ShapeOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/Shape/IR/ShapeOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/Shape/IR/ShapeOps.td",
@ -2516,6 +2579,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/GPU/GPUOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=gpu",
],
"include/mlir/Dialect/GPU/GPUOpsDialect.cpp.inc",
),
(
["-gen-op-interface-decls"],
"include/mlir/Dialect/GPU/GPUOpInterfaces.h.inc",
@ -2953,6 +3023,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/LLVMIR/LLVMOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/LLVMIR/LLVMOpsDialect.cpp.inc",
),
(
["-gen-enum-decls"],
"include/mlir/Dialect/LLVMIR/LLVMOpsEnums.h.inc",
@ -3037,6 +3111,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/LLVMIR/NVVMOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=nvvm",
],
"include/mlir/Dialect/LLVMIR/NVVMOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/LLVMIR/NVVMOps.td",
@ -3105,6 +3186,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/LLVMIR/ROCDLOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=rocdl",
],
"include/mlir/Dialect/LLVMIR/ROCDLOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/LLVMIR/ROCDLOps.td",
@ -3175,6 +3263,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/PDL/IR/PDLOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/PDL/IR/PDLOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/PDL/IR/PDLOps.td",
@ -3250,6 +3342,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/PDLInterp/IR/PDLInterpOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=pdl_interp",
],
"include/mlir/Dialect/PDLInterp/IR/PDLInterpOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/PDLInterp/IR/PDLInterpOps.td",
@ -3284,6 +3383,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/SPIRV/IR/SPIRVOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/SPIRV/IR/SPIRVOpsDialect.cpp.inc",
),
(
["-gen-op-doc"],
"g3doc/Dialects/SPIRV/SPIRVOps.md",
@ -3645,6 +3748,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/Tensor/IR/TensorOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=tensor",
],
"include/mlir/Dialect/Tensor/IR/TensorOpsDialect.cpp.inc",
),
(
["-gen-op-decls"],
"include/mlir/Dialect/Tensor/IR/TensorOps.h.inc",
@ -5152,6 +5262,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/OpenACC/OpenACCOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=acc",
],
"include/mlir/Dialect/OpenACC/OpenACCOpsDialect.cpp.inc",
),
(
["-gen-op-decls"],
"include/mlir/Dialect/OpenACC/OpenACCOps.h.inc",
@ -5259,6 +5376,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/OpenMP/OpenMPOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=omp",
],
"include/mlir/Dialect/OpenMP/OpenMPOpsDialect.cpp.inc",
),
(
["-gen-op-doc"],
"g3doc/Dialects/OpenMP/OpenMPOps.md",
@ -5390,6 +5514,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/Quant/QuantOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/Quant/QuantOpsDialect.cpp.inc",
),
(
["-gen-op-doc"],
"g3doc/Dialects/QuantOps/QuantOps.md",
@ -5488,6 +5616,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/Linalg/IR/LinalgOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=linalg",
],
"include/mlir/Dialect/Linalg/IR/LinalgOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/Linalg/IR/LinalgOps.td",
@ -5826,6 +5961,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/Vector/VectorOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=vector",
],
"include/mlir/Dialect/Vector/VectorOpsDialect.cpp.inc",
),
(
["-gen-enum-decls"],
"include/mlir/Dialect/Vector/VectorOpsEnums.h.inc",
@ -5973,6 +6115,10 @@ gentbl_cc_library(
["-gen-dialect-decls"],
"include/mlir/Dialect/Tosa/IR/TosaOpsDialect.h.inc",
),
(
["-gen-dialect-defs"],
"include/mlir/Dialect/Tosa/IR/TosaOpsDialect.cpp.inc",
),
(
["-gen-op-doc"],
"g3doc/Dialects/Tosa/TosaOps.md",
@ -6147,6 +6293,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/Complex/IR/ComplexOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=complex",
],
"include/mlir/Dialect/Complex/IR/ComplexOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/Complex/IR/ComplexBase.td",
@ -6295,6 +6448,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/Math/IR/MathOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=math",
],
"include/mlir/Dialect/Math/IR/MathOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/Math/IR/MathBase.td",
@ -6418,6 +6578,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/MemRef/IR/MemRefOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=memref",
],
"include/mlir/Dialect/MemRef/IR/MemRefOpsDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/MemRef/IR/MemRefBase.td",
@ -6535,6 +6702,13 @@ gentbl_cc_library(
],
"include/mlir/Dialect/DLTI/DLTIDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=dlti",
],
"include/mlir/Dialect/DLTI/DLTIDialect.cpp.inc",
),
],
tblgen = ":mlir-tblgen",
td_file = "include/mlir/Dialect/DLTI/DLTIBase.td",

View File

@ -71,6 +71,13 @@ gentbl_cc_library(
],
"lib/Dialect/Test/TestOpsDialect.h.inc",
),
(
[
"-gen-dialect-defs",
"-dialect=test",
],
"lib/Dialect/Test/TestOpsDialect.cpp.inc",
),
(
["-gen-enum-decls"],
"lib/Dialect/Test/TestOpEnums.h.inc",