[Mlir-commits] [llvm] [mlir] [NFC][TableGen] Migrate IfDef/Namespace emitter from MLIR to LLVM (PR #161744)

Rahul Joshi llvmlistbot at llvm.org
Thu Oct 2 15:38:20 PDT 2025


================
@@ -0,0 +1,67 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines common utilities for generating C++ code.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TABLEGEN_CODEGENHELPERS_H
+#define LLVM_TABLEGEN_CODEGENHELPERS_H
+
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringExtras.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+#include <string>
+
+namespace llvm {
+// Simple RAII helper for emitting ifdef-undef-endif scope.
+class IfDefEmitter {
+public:
+  IfDefEmitter(raw_ostream &OS, StringRef Name) : Name(Name.str()), OS(OS) {
+    OS << "#ifdef " << Name << "\n"
+       << "#undef " << Name << "\n\n";
+  }
+  ~IfDefEmitter() { OS << "\n#endif // " << Name << "\n\n"; }
+
+private:
+  std::string Name;
+  raw_ostream &OS;
+};
+
+// Simple RAII helper for emitting namespace scope. Name can be a single
+// namespace (empty for anonymous namespace) or nested namespace. If Valid is
+// false, acts as a NOP (does not emit anything).
+class NamespaceEmitter {
+public:
+  NamespaceEmitter(raw_ostream &OS, StringRef Name, bool Valid = true)
+      : OS(OS) {
+    if (!Valid)
+      return;
+    emitNamespaceStarts(Name);
+  }
+
+  ~NamespaceEmitter() {
+    for (StringRef NS : llvm::reverse(Namespaces))
----------------
jurahul wrote:

A follow-on improvement would be to get rid of this namespace parsing and emit this directly using C++17 nested namespace definition.

https://github.com/llvm/llvm-project/pull/161744


More information about the Mlir-commits mailing list