[llvm] [TableGen] Change callback function to require const RecordKeeper (PR #111064)
Rahul Joshi via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 3 14:10:46 PDT 2024
https://github.com/jurahul created https://github.com/llvm/llvm-project/pull/111064
Change TableGen backend callback function to require a const RecordKeeper argument (by changing it from function_ref to just a function pointer). This undoes parts of https://github.com/llvm/llvm-project/pull/104716 which was added to enable gradual migration of TableGen backends to use const RecordKeeper (by allowing either const or non-const references). Now that all backends have been migrated to const reference, we do not need this.
>From 00ebf336642be11f34e10df871dfb2bb2826c476 Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Thu, 3 Oct 2024 14:00:32 -0700
Subject: [PATCH] [TableGen] Change callback function to require const
RecordKeeper
Change TableGen backend callback function to require a const
RecordKeeper argument (by changing it from function_ref to just a
function pointer). This undoes parts of
https://github.com/llvm/llvm-project/pull/104716 which was added to
enable gradual migration of TableGen backends to use const RecordKeeper
(by allowing either const or non-const references). Now that all
backends have been migrated to const reference, we do not need this.
---
llvm/include/llvm/TableGen/TableGenBackend.h | 9 +++++----
llvm/lib/TableGen/TableGenBackend.cpp | 19 +------------------
2 files changed, 6 insertions(+), 22 deletions(-)
diff --git a/llvm/include/llvm/TableGen/TableGenBackend.h b/llvm/include/llvm/TableGen/TableGenBackend.h
index 80134179850b0e..7a6171c58749fd 100644
--- a/llvm/include/llvm/TableGen/TableGenBackend.h
+++ b/llvm/include/llvm/TableGen/TableGenBackend.h
@@ -23,8 +23,7 @@ class RecordKeeper;
class raw_ostream;
namespace TableGen::Emitter {
-// Supports const and non-const forms of callback functions.
-using FnT = function_ref<void(RecordKeeper &Records, raw_ostream &OS)>;
+using FnT = void (*)(const RecordKeeper &Records, raw_ostream &OS);
/// Creating an `Opt` object registers the command line option \p Name with
/// TableGen backend and associates the callback \p CB with that option. If
@@ -37,7 +36,9 @@ struct Opt {
/// Convienence wrapper around `Opt` that registers `EmitterClass::run` as the
/// callback.
template <class EmitterC> class OptClass : Opt {
- static void run(RecordKeeper &RK, raw_ostream &OS) { EmitterC(RK).run(OS); }
+ static void run(const RecordKeeper &RK, raw_ostream &OS) {
+ EmitterC(RK).run(OS);
+ }
public:
OptClass(StringRef Name, StringRef Desc) : Opt(Name, run, Desc) {}
@@ -45,7 +46,7 @@ template <class EmitterC> class OptClass : Opt {
/// Apply callback for any command line option registered above. Returns false
/// is no callback was applied.
-bool ApplyCallback(RecordKeeper &Records, raw_ostream &OS);
+bool ApplyCallback(const RecordKeeper &Records, raw_ostream &OS);
} // namespace TableGen::Emitter
diff --git a/llvm/lib/TableGen/TableGenBackend.cpp b/llvm/lib/TableGen/TableGenBackend.cpp
index 210fff65458627..70fccd7671e96d 100644
--- a/llvm/lib/TableGen/TableGenBackend.cpp
+++ b/llvm/lib/TableGen/TableGenBackend.cpp
@@ -25,23 +25,6 @@ using namespace TableGen::Emitter;
const size_t MAX_LINE_LEN = 80U;
-// CommandLine options of class type are not directly supported with some
-// specific exceptions like std::string which are safe to copy. In our case,
-// the `FnT` function_ref object is also safe to copy. So provide a
-// specialization of `OptionValue` for `FnT` type that stores it as a copy.
-// This is essentially similar to OptionValue<std::string> specialization for
-// strings.
-template <> struct cl::OptionValue<FnT> final : cl::OptionValueCopy<FnT> {
- OptionValue() = default;
-
- OptionValue(const FnT &V) { this->setValue(V); }
-
- OptionValue<FnT> &operator=(const FnT &V) {
- setValue(V);
- return *this;
- }
-};
-
namespace {
struct OptCreatorT {
static void *call() {
@@ -60,7 +43,7 @@ Opt::Opt(StringRef Name, FnT CB, StringRef Desc, bool ByDefault) {
/// Apply callback specified on the command line. Returns true if no callback
/// was applied.
-bool llvm::TableGen::Emitter::ApplyCallback(RecordKeeper &Records,
+bool llvm::TableGen::Emitter::ApplyCallback(const RecordKeeper &Records,
raw_ostream &OS) {
FnT Fn = CallbackFunction->getValue();
if (!Fn)
More information about the llvm-commits
mailing list