Skip to content

Commit

Permalink
[CodeGen] Remove MachinePassKey (#79406)
Browse files Browse the repository at this point in the history
We now use PassT::name to distinguish Passes.
  • Loading branch information
paperchalice committed Jan 25, 2024
1 parent f7a615a commit 122ed55
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 28 deletions.
9 changes: 1 addition & 8 deletions llvm/include/llvm/CodeGen/MachinePassManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,13 @@ class MachineFunction;

extern template class AnalysisManager<MachineFunction>;

/// Like \c AnalysisKey, but only for machine passes.
struct alignas(8) MachinePassKey {};

/// A CRTP mix-in that provides informational APIs needed for machine passes.
///
/// This provides some boilerplate for types that are machine passes. It
/// automatically mixes in \c PassInfoMixin.
template <typename DerivedT>
struct MachinePassInfoMixin : public PassInfoMixin<DerivedT> {
static MachinePassKey *ID() {
static_assert(std::is_base_of<MachinePassInfoMixin, DerivedT>::value,
"Must pass the derived type as the template argument!");
return &DerivedT::Key;
}
// TODO: Add MachineFunctionProperties support.
};

/// An AnalysisManager<MachineFunction> that also exposes IR analysis results.
Expand Down
14 changes: 3 additions & 11 deletions llvm/include/llvm/Passes/CodeGenPassBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ namespace llvm {
MachineFunctionAnalysisManager &) { \
llvm_unreachable("this api is to make new PM api happy"); \
} \
static MachinePassKey Key; \
};
#define DUMMY_MACHINE_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) \
struct PASS_NAME : public MachinePassInfoMixin<PASS_NAME> { \
Expand All @@ -103,7 +102,6 @@ namespace llvm {
MachineFunctionAnalysisManager &) { \
return PreservedAnalyses::all(); \
} \
static MachinePassKey Key; \
};
#define DUMMY_MACHINE_FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) \
struct PASS_NAME : public AnalysisInfoMixin<PASS_NAME> { \
Expand Down Expand Up @@ -164,8 +162,6 @@ template <typename DerivedT> class CodeGenPassBuilder {
}

protected:
template <typename PassT> using has_key_t = decltype(PassT::Key);

template <typename PassT>
using is_module_pass_t = decltype(std::declval<PassT &>().run(
std::declval<Module &>(), std::declval<ModuleAnalysisManager &>()));
Expand Down Expand Up @@ -225,10 +221,6 @@ template <typename DerivedT> class CodeGenPassBuilder {
: PM(PM), PB(PB) {}

template <typename PassT> void operator()(PassT &&Pass) {
static_assert(
is_detected<has_key_t, PassT>::value,
"Machine function pass must define a static member variable `Key`.");

if (!PB.runBeforeAdding(PassT::name()))
return;

Expand All @@ -238,10 +230,10 @@ template <typename DerivedT> class CodeGenPassBuilder {
C(PassT::name());
}

template <typename PassT> void insertPass(MachinePassKey *ID, PassT Pass) {
template <typename PassT> void insertPass(StringRef PassName, PassT Pass) {
PB.AfterCallbacks.emplace_back(
[this, ID, Pass = std::move(Pass)](MachinePassKey *PassID) {
if (PassID == ID)
[this, PassName, Pass = std::move(Pass)](StringRef Name) {
if (PassName == Name)
this->PM.addPass(std::move(Pass));
});
}
Expand Down
5 changes: 0 additions & 5 deletions llvm/lib/Passes/CodeGenPassBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,6 @@
using namespace llvm;

namespace llvm {
#define DUMMY_MACHINE_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR) \
MachinePassKey PASS_NAME::Key;
#include "llvm/Passes/MachinePassRegistry.def"
#define DUMMY_MACHINE_FUNCTION_PASS(NAME, PASS_NAME, CONSTRUCTOR) \
MachinePassKey PASS_NAME::Key;
#define DUMMY_MACHINE_FUNCTION_ANALYSIS(NAME, PASS_NAME, CONSTRUCTOR) \
AnalysisKey PASS_NAME::Key;
#include "llvm/Passes/MachinePassRegistry.def"
Expand Down
4 changes: 0 additions & 4 deletions llvm/unittests/MIR/PassBuilderCallbacksTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,6 @@ template <typename DerivedT> class MockPassHandleBase {
}

public:
static MachinePassKey Key;
PreservedAnalyses run(MachineFunction &IR,
MachineFunctionAnalysisManager::Base &AM) {
return Handle->run(IR, AM);
Expand Down Expand Up @@ -279,9 +278,6 @@ struct MockAnalysisHandle : public MockAnalysisHandleBase<MockAnalysisHandle> {
MockAnalysisHandle() { setDefaults(); }
};

template <typename DerivedT>
MachinePassKey MockPassHandleBase<DerivedT>::Pass::Key;

template <typename DerivedT>
AnalysisKey MockAnalysisHandleBase<DerivedT>::Analysis::Key;

Expand Down

0 comments on commit 122ed55

Please sign in to comment.