[llvm] r329276 - Revert "[Plugins] Add a slim plugin API to work together with the new PM"
Philip Pfaffe via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 5 05:42:12 PDT 2018
Author: pfaffe
Date: Thu Apr 5 05:42:12 2018
New Revision: 329276
URL: http://llvm.org/viewvc/llvm-project?rev=329276&view=rev
Log:
Revert "[Plugins] Add a slim plugin API to work together with the new PM"
This reverts commit ecf3ba1ab45edb1b0fadce716a7facf50dca4fbb/r329273.
Removed:
llvm/trunk/include/llvm/Passes/PassPlugin.h
llvm/trunk/lib/Passes/PassPlugin.cpp
llvm/trunk/unittests/Passes/CMakeLists.txt
llvm/trunk/unittests/Passes/PluginsTest.cpp
llvm/trunk/unittests/Passes/TestPlugin.cxx
llvm/trunk/unittests/Passes/TestPlugin.h
Modified:
llvm/trunk/include/llvm/Demangle/Compiler.h
llvm/trunk/include/llvm/Support/Compiler.h
llvm/trunk/lib/Passes/CMakeLists.txt
llvm/trunk/tools/opt/NewPMDriver.cpp
llvm/trunk/unittests/CMakeLists.txt
Modified: llvm/trunk/include/llvm/Demangle/Compiler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Demangle/Compiler.h?rev=329276&r1=329275&r2=329276&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Demangle/Compiler.h (original)
+++ llvm/trunk/include/llvm/Demangle/Compiler.h Thu Apr 5 05:42:12 2018
@@ -503,22 +503,4 @@ void AnnotateIgnoreWritesEnd(const char
#define LLVM_ENABLE_EXCEPTIONS 1
#endif
-/// \macro LLVM_PLUGIN_IMPORT
-/// \brief Used to import the well-known entry point for registering loaded pass
-/// plugins
-#ifdef WIN32
-#define LLVM_PLUGIN_IMPORT __declspec(dllimport)
-#else
-#define LLVM_PLUGIN_IMPORT
-#endif
-
-/// \macro LLVM_PLUGIN_EXPORT
-/// \brief Used to export the well-known entry point for registering loaded pass
-/// plugins
-#ifdef WIN32
-#define LLVM_PLUGIN_EXPORT __declspec(dllexport)
-#else
-#define LLVM_PLUGIN_EXPORT
-#endif
-
#endif
Removed: llvm/trunk/include/llvm/Passes/PassPlugin.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Passes/PassPlugin.h?rev=329275&view=auto
==============================================================================
--- llvm/trunk/include/llvm/Passes/PassPlugin.h (original)
+++ llvm/trunk/include/llvm/Passes/PassPlugin.h (removed)
@@ -1,114 +0,0 @@
-//===- llvm/Passes/PassPlugin.h - Public Plugin API -----------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This defines the public entry point for new-PM pass plugins.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_PASSES_PASSPLUGIN_H
-#define LLVM_PASSES_PASSPLUGIN_H
-
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/Compiler.h"
-#include "llvm/Support/DynamicLibrary.h"
-#include "llvm/Support/Error.h"
-#include <cstdint>
-#include <string>
-
-namespace llvm {
-class PassBuilder;
-
-/// \macro LLVM_PLUGIN_API_VERSION
-/// Identifies the API version understood by this plugin.
-///
-/// When a plugin is loaded, the driver will check it's supported plugin version
-/// against that of the plugin. A mismatch is an error. The supported version
-/// will be incremented for ABI-breaking changes to the \c PassPluginLibraryInfo
-/// struct, i.e. when callbacks are added, removed, or reordered.
-#define LLVM_PLUGIN_API_VERSION 1
-
-extern "C" {
-/// Information about the plugin required to load its passes
-///
-/// This struct defines the core interface for pass plugins and is supposed to
-/// be filled out by plugin implementors. LLVM-side users of a plugin are
-/// expected to use the \c PassPlugin class below to interface with it.
-struct PassPluginLibraryInfo {
- /// The API version understood by this plugin, usually \c
- /// LLVM_PLUGIN_API_VERSION
- uint32_t APIVersion;
- /// A meaningful name of the plugin.
- const char *PluginName;
- /// The version of the plugin.
- const char *PluginVersion;
-
- /// The callback for registering plugin passes with a \c PassBuilder
- /// instance
- void (*RegisterPassBuilderCallbacks)(PassBuilder &);
-};
-}
-
-/// A loaded pass plugin.
-///
-/// An instance of this class wraps a loaded pass plugin and gives access to
-/// its interface defined by the \c PassPluginLibraryInfo it exposes.
-class PassPlugin {
-public:
- /// Attempts to load a pass plugin from a given file.
- ///
- /// \returns Returns an error if either the library cannot be found or loaded,
- /// there is no public entry point, or the plugin implements the wrong API
- /// version.
- static Expected<PassPlugin> Load(const std::string &Filename);
-
- /// Get the filename of the loaded plugin.
- StringRef getFilename() const { return Filename; }
-
- /// Get the plugin name
- StringRef getPluginName() const { return Info.PluginName; }
-
- /// Get the plugin version
- StringRef getPluginVersion() const { return Info.PluginVersion; }
-
- /// Get the plugin API version
- uint32_t getAPIVersion() const { return Info.APIVersion; }
-
- /// Invoke the PassBuilder callback registration
- void registerPassBuilderCallbacks(PassBuilder &PB) const {
- Info.RegisterPassBuilderCallbacks(PB);
- }
-
-private:
- PassPlugin(const std::string &Filename, const sys::DynamicLibrary &Library)
- : Filename(Filename), Library(Library), Info() {}
-
- std::string Filename;
- sys::DynamicLibrary Library;
- PassPluginLibraryInfo Info;
-};
-}
-
-/// The public entry point for a pass plugin.
-///
-/// When a plugin is loaded by the driver, it will call this entry point to
-/// obtain information about this plugin and about how to register its passes.
-/// This function needs to be implemented by the plugin, see the example below:
-///
-/// ```
-/// extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK
-/// LLVM_PLUGIN_EXPORT llvmGetPassPluginInfo() {
-/// return {
-/// LLVM_PLUGIN_API_VERSION, "MyPlugin", "v0.1", [](PassBuilder &PB) { ... }
-/// };
-/// }
-/// ```
-extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK LLVM_PLUGIN_IMPORT
-llvmGetPassPluginInfo();
-
-#endif /* LLVM_PASSES_PASSPLUGIN_H */
Modified: llvm/trunk/include/llvm/Support/Compiler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=329276&r1=329275&r2=329276&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/Compiler.h (original)
+++ llvm/trunk/include/llvm/Support/Compiler.h Thu Apr 5 05:42:12 2018
@@ -16,5 +16,4 @@
//
//===----------------------------------------------------------------------===//
-
#include "llvm/Demangle/Compiler.h"
Modified: llvm/trunk/lib/Passes/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/CMakeLists.txt?rev=329276&r1=329275&r2=329276&view=diff
==============================================================================
--- llvm/trunk/lib/Passes/CMakeLists.txt (original)
+++ llvm/trunk/lib/Passes/CMakeLists.txt Thu Apr 5 05:42:12 2018
@@ -1,6 +1,5 @@
add_llvm_library(LLVMPasses
PassBuilder.cpp
- PassPlugin.cpp
ADDITIONAL_HEADER_DIRS
${LLVM_MAIN_INCLUDE_DIR}/llvm/Passes
Removed: llvm/trunk/lib/Passes/PassPlugin.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassPlugin.cpp?rev=329275&view=auto
==============================================================================
--- llvm/trunk/lib/Passes/PassPlugin.cpp (original)
+++ llvm/trunk/lib/Passes/PassPlugin.cpp (removed)
@@ -1,50 +0,0 @@
-//===- lib/Passes/PassPluginLoader.cpp - Load Plugins for New PM Passes ---===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Passes/PassPlugin.h"
-#include "llvm/Support/raw_ostream.h"
-
-using namespace llvm;
-
-Expected<PassPlugin> PassPlugin::Load(const std::string &Filename) {
- std::string Error;
- auto Library =
- sys::DynamicLibrary::getPermanentLibrary(Filename.c_str(), &Error);
- if (!Library.isValid())
- return make_error<StringError>(Twine("Could not load library '") +
- Filename + "': " + Error,
- inconvertibleErrorCode());
-
- PassPlugin P{Filename, Library};
- auto *getDetailsFn =
- Library.SearchForAddressOfSymbol("llvmGetPassPluginInfo");
-
- if (!getDetailsFn)
- // If the symbol isn't found, this is probably a legacy plugin, which is an
- // error
- return make_error<StringError>(Twine("Plugin entry point not found in '") +
- Filename + "'. Is this a legacy plugin?",
- inconvertibleErrorCode());
-
- P.Info = reinterpret_cast<decltype(llvmGetPassPluginInfo) *>(getDetailsFn)();
-
- if (P.Info.APIVersion != LLVM_PLUGIN_API_VERSION)
- return make_error<StringError>(
- Twine("Wrong API version on plugin '") + Filename + "'. Got version " +
- Twine(P.Info.APIVersion) + ", supported version is " +
- Twine(LLVM_PLUGIN_API_VERSION) + ".",
- inconvertibleErrorCode());
-
- if (!P.Info.RegisterPassBuilderCallbacks)
- return make_error<StringError>(Twine("Empty entry callback in plugin '") +
- Filename + "'.'",
- inconvertibleErrorCode());
-
- return P;
-}
Modified: llvm/trunk/tools/opt/NewPMDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/opt/NewPMDriver.cpp?rev=329276&r1=329275&r2=329276&view=diff
==============================================================================
--- llvm/trunk/tools/opt/NewPMDriver.cpp (original)
+++ llvm/trunk/tools/opt/NewPMDriver.cpp Thu Apr 5 05:42:12 2018
@@ -27,7 +27,6 @@
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Passes/PassBuilder.h"
-#include "llvm/Passes/PassPlugin.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ToolOutputFile.h"
@@ -42,10 +41,6 @@ static cl::opt<bool>
DebugPM("debug-pass-manager", cl::Hidden,
cl::desc("Print pass management debugging information"));
-static cl::list<std::string>
- PassPlugins("load-pass-plugin",
- cl::desc("Load passes from plugin library"));
-
// This flag specifies a textual description of the alias analysis pipeline to
// use when querying for aliasing information. It only works in concert with
// the "passes" flag above.
@@ -215,18 +210,6 @@ bool llvm::runPassPipeline(StringRef Arg
PassBuilder PB(TM, P);
registerEPCallbacks(PB, VerifyEachPass, DebugPM);
- // Load requested pass plugins and let them register pass builder callbacks
- for (auto &PluginFN : PassPlugins) {
- auto PassPlugin = PassPlugin::Load(PluginFN);
- if (!PassPlugin) {
- errs() << "Failed to load passes from '" << PluginFN
- << "'. Request ignored.\n";
- continue;
- }
-
- PassPlugin->registerPassBuilderCallbacks(PB);
- }
-
// Register a callback that creates the debugify passes as needed.
PB.registerPipelineParsingCallback(
[](StringRef Name, ModulePassManager &MPM,
Modified: llvm/trunk/unittests/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/CMakeLists.txt?rev=329276&r1=329275&r2=329276&view=diff
==============================================================================
--- llvm/trunk/unittests/CMakeLists.txt (original)
+++ llvm/trunk/unittests/CMakeLists.txt Thu Apr 5 05:42:12 2018
@@ -22,7 +22,6 @@ add_subdirectory(Object)
add_subdirectory(BinaryFormat)
add_subdirectory(ObjectYAML)
add_subdirectory(Option)
-add_subdirectory(Passes)
add_subdirectory(ProfileData)
add_subdirectory(Support)
add_subdirectory(Target)
Removed: llvm/trunk/unittests/Passes/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Passes/CMakeLists.txt?rev=329275&view=auto
==============================================================================
--- llvm/trunk/unittests/Passes/CMakeLists.txt (original)
+++ llvm/trunk/unittests/Passes/CMakeLists.txt (removed)
@@ -1,21 +0,0 @@
-set(LLVM_LINK_COMPONENTS Support Passes Core)
-
-add_llvm_unittest(PluginsTests PluginsTest.cpp)
-export_executable_symbols(PluginsTests)
-
-add_library(TestPlugin SHARED TestPlugin.cxx)
-
-set_output_directory(TestPlugin
- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
- LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
- )
-
-set_target_properties(TestPlugin
- PROPERTIES PREFIX ""
- SUFFIX ".so"
- )
-
-llvm_map_components_to_libnames(LLVMDependencies ${LLVM_LINK_COMPONENTS})
-target_link_libraries(TestPlugin ${LLVMDependencies})
-
-add_dependencies(PluginsTests TestPlugin)
Removed: llvm/trunk/unittests/Passes/PluginsTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Passes/PluginsTest.cpp?rev=329275&view=auto
==============================================================================
--- llvm/trunk/unittests/Passes/PluginsTest.cpp (original)
+++ llvm/trunk/unittests/Passes/PluginsTest.cpp (removed)
@@ -1,53 +0,0 @@
-//===- unittests/Passes/Plugins/PluginsTest.cpp ---------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Analysis/CGSCCPassManager.h"
-#include "llvm/IR/PassManager.h"
-#include "llvm/Passes/PassBuilder.h"
-#include "llvm/Passes/PassPlugin.h"
-#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Transforms/Scalar/LoopPassManager.h"
-#include "gtest/gtest.h"
-
-#include "TestPlugin.h"
-
-using namespace llvm;
-
-void anchor() {}
-
-static std::string LibPath(const std::string Name = "TestPlugin") {
- const std::vector<testing::internal::string> &Argvs =
- testing::internal::GetArgvs();
- const char *Argv0 = Argvs.size() > 0 ? Argvs[0].c_str() : "PluginsTests";
- void *Ptr = (void *)anchor;
- std::string Path = sys::fs::getMainExecutable(Argv0, Ptr);
- llvm::SmallString<256> Buf{sys::path::parent_path(Path)};
- sys::path::append(Buf, (Name + ".so").c_str());
- return Buf.str();
-}
-
-TEST(PluginsTests, LoadPlugin) {
- auto PluginPath = LibPath();
- ASSERT_NE("", PluginPath);
-
- Expected<PassPlugin> Plugin = PassPlugin::Load(PluginPath);
- ASSERT_TRUE(!!Plugin) << "Plugin path: " << PluginPath;
-
- ASSERT_EQ(TEST_PLUGIN_NAME, Plugin->getPluginName());
- ASSERT_EQ(TEST_PLUGIN_VERSION, Plugin->getPluginVersion());
-
- PassBuilder PB;
- ModulePassManager PM;
- ASSERT_FALSE(PB.parsePassPipeline(PM, "plugin-pass"));
-
- Plugin->registerPassBuilderCallbacks(PB);
- ASSERT_TRUE(PB.parsePassPipeline(PM, "plugin-pass"));
-}
Removed: llvm/trunk/unittests/Passes/TestPlugin.cxx
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Passes/TestPlugin.cxx?rev=329275&view=auto
==============================================================================
--- llvm/trunk/unittests/Passes/TestPlugin.cxx (original)
+++ llvm/trunk/unittests/Passes/TestPlugin.cxx (removed)
@@ -1,39 +0,0 @@
-//===- unittests/Passes/Plugins/Plugin.cxx --------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Passes/PassBuilder.h"
-#include "llvm/Passes/PassPlugin.h"
-
-#include "TestPlugin.h"
-
-using namespace llvm;
-
-struct TestModulePass : public PassInfoMixin<TestModulePass> {
- PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM) {
- return PreservedAnalyses::all();
- }
-};
-
-void registerCallbacks(PassBuilder &PB) {
- PB.registerPipelineParsingCallback(
- [](StringRef Name, ModulePassManager &PM,
- ArrayRef<PassBuilder::PipelineElement> InnerPipeline) {
- if (Name == "plugin-pass") {
- PM.addPass(TestModulePass());
- return true;
- }
- return false;
- });
-}
-
-extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK LLVM_PLUGIN_EXPORT
-llvmGetPassPluginInfo() {
- return {LLVM_PLUGIN_API_VERSION, TEST_PLUGIN_NAME, TEST_PLUGIN_VERSION,
- registerCallbacks};
-}
Removed: llvm/trunk/unittests/Passes/TestPlugin.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Passes/TestPlugin.h?rev=329275&view=auto
==============================================================================
--- llvm/trunk/unittests/Passes/TestPlugin.h (original)
+++ llvm/trunk/unittests/Passes/TestPlugin.h (removed)
@@ -1,2 +0,0 @@
-#define TEST_PLUGIN_NAME "TestPlugin"
-#define TEST_PLUGIN_VERSION "0.1-unit"
More information about the llvm-commits
mailing list