Skip to content

[CodeGen] Remove MachinePassKey #79406

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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