Skip to content

Commit 4737004

Browse files
authored
Revert "[NFC][MLIR][TableGen] Adopt NamespaceEmitter more widely (#162015)"
This reverts commit e9b935e.
1 parent 1b2a956 commit 4737004

File tree

3 files changed

+77
-17
lines changed

3 files changed

+77
-17
lines changed

mlir/tools/mlir-tblgen/EnumsGen.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "llvm/ADT/StringExtras.h"
2121
#include "llvm/Support/FormatVariadic.h"
2222
#include "llvm/Support/raw_ostream.h"
23-
#include "llvm/TableGen/CodeGenHelpers.h"
2423
#include "llvm/TableGen/Error.h"
2524
#include "llvm/TableGen/Record.h"
2625
#include "llvm/TableGen/TableGenBackend.h"
@@ -702,7 +701,11 @@ static void emitEnumDecl(const Record &enumDef, raw_ostream &os) {
702701
StringRef underlyingToSymFnName = enumInfo.getUnderlyingToSymbolFnName();
703702
auto enumerants = enumInfo.getAllCases();
704703

705-
llvm::NamespaceEmitter ns(os, cppNamespace);
704+
SmallVector<StringRef, 2> namespaces;
705+
llvm::SplitString(cppNamespace, namespaces, "::");
706+
707+
for (auto ns : namespaces)
708+
os << "namespace " << ns << " {\n";
706709

707710
// Emit the enum class definition
708711
emitEnumClass(enumDef, enumName, underlyingType, description, enumerants, os);
@@ -763,7 +766,8 @@ class {1} : public ::mlir::{2} {
763766
os << formatv(attrClassDecl, enumName, attrClassName, baseAttrClassName);
764767
}
765768

766-
ns.close();
769+
for (auto ns : llvm::reverse(namespaces))
770+
os << "} // namespace " << ns << "\n";
767771

768772
// Generate a generic parser and printer for the enum.
769773
std::string qualName =
@@ -786,8 +790,13 @@ static bool emitEnumDecls(const RecordKeeper &records, raw_ostream &os) {
786790

787791
static void emitEnumDef(const Record &enumDef, raw_ostream &os) {
788792
EnumInfo enumInfo(enumDef);
793+
StringRef cppNamespace = enumInfo.getCppNamespace();
789794

790-
llvm::NamespaceEmitter ns(os, enumInfo.getCppNamespace());
795+
SmallVector<StringRef, 2> namespaces;
796+
llvm::SplitString(cppNamespace, namespaces, "::");
797+
798+
for (auto ns : namespaces)
799+
os << "namespace " << ns << " {\n";
791800

792801
if (enumInfo.isBitEnum()) {
793802
emitSymToStrFnForBitEnum(enumDef, os);
@@ -801,6 +810,10 @@ static void emitEnumDef(const Record &enumDef, raw_ostream &os) {
801810

802811
if (enumInfo.genSpecializedAttr())
803812
emitSpecializedAttrDef(enumDef, os);
813+
814+
for (auto ns : llvm::reverse(namespaces))
815+
os << "} // namespace " << ns << "\n";
816+
os << "\n";
804817
}
805818

806819
static bool emitEnumDefs(const RecordKeeper &records, raw_ostream &os) {

mlir/tools/mlir-tblgen/OpInterfacesGen.cpp

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#include "llvm/ADT/StringExtras.h"
2020
#include "llvm/Support/FormatVariadic.h"
2121
#include "llvm/Support/raw_ostream.h"
22-
#include "llvm/TableGen/CodeGenHelpers.h"
2322
#include "llvm/TableGen/Error.h"
2423
#include "llvm/TableGen/Record.h"
2524
#include "llvm/TableGen/TableGenBackend.h"
@@ -343,7 +342,11 @@ void InterfaceGenerator::emitModelDecl(const Interface &interface) {
343342
}
344343

345344
void InterfaceGenerator::emitModelMethodsDef(const Interface &interface) {
346-
llvm::NamespaceEmitter ns(os, interface.getCppNamespace());
345+
llvm::SmallVector<StringRef, 2> namespaces;
346+
llvm::SplitString(interface.getCppNamespace(), namespaces, "::");
347+
for (StringRef ns : namespaces)
348+
os << "namespace " << ns << " {\n";
349+
347350
for (auto &method : interface.getMethods()) {
348351
os << "template<typename " << valueTemplate << ">\n";
349352
emitCPPType(method.getReturnType(), os);
@@ -439,11 +442,18 @@ void InterfaceGenerator::emitModelMethodsDef(const Interface &interface) {
439442
method.isStatic() ? &ctx : &nonStaticMethodFmt);
440443
os << "\n}\n";
441444
}
445+
446+
for (StringRef ns : llvm::reverse(namespaces))
447+
os << "} // namespace " << ns << "\n";
442448
}
443449

444450
void InterfaceGenerator::emitInterfaceTraitDecl(const Interface &interface) {
445-
auto cppNamespace = (interface.getCppNamespace() + "::detail").str();
446-
llvm::NamespaceEmitter ns(os, cppNamespace);
451+
llvm::SmallVector<StringRef, 2> namespaces;
452+
llvm::SplitString(interface.getCppNamespace(), namespaces, "::");
453+
for (StringRef ns : namespaces)
454+
os << "namespace " << ns << " {\n";
455+
456+
os << "namespace detail {\n";
447457

448458
StringRef interfaceName = interface.getName();
449459
auto interfaceTraitsName = (interfaceName + "InterfaceTraits").str();
@@ -494,6 +504,10 @@ void InterfaceGenerator::emitInterfaceTraitDecl(const Interface &interface) {
494504
os << tblgen::tgfmt(*extraTraitDecls, &traitMethodFmt) << "\n";
495505

496506
os << " };\n";
507+
os << "}// namespace detail\n";
508+
509+
for (StringRef ns : llvm::reverse(namespaces))
510+
os << "} // namespace " << ns << "\n";
497511
}
498512

499513
static void emitInterfaceDeclMethods(const Interface &interface,
@@ -519,7 +533,10 @@ static void emitInterfaceDeclMethods(const Interface &interface,
519533
}
520534

521535
void InterfaceGenerator::forwardDeclareInterface(const Interface &interface) {
522-
llvm::NamespaceEmitter ns(os, interface.getCppNamespace());
536+
llvm::SmallVector<StringRef, 2> namespaces;
537+
llvm::SplitString(interface.getCppNamespace(), namespaces, "::");
538+
for (StringRef ns : namespaces)
539+
os << "namespace " << ns << " {\n";
523540

524541
// Emit a forward declaration of the interface class so that it becomes usable
525542
// in the signature of its methods.
@@ -528,10 +545,16 @@ void InterfaceGenerator::forwardDeclareInterface(const Interface &interface) {
528545

529546
StringRef interfaceName = interface.getName();
530547
os << "class " << interfaceName << ";\n";
548+
549+
for (StringRef ns : llvm::reverse(namespaces))
550+
os << "} // namespace " << ns << "\n";
531551
}
532552

533553
void InterfaceGenerator::emitInterfaceDecl(const Interface &interface) {
534-
llvm::NamespaceEmitter ns(os, interface.getCppNamespace());
554+
llvm::SmallVector<StringRef, 2> namespaces;
555+
llvm::SplitString(interface.getCppNamespace(), namespaces, "::");
556+
for (StringRef ns : namespaces)
557+
os << "namespace " << ns << " {\n";
535558

536559
StringRef interfaceName = interface.getName();
537560
auto interfaceTraitsName = (interfaceName + "InterfaceTraits").str();
@@ -608,6 +631,9 @@ void InterfaceGenerator::emitInterfaceDecl(const Interface &interface) {
608631
}
609632

610633
os << "};\n";
634+
635+
for (StringRef ns : llvm::reverse(namespaces))
636+
os << "} // namespace " << ns << "\n";
611637
}
612638

613639
bool InterfaceGenerator::emitInterfaceDecls() {

mlir/tools/mlir-tblgen/SPIRVUtilsGen.cpp

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,8 @@ static void emitInterfaceDecl(const Availability &availability,
259259
std::string interfaceTraitsName =
260260
std::string(formatv("{0}Traits", interfaceName));
261261

262-
llvm::NamespaceEmitter nsEmitter(os,
263-
availability.getInterfaceClassNamespace());
262+
StringRef cppNamespace = availability.getInterfaceClassNamespace();
263+
llvm::NamespaceEmitter nsEmitter(os, cppNamespace);
264264
os << "class " << interfaceName << ";\n\n";
265265

266266
// Emit the traits struct containing the concept and model declarations.
@@ -418,9 +418,15 @@ static void emitAvailabilityQueryForBitEnum(const Record &enumDef,
418418
static void emitEnumDecl(const Record &enumDef, raw_ostream &os) {
419419
EnumInfo enumInfo(enumDef);
420420
StringRef enumName = enumInfo.getEnumClassName();
421+
StringRef cppNamespace = enumInfo.getCppNamespace();
421422
auto enumerants = enumInfo.getAllCases();
422423

423-
llvm::NamespaceEmitter ns(os, enumInfo.getCppNamespace());
424+
llvm::SmallVector<StringRef, 2> namespaces;
425+
llvm::SplitString(cppNamespace, namespaces, "::");
426+
427+
for (auto ns : namespaces)
428+
os << "namespace " << ns << " {\n";
429+
424430
llvm::StringSet<> handledClasses;
425431

426432
// Place all availability specifications to their corresponding
@@ -435,6 +441,9 @@ static void emitEnumDecl(const Record &enumDef, raw_ostream &os) {
435441
enumName);
436442
handledClasses.insert(className);
437443
}
444+
445+
for (auto ns : llvm::reverse(namespaces))
446+
os << "} // namespace " << ns << "\n";
438447
}
439448

440449
static bool emitEnumDecls(const RecordKeeper &records, raw_ostream &os) {
@@ -450,19 +459,31 @@ static bool emitEnumDecls(const RecordKeeper &records, raw_ostream &os) {
450459

451460
static void emitEnumDef(const Record &enumDef, raw_ostream &os) {
452461
EnumInfo enumInfo(enumDef);
453-
llvm::NamespaceEmitter ns(os, enumInfo.getCppNamespace());
462+
StringRef cppNamespace = enumInfo.getCppNamespace();
463+
464+
llvm::SmallVector<StringRef, 2> namespaces;
465+
llvm::SplitString(cppNamespace, namespaces, "::");
466+
467+
for (auto ns : namespaces)
468+
os << "namespace " << ns << " {\n";
454469

455-
if (enumInfo.isBitEnum())
470+
if (enumInfo.isBitEnum()) {
456471
emitAvailabilityQueryForBitEnum(enumDef, os);
457-
else
472+
} else {
458473
emitAvailabilityQueryForIntEnum(enumDef, os);
474+
}
475+
476+
for (auto ns : llvm::reverse(namespaces))
477+
os << "} // namespace " << ns << "\n";
478+
os << "\n";
459479
}
460480

461481
static bool emitEnumDefs(const RecordKeeper &records, raw_ostream &os) {
462482
llvm::emitSourceFileHeader("SPIR-V Enum Availability Definitions", os,
463483
records);
464484

465-
for (const Record *def : records.getAllDerivedDefinitions("EnumInfo"))
485+
auto defs = records.getAllDerivedDefinitions("EnumInfo");
486+
for (const auto *def : defs)
466487
emitEnumDef(*def, os);
467488

468489
return false;

0 commit comments

Comments
 (0)