[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