diff --git a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.h b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.h --- a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.h +++ b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.h @@ -372,12 +372,13 @@ /// argument. void fullyComposeAffineMapAndOperands(AffineMap *map, SmallVectorImpl *operands); - +} // namespace mlir #include "mlir/Dialect/Affine/IR/AffineOpsDialect.h.inc" #define GET_OP_CLASSES #include "mlir/Dialect/Affine/IR/AffineOps.h.inc" +namespace mlir { /// Returns true if the provided value is the induction variable of a /// AffineForOp. bool isForInductionVar(Value val); diff --git a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td --- a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td +++ b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td @@ -21,7 +21,7 @@ def Affine_Dialect : Dialect { let name = "affine"; - let cppNamespace = ""; + let cppNamespace = "mlir"; let hasConstantMaterializer = 1; } diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp --- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp +++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp @@ -650,7 +650,6 @@ generateOpFormat(op, opClass); genSideEffectInterfaceMethods(); } - void OpEmitter::emitDecl( const Operator &op, raw_ostream &os, const StaticVerifierFunctionEmitter &staticVerifierEmitter) { @@ -2576,15 +2575,30 @@ emitDecl); for (auto *def : defs) { Operator op(*def); - NamespaceEmitter emitter(os, op.getCppNamespace()); if (emitDecl) { - os << formatv(opCommentHeader, op.getQualCppClassName(), "declarations"); - OpOperandAdaptorEmitter::emitDecl(op, os); - OpEmitter::emitDecl(op, os, staticVerifierEmitter); + { + NamespaceEmitter emitter(os, op.getCppNamespace()); + os << formatv(opCommentHeader, op.getQualCppClassName(), + "declarations"); + OpOperandAdaptorEmitter::emitDecl(op, os); + OpEmitter::emitDecl(op, os, staticVerifierEmitter); + } + os << "template<>\n"; + os << "mlir::TypeID mlir::detail::TypeIDExported::get<" + << op.getCppNamespace() << "::" << op.getCppClassName() << ">();\n\n"; } else { - os << formatv(opCommentHeader, op.getQualCppClassName(), "definitions"); - OpOperandAdaptorEmitter::emitDef(op, os); - OpEmitter::emitDef(op, os, staticVerifierEmitter); + { + NamespaceEmitter emitter(os, op.getCppNamespace()); + os << formatv(opCommentHeader, op.getQualCppClassName(), "definitions"); + OpOperandAdaptorEmitter::emitDef(op, os); + OpEmitter::emitDef(op, os, staticVerifierEmitter); + } + os << "template<>\n"; + os << "mlir::TypeID mlir::detail::TypeIDExported::get<" + << op.getCppNamespace() << "::" << op.getCppClassName() << ">() {\n"; + os << " static TypeID::Storage instance;\n"; + os << " return TypeID(&instance);\n"; + os << "}\n"; } } }