[llvm] Revert "[CodeGen] Expose the extensibility of PassConfig to plugins" (PR #147947)
Jan Patrick Lehr via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 10 05:00:43 PDT 2025
https://github.com/jplehr created https://github.com/llvm/llvm-project/pull/147947
Reverts llvm/llvm-project#139059
This broke https://lab.llvm.org/buildbot/#/builders/10/builds/9125/steps/8/logs/stdio
The bot does a SHARED_LIBS=ON build. I can reproduce locally with the CMake cache file in offload/cmake/caches/AMDGPUBot.cmake as the build config.
>From de38c652c7c28eb0481cbea1374fe551b9a8f0e2 Mon Sep 17 00:00:00 2001
From: Jan Patrick Lehr <JanPatrick.Lehr at amd.com>
Date: Thu, 10 Jul 2025 14:00:26 +0200
Subject: [PATCH] Revert "[CodeGen] Expose the extensibility of PassConfig to
plugins (#139059)"
This reverts commit 56a8655f4a9c3992fd401dcf12b956f24f0e2606.
---
llvm/docs/WritingAnLLVMPass.rst | 22 ----
.../Target/RegisterTargetPassConfigCallback.h | 37 ------
llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp | 2 -
llvm/lib/Target/CMakeLists.txt | 1 -
.../RegisterTargetPassConfigCallback.cpp | 39 -------
llvm/test/Other/codegen-plugin-loading.ll | 7 --
.../CodeGen/CGPluginTest/CMakeLists.txt | 18 ---
.../CGPluginTest/Plugin/CMakeLists.txt | 17 ---
.../CGPluginTest/Plugin/CodeGenTestPass.cpp | 34 ------
.../CGPluginTest/Plugin/CodeGenTestPass.h | 33 ------
.../CodeGen/CGPluginTest/Plugin/Plugin.cpp | 26 -----
.../CodeGen/CGPluginTest/PluginTest.cpp | 105 ------------------
llvm/unittests/CodeGen/CMakeLists.txt | 1 -
13 files changed, 342 deletions(-)
delete mode 100644 llvm/include/llvm/Target/RegisterTargetPassConfigCallback.h
delete mode 100644 llvm/lib/Target/RegisterTargetPassConfigCallback.cpp
delete mode 100644 llvm/test/Other/codegen-plugin-loading.ll
delete mode 100644 llvm/unittests/CodeGen/CGPluginTest/CMakeLists.txt
delete mode 100644 llvm/unittests/CodeGen/CGPluginTest/Plugin/CMakeLists.txt
delete mode 100644 llvm/unittests/CodeGen/CGPluginTest/Plugin/CodeGenTestPass.cpp
delete mode 100644 llvm/unittests/CodeGen/CGPluginTest/Plugin/CodeGenTestPass.h
delete mode 100644 llvm/unittests/CodeGen/CGPluginTest/Plugin/Plugin.cpp
delete mode 100644 llvm/unittests/CodeGen/CGPluginTest/PluginTest.cpp
diff --git a/llvm/docs/WritingAnLLVMPass.rst b/llvm/docs/WritingAnLLVMPass.rst
index 9c2c38350701a..484227bac38b5 100644
--- a/llvm/docs/WritingAnLLVMPass.rst
+++ b/llvm/docs/WritingAnLLVMPass.rst
@@ -442,28 +442,6 @@ in certain circumstances (such as calling the ``Pass::dump()`` from a
debugger), so it should only be used to enhance debug output, it should not be
depended on.
-Scheduling a MachineFunctionPass
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Backends create a ``TargetPassConfig`` and use ``addPass`` to schedule
-``MachineFunctionPass``\ es. External plugins can register a callback to modify
-and insert additional passes:
-
-.. code-block:: c++
-
- RegisterTargetPassConfigCallback X{[](auto &TM, auto &PM, auto *TPC) {
- TPC->insertPass(/* ... */);
- TPC->substitutePass(/* ... */);
- }};
-
-Note that passes still have to be registered:
-
-.. code-block:: c++
-
- __attribute__((constructor)) static void initCodeGenPlugin() {
- initializeExamplePass(*PassRegistry::getPassRegistry());
- }
-
.. _writing-an-llvm-pass-interaction:
Specifying interactions between passes
diff --git a/llvm/include/llvm/Target/RegisterTargetPassConfigCallback.h b/llvm/include/llvm/Target/RegisterTargetPassConfigCallback.h
deleted file mode 100644
index d7c9cb21e15d4..0000000000000
--- a/llvm/include/llvm/Target/RegisterTargetPassConfigCallback.h
+++ /dev/null
@@ -1,37 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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 contains the registry for PassConfigCallbacks that enable changes
-/// to the TargetPassConfig during the initialization of TargetMachine.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TARGET_REGISTERTARGETPASSCONFIGCALLBACK_H
-#define LLVM_TARGET_REGISTERTARGETPASSCONFIGCALLBACK_H
-
-#include "TargetMachine.h"
-
-namespace llvm {
-
-using PassConfigCallback =
- std::function<void(TargetMachine &, PassManagerBase &, TargetPassConfig *)>;
-
-class RegisterTargetPassConfigCallback {
-public:
- PassConfigCallback Callback;
-
- explicit RegisterTargetPassConfigCallback(PassConfigCallback &&C);
- ~RegisterTargetPassConfigCallback();
-};
-
-void invokeGlobalTargetPassConfigCallbacks(TargetMachine &TM,
- PassManagerBase &PM,
- TargetPassConfig *PassConfig);
-} // namespace llvm
-
-#endif // LLVM_TARGET_REGISTERTARGETPASSCONFIGCALLBACK_H
diff --git a/llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp b/llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp
index 442ec38409307..e54419758410a 100644
--- a/llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp
+++ b/llvm/lib/CodeGen/CodeGenTargetMachineImpl.cpp
@@ -30,7 +30,6 @@
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/FormattedStream.h"
-#include "llvm/Target/RegisterTargetPassConfigCallback.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
using namespace llvm;
@@ -123,7 +122,6 @@ addPassesToGenerateCode(CodeGenTargetMachineImpl &TM, PassManagerBase &PM,
PassConfig->setDisableVerify(DisableVerify);
PM.add(PassConfig);
PM.add(&MMIWP);
- invokeGlobalTargetPassConfigCallbacks(TM, PM, PassConfig);
if (PassConfig->addISelPasses())
return nullptr;
diff --git a/llvm/lib/Target/CMakeLists.txt b/llvm/lib/Target/CMakeLists.txt
index e26e00ea3fdfd..f5f6f5386f899 100644
--- a/llvm/lib/Target/CMakeLists.txt
+++ b/llvm/lib/Target/CMakeLists.txt
@@ -3,7 +3,6 @@ list(APPEND LLVM_COMMON_DEPENDS intrinsics_gen)
list(APPEND LLVM_TABLEGEN_FLAGS -I ${LLVM_MAIN_SRC_DIR}/lib/Target)
add_llvm_component_library(LLVMTarget
- RegisterTargetPassConfigCallback.cpp
Target.cpp
TargetLoweringObjectFile.cpp
TargetMachine.cpp
diff --git a/llvm/lib/Target/RegisterTargetPassConfigCallback.cpp b/llvm/lib/Target/RegisterTargetPassConfigCallback.cpp
deleted file mode 100644
index a80b8b825b18a..0000000000000
--- a/llvm/lib/Target/RegisterTargetPassConfigCallback.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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 contains the registry for PassConfigCallbacks that enable changes
-/// to the TargetPassConfig during the initialization of TargetMachine.
-///
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Target/RegisterTargetPassConfigCallback.h"
-
-namespace llvm {
-// TargetPassConfig callbacks
-static SmallVector<RegisterTargetPassConfigCallback *, 1>
- TargetPassConfigCallbacks{};
-
-void invokeGlobalTargetPassConfigCallbacks(TargetMachine &TM,
- PassManagerBase &PM,
- TargetPassConfig *PassConfig) {
- for (const RegisterTargetPassConfigCallback *Reg : TargetPassConfigCallbacks)
- Reg->Callback(TM, PM, PassConfig);
-}
-
-RegisterTargetPassConfigCallback::RegisterTargetPassConfigCallback(
- PassConfigCallback &&C)
- : Callback(std::move(C)) {
- TargetPassConfigCallbacks.push_back(this);
-}
-
-RegisterTargetPassConfigCallback::~RegisterTargetPassConfigCallback() {
- const auto &It = find(TargetPassConfigCallbacks, this);
- if (It != TargetPassConfigCallbacks.end())
- TargetPassConfigCallbacks.erase(It);
-}
-} // namespace llvm
diff --git a/llvm/test/Other/codegen-plugin-loading.ll b/llvm/test/Other/codegen-plugin-loading.ll
deleted file mode 100644
index 652bbcdef36c3..0000000000000
--- a/llvm/test/Other/codegen-plugin-loading.ll
+++ /dev/null
@@ -1,7 +0,0 @@
-; RUN: llc -load %llvmshlibdir/../unittests/CodeGen/CGPluginTest/CGTestPlugin%pluginext %s -o - | FileCheck %s
-; REQUIRES: native, system-linux, llvm-dylib
-
-; CHECK: CodeGen Test Pass running on main
-define void @main() {
- ret void
-}
diff --git a/llvm/unittests/CodeGen/CGPluginTest/CMakeLists.txt b/llvm/unittests/CodeGen/CGPluginTest/CMakeLists.txt
deleted file mode 100644
index 51ef85ab279cd..0000000000000
--- a/llvm/unittests/CodeGen/CGPluginTest/CMakeLists.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-set(LLVM_LINK_COMPONENTS
- ${LLVM_TARGETS_TO_BUILD}
- Support
- Core
- Target
- CodeGen
- )
-
-add_llvm_unittest(CGPluginTest
- PluginTest.cpp
- Plugin/CodeGenTestPass.cpp
-
- EXPORT_SYMBOLS
- )
-target_link_libraries(CGPluginTest PRIVATE LLVMTestingSupport)
-
-unset(LLVM_LINK_COMPONENTS)
-add_subdirectory(Plugin)
diff --git a/llvm/unittests/CodeGen/CGPluginTest/Plugin/CMakeLists.txt b/llvm/unittests/CodeGen/CGPluginTest/Plugin/CMakeLists.txt
deleted file mode 100644
index 04f7738507b0d..0000000000000
--- a/llvm/unittests/CodeGen/CGPluginTest/Plugin/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-if (NOT WIN32 AND NOT CYGWIN)
- unset(LLVM_LINK_COMPONENTS)
- add_llvm_library(CGTestPlugin MODULE BUILDTREE_ONLY
- CodeGenTestPass.cpp
- Plugin.cpp
- )
-
- # Put PLUGIN next to the unit test executable.
- set_output_directory(CGTestPlugin
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/../
- LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/../
- )
- set_target_properties(CGTestPlugin PROPERTIES FOLDER "Tests")
-
- add_dependencies(CGTestPlugin intrinsics_gen vt_gen)
- add_dependencies(CGPluginTest CGTestPlugin)
-endif ()
diff --git a/llvm/unittests/CodeGen/CGPluginTest/Plugin/CodeGenTestPass.cpp b/llvm/unittests/CodeGen/CGPluginTest/Plugin/CodeGenTestPass.cpp
deleted file mode 100644
index 990d23258891f..0000000000000
--- a/llvm/unittests/CodeGen/CGPluginTest/Plugin/CodeGenTestPass.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#include "CodeGenTestPass.h"
-
-#include "llvm/CodeGen/MachineFrameInfo.h"
-#include "llvm/CodeGen/MachineFunctionPass.h"
-
-using namespace llvm;
-
-#define DEBUG_TYPE "codegen-test"
-#define CODEGEN_TEST_NAME "CodeGen Test Pass"
-
-CodeGenTest::CodeGenTest() : MachineFunctionPass(ID) {}
-
-bool CodeGenTest::runOnMachineFunction(MachineFunction &MF) {
- outs() << CODEGEN_TEST_NAME << " running on " << MF.getName()
- << "\n"; // used for the lit test
- if (RunCallback)
- RunCallback();
- return true;
-}
-
-StringRef CodeGenTest::getPassName() const { return CODEGEN_TEST_NAME; }
-
-char CodeGenTest::ID = 0;
-std::function<void()> CodeGenTest::RunCallback;
-
-INITIALIZE_PASS(CodeGenTest, DEBUG_TYPE, CODEGEN_TEST_NAME, false, false)
diff --git a/llvm/unittests/CodeGen/CGPluginTest/Plugin/CodeGenTestPass.h b/llvm/unittests/CodeGen/CGPluginTest/Plugin/CodeGenTestPass.h
deleted file mode 100644
index 8eaf6d5339657..0000000000000
--- a/llvm/unittests/CodeGen/CGPluginTest/Plugin/CodeGenTestPass.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef CODEGEN_TEST_PASS
-#define CODEGEN_TEST_PASS
-
-#include <llvm/CodeGen/MachineFunctionPass.h>
-
-using namespace llvm;
-
-namespace llvm {
-void initializeCodeGenTestPass(PassRegistry &);
-} // namespace llvm
-
-class CodeGenTest : public MachineFunctionPass {
-public:
- static char ID;
-
- CodeGenTest();
-
- bool runOnMachineFunction(MachineFunction &MF) override;
-
- StringRef getPassName() const override;
-
- static std::function<void()> RunCallback;
-};
-
-#endif // CODEGEN_TEST_PASS
diff --git a/llvm/unittests/CodeGen/CGPluginTest/Plugin/Plugin.cpp b/llvm/unittests/CodeGen/CGPluginTest/Plugin/Plugin.cpp
deleted file mode 100644
index ca2f1b929f633..0000000000000
--- a/llvm/unittests/CodeGen/CGPluginTest/Plugin/Plugin.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#include "CodeGenTestPass.h"
-
-#include <llvm/CodeGen/Passes.h>
-#include <llvm/CodeGen/TargetPassConfig.h>
-#include <llvm/Target/RegisterTargetPassConfigCallback.h>
-
-using namespace llvm;
-
-namespace {
-[[maybe_unused]] RegisterTargetPassConfigCallback X{
- [](auto &TM, auto &PM, auto *TPC) {
- TPC->insertPass(&GCLoweringID, &CodeGenTest::ID);
- }};
-} // namespace
-
-__attribute__((constructor)) static void initCodeGenPlugin() {
- initializeCodeGenTestPass(*PassRegistry::getPassRegistry());
-}
diff --git a/llvm/unittests/CodeGen/CGPluginTest/PluginTest.cpp b/llvm/unittests/CodeGen/CGPluginTest/PluginTest.cpp
deleted file mode 100644
index bb8bea6d2e084..0000000000000
--- a/llvm/unittests/CodeGen/CGPluginTest/PluginTest.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#include "Plugin/CodeGenTestPass.h"
-
-#include "llvm/CodeGen/MachineModuleInfo.h"
-#include "llvm/CodeGen/Passes.h"
-#include "llvm/CodeGen/TargetPassConfig.h"
-#include "llvm/Config/config.h"
-#include "llvm/IR/LegacyPassManager.h"
-#include "llvm/MC/TargetRegistry.h"
-#include "llvm/Support/DynamicLibrary.h"
-#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/TargetSelect.h"
-#include "llvm/Target/RegisterTargetPassConfigCallback.h"
-#include "llvm/Target/TargetMachine.h"
-
-#include "gtest/gtest.h"
-
-using namespace llvm;
-
-namespace {
-void anchor() {}
-
-std::string libPath(const std::string &Name) {
- const auto &Argvs = testing::internal::GetArgvs();
- const char *Argv0 = Argvs.size() > 0 ? Argvs[0].c_str() : "CGPluginTest";
- void *Ptr = (void *)(intptr_t)anchor;
- std::string Path = sys::fs::getMainExecutable(Argv0, Ptr);
- SmallString<256> Buf{sys::path::parent_path(Path)};
- sys::path::append(Buf, (Name + LLVM_PLUGIN_EXT).c_str());
- return std::string(Buf.str());
-}
-} // namespace
-
-namespace llvm {
-class CGPluginTests : public testing::Test {
-protected:
- static void SetUpTestCase() {
- InitializeAllTargetMCs();
- InitializeAllTargetInfos();
- InitializeAllTargets();
- }
-};
-} // namespace llvm
-
-TEST_F(CGPluginTests, LoadPlugin) {
-#if !defined(LLVM_ENABLE_PLUGINS)
- // Skip the test if plugins are disabled.
- GTEST_SKIP();
-#endif
-
- auto PluginPath = libPath("CGTestPlugin");
- ASSERT_NE("", PluginPath);
-
- std::string Error;
- auto Library = sys::DynamicLibrary::getLibrary(PluginPath.c_str(), &Error);
- ASSERT_TRUE(Library.isValid()) << Error;
- sys::DynamicLibrary::closeLibrary(Library);
-}
-
-TEST_F(CGPluginTests, ExecuteCallback) {
-#if !defined(LLVM_ENABLE_PLUGINS)
- // Skip the test if plugins are disabled.
- GTEST_SKIP();
-#endif
-
- volatile bool CallbackExecuted = false;
- volatile bool MPassExecuted = false;
-
- RegisterTargetPassConfigCallback X{[&](auto &TM, auto &PM, auto *TPC) {
- CallbackExecuted = true;
- TPC->insertPass(&GCLoweringID, &CodeGenTest::ID);
- }};
-
- CodeGenTest::RunCallback = [&] { MPassExecuted = true; };
-
- TargetOptions Options;
- std::unique_ptr<MCContext> MCC;
- for (auto T : TargetRegistry::targets()) {
- if (!T.hasTargetMachine())
- continue;
- Triple TT{T.getName(), "", ""};
- auto *TM = T.createTargetMachine(TT, "", "", Options, std::nullopt,
- std::nullopt, CodeGenOptLevel::Default);
- ASSERT_TRUE(TM);
-
- legacy::PassManager PM;
- MCC.reset(new MCContext(TT, TM->getMCAsmInfo(), TM->getMCRegisterInfo(),
- TM->getMCSubtargetInfo()));
- auto *PtrMCC = MCC.get();
- CallbackExecuted = false;
- MPassExecuted = false;
- if (TM->addPassesToEmitMC(PM, PtrMCC, outs()) == true)
- continue;
- ASSERT_TRUE(CallbackExecuted) << T.getName() << " callback failed";
- ASSERT_TRUE(MPassExecuted) << T.getName() << " MachinePass failed";
- }
-}
diff --git a/llvm/unittests/CodeGen/CMakeLists.txt b/llvm/unittests/CodeGen/CMakeLists.txt
index d19b122676c9b..8b025219c46cf 100644
--- a/llvm/unittests/CodeGen/CMakeLists.txt
+++ b/llvm/unittests/CodeGen/CMakeLists.txt
@@ -51,6 +51,5 @@ add_llvm_unittest(CodeGenTests
)
add_subdirectory(GlobalISel)
-add_subdirectory(CGPluginTest)
target_link_libraries(CodeGenTests PRIVATE LLVMTestingSupport)
More information about the llvm-commits
mailing list