diff --git a/llvm/include/llvm/CodeGen/MachinePassManager.h b/llvm/include/llvm/CodeGen/MachinePassManager.h index a2641a8223646..662b7e8689717 100644 --- a/llvm/include/llvm/CodeGen/MachinePassManager.h +++ b/llvm/include/llvm/CodeGen/MachinePassManager.h @@ -37,20 +37,13 @@ class MachineFunction; extern template class AnalysisManager; -/// 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 struct MachinePassInfoMixin : public PassInfoMixin { - static MachinePassKey *ID() { - static_assert(std::is_base_of::value, - "Must pass the derived type as the template argument!"); - return &DerivedT::Key; - } + // TODO: Add MachineFunctionProperties support. }; /// An AnalysisManager that also exposes IR analysis results. diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h index 07afac3bcf840..c5c53a5bccae7 100644 --- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h +++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h @@ -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 { \ @@ -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 { \ @@ -164,8 +162,6 @@ template class CodeGenPassBuilder { } protected: - template using has_key_t = decltype(PassT::Key); - template using is_module_pass_t = decltype(std::declval().run( std::declval(), std::declval())); @@ -225,10 +221,6 @@ template class CodeGenPassBuilder { : PM(PM), PB(PB) {} template void operator()(PassT &&Pass) { - static_assert( - is_detected::value, - "Machine function pass must define a static member variable `Key`."); - if (!PB.runBeforeAdding(PassT::name())) return; @@ -238,10 +230,10 @@ template class CodeGenPassBuilder { C(PassT::name()); } - template void insertPass(MachinePassKey *ID, PassT Pass) { + template 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)); }); } diff --git a/llvm/lib/Passes/CodeGenPassBuilder.cpp b/llvm/lib/Passes/CodeGenPassBuilder.cpp index c0319e5d6e404..927727cba6fc6 100644 --- a/llvm/lib/Passes/CodeGenPassBuilder.cpp +++ b/llvm/lib/Passes/CodeGenPassBuilder.cpp @@ -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" diff --git a/llvm/unittests/MIR/PassBuilderCallbacksTest.cpp b/llvm/unittests/MIR/PassBuilderCallbacksTest.cpp index 5ab4df1c26df3..88522d45bc6bf 100644 --- a/llvm/unittests/MIR/PassBuilderCallbacksTest.cpp +++ b/llvm/unittests/MIR/PassBuilderCallbacksTest.cpp @@ -248,7 +248,6 @@ template class MockPassHandleBase { } public: - static MachinePassKey Key; PreservedAnalyses run(MachineFunction &IR, MachineFunctionAnalysisManager::Base &AM) { return Handle->run(IR, AM); @@ -279,9 +278,6 @@ struct MockAnalysisHandle : public MockAnalysisHandleBase { MockAnalysisHandle() { setDefaults(); } }; -template -MachinePassKey MockPassHandleBase::Pass::Key; - template AnalysisKey MockAnalysisHandleBase::Analysis::Key;