Skip to content

Commit 825002b

Browse files
jurahulakadutta
authored andcommitted
[NFC][MLIR][TableGen] Adopt NamespaceEmitter more widely (llvm#162015)
Adopt `NamespaceEmitter` more widely in MLIR TableGen.
1 parent dabaef2 commit 825002b

File tree

3 files changed

+17
-77
lines changed

3 files changed

+17
-77
lines changed

mlir/tools/mlir-tblgen/EnumsGen.cpp

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
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"
2324
#include "llvm/TableGen/Error.h"
2425
#include "llvm/TableGen/Record.h"
2526
#include "llvm/TableGen/TableGenBackend.h"
@@ -701,11 +702,7 @@ static void emitEnumDecl(const Record &enumDef, raw_ostream &os) {
701702
StringRef underlyingToSymFnName = enumInfo.getUnderlyingToSymbolFnName();
702703
auto enumerants = enumInfo.getAllCases();
703704

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

710707
// Emit the enum class definition
711708
emitEnumClass(enumDef, enumName, underlyingType, description, enumerants, os);
@@ -766,8 +763,7 @@ class {1} : public ::mlir::{2} {
766763
os << formatv(attrClassDecl, enumName, attrClassName, baseAttrClassName);
767764
}
768765

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

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

791787
static void emitEnumDef(const Record &enumDef, raw_ostream &os) {
792788
EnumInfo enumInfo(enumDef);
793-
StringRef cppNamespace = enumInfo.getCppNamespace();
794789

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

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

811802
if (enumInfo.genSpecializedAttr())
812803
emitSpecializedAttrDef(enumDef, os);
813-
814-
for (auto ns : llvm::reverse(namespaces))
815-
os << "} // namespace " << ns << "\n";
816-
os << "\n";
817804
}
818805

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

mlir/tools/mlir-tblgen/OpInterfacesGen.cpp

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
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"
2223
#include "llvm/TableGen/Error.h"
2324
#include "llvm/TableGen/Record.h"
2425
#include "llvm/TableGen/TableGenBackend.h"
@@ -342,11 +343,7 @@ void InterfaceGenerator::emitModelDecl(const Interface &interface) {
342343
}
343344

344345
void InterfaceGenerator::emitModelMethodsDef(const Interface &interface) {
345-
llvm::SmallVector<StringRef, 2> namespaces;
346-
llvm::SplitString(interface.getCppNamespace(), namespaces, "::");
347-
for (StringRef ns : namespaces)
348-
os << "namespace " << ns << " {\n";
349-
346+
llvm::NamespaceEmitter ns(os, interface.getCppNamespace());
350347
for (auto &method : interface.getMethods()) {
351348
os << "template<typename " << valueTemplate << ">\n";
352349
emitCPPType(method.getReturnType(), os);
@@ -442,18 +439,11 @@ void InterfaceGenerator::emitModelMethodsDef(const Interface &interface) {
442439
method.isStatic() ? &ctx : &nonStaticMethodFmt);
443440
os << "\n}\n";
444441
}
445-
446-
for (StringRef ns : llvm::reverse(namespaces))
447-
os << "} // namespace " << ns << "\n";
448442
}
449443

450444
void InterfaceGenerator::emitInterfaceTraitDecl(const Interface &interface) {
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";
445+
auto cppNamespace = (interface.getCppNamespace() + "::detail").str();
446+
llvm::NamespaceEmitter ns(os, cppNamespace);
457447

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

506496
os << " };\n";
507-
os << "}// namespace detail\n";
508-
509-
for (StringRef ns : llvm::reverse(namespaces))
510-
os << "} // namespace " << ns << "\n";
511497
}
512498

513499
static void emitInterfaceDeclMethods(const Interface &interface,
@@ -533,10 +519,7 @@ static void emitInterfaceDeclMethods(const Interface &interface,
533519
}
534520

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

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

546529
StringRef interfaceName = interface.getName();
547530
os << "class " << interfaceName << ";\n";
548-
549-
for (StringRef ns : llvm::reverse(namespaces))
550-
os << "} // namespace " << ns << "\n";
551531
}
552532

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

559536
StringRef interfaceName = interface.getName();
560537
auto interfaceTraitsName = (interfaceName + "InterfaceTraits").str();
@@ -631,9 +608,6 @@ void InterfaceGenerator::emitInterfaceDecl(const Interface &interface) {
631608
}
632609

633610
os << "};\n";
634-
635-
for (StringRef ns : llvm::reverse(namespaces))
636-
os << "} // namespace " << ns << "\n";
637611
}
638612

639613
bool InterfaceGenerator::emitInterfaceDecls() {

mlir/tools/mlir-tblgen/SPIRVUtilsGen.cpp

Lines changed: 7 additions & 28 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-
StringRef cppNamespace = availability.getInterfaceClassNamespace();
263-
llvm::NamespaceEmitter nsEmitter(os, cppNamespace);
262+
llvm::NamespaceEmitter nsEmitter(os,
263+
availability.getInterfaceClassNamespace());
264264
os << "class " << interfaceName << ";\n\n";
265265

266266
// Emit the traits struct containing the concept and model declarations.
@@ -418,15 +418,9 @@ 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();
422421
auto enumerants = enumInfo.getAllCases();
423422

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

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

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

460451
static void emitEnumDef(const Record &enumDef, raw_ostream &os) {
461452
EnumInfo enumInfo(enumDef);
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";
453+
llvm::NamespaceEmitter ns(os, enumInfo.getCppNamespace());
469454

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

481461
static bool emitEnumDefs(const RecordKeeper &records, raw_ostream &os) {
482462
llvm::emitSourceFileHeader("SPIR-V Enum Availability Definitions", os,
483463
records);
484464

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

489468
return false;

0 commit comments

Comments
 (0)