aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/opt/NewPMDriver.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2022-07-03 14:10:23 +0000
committerDimitry Andric <dim@FreeBSD.org>2022-07-03 14:10:23 +0000
commit145449b1e420787bb99721a429341fa6be3adfb6 (patch)
tree1d56ae694a6de602e348dd80165cf881a36600ed /llvm/tools/opt/NewPMDriver.cpp
parentecbca9f5fb7d7613d2b94982c4825eb0d33d6842 (diff)
downloadsrc-145449b1e420787bb99721a429341fa6be3adfb6.tar.gz
src-145449b1e420787bb99721a429341fa6be3adfb6.zip
Vendor import of llvm-project main llvmorg-15-init-15358-g53dc0f107877.vendor/llvm-project/llvmorg-15-init-15358-g53dc0f107877
Diffstat (limited to 'llvm/tools/opt/NewPMDriver.cpp')
-rw-r--r--llvm/tools/opt/NewPMDriver.cpp70
1 files changed, 45 insertions, 25 deletions
diff --git a/llvm/tools/opt/NewPMDriver.cpp b/llvm/tools/opt/NewPMDriver.cpp
index af3308939442..17c5da408560 100644
--- a/llvm/tools/opt/NewPMDriver.cpp
+++ b/llvm/tools/opt/NewPMDriver.cpp
@@ -13,7 +13,6 @@
//===----------------------------------------------------------------------===//
#include "NewPMDriver.h"
-#include "PassPrinters.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/AliasAnalysis.h"
@@ -66,10 +65,6 @@ static cl::opt<DebugLogging> DebugPM(
DebugLogging::Verbose, "verbose",
"Print extra information about adaptors and pass managers")));
-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.
@@ -122,11 +117,28 @@ static cl::opt<std::string> PipelineEarlySimplificationEPPipeline(
cl::desc("A textual description of the module pass pipeline inserted at "
"the EarlySimplification extension point into default pipelines"),
cl::Hidden);
+static cl::opt<std::string> OptimizerEarlyEPPipeline(
+ "passes-ep-optimizer-early",
+ cl::desc("A textual description of the module pass pipeline inserted at "
+ "the OptimizerEarly extension point into default pipelines"),
+ cl::Hidden);
static cl::opt<std::string> OptimizerLastEPPipeline(
"passes-ep-optimizer-last",
cl::desc("A textual description of the module pass pipeline inserted at "
"the OptimizerLast extension point into default pipelines"),
cl::Hidden);
+static cl::opt<std::string> FullLinkTimeOptimizationEarlyEPPipeline(
+ "passes-ep-full-link-time-optimization-early",
+ cl::desc("A textual description of the module pass pipeline inserted at "
+ "the FullLinkTimeOptimizationEarly extension point into default "
+ "pipelines"),
+ cl::Hidden);
+static cl::opt<std::string> FullLinkTimeOptimizationLastEPPipeline(
+ "passes-ep-full-link-time-optimization-last",
+ cl::desc("A textual description of the module pass pipeline inserted at "
+ "the FullLinkTimeOptimizationLast extension point into default "
+ "pipelines"),
+ cl::Hidden);
// Individual pipeline tuning options.
extern cl::opt<bool> DisableLoopUnrolling;
@@ -223,12 +235,35 @@ static void registerEPCallbacks(PassBuilder &PB) {
ExitOnError Err("Unable to parse EarlySimplification pipeline: ");
Err(PB.parsePassPipeline(PM, PipelineEarlySimplificationEPPipeline));
});
- if (tryParsePipelineText<FunctionPassManager>(PB, OptimizerLastEPPipeline))
+ if (tryParsePipelineText<ModulePassManager>(PB, OptimizerEarlyEPPipeline))
+ PB.registerOptimizerEarlyEPCallback(
+ [&PB](ModulePassManager &PM, OptimizationLevel) {
+ ExitOnError Err("Unable to parse OptimizerEarlyEP pipeline: ");
+ Err(PB.parsePassPipeline(PM, OptimizerEarlyEPPipeline));
+ });
+ if (tryParsePipelineText<ModulePassManager>(PB, OptimizerLastEPPipeline))
PB.registerOptimizerLastEPCallback(
[&PB](ModulePassManager &PM, OptimizationLevel) {
ExitOnError Err("Unable to parse OptimizerLastEP pipeline: ");
Err(PB.parsePassPipeline(PM, OptimizerLastEPPipeline));
});
+ if (tryParsePipelineText<ModulePassManager>(
+ PB, FullLinkTimeOptimizationEarlyEPPipeline))
+ PB.registerFullLinkTimeOptimizationEarlyEPCallback(
+ [&PB](ModulePassManager &PM, OptimizationLevel) {
+ ExitOnError Err(
+ "Unable to parse FullLinkTimeOptimizationEarlyEP pipeline: ");
+ Err(PB.parsePassPipeline(PM,
+ FullLinkTimeOptimizationEarlyEPPipeline));
+ });
+ if (tryParsePipelineText<ModulePassManager>(
+ PB, FullLinkTimeOptimizationLastEPPipeline))
+ PB.registerFullLinkTimeOptimizationLastEPCallback(
+ [&PB](ModulePassManager &PM, OptimizationLevel) {
+ ExitOnError Err(
+ "Unable to parse FullLinkTimeOptimizationLastEP pipeline: ");
+ Err(PB.parsePassPipeline(PM, FullLinkTimeOptimizationLastEPPipeline));
+ });
}
#define HANDLE_EXTENSION(Ext) \
@@ -240,6 +275,7 @@ bool llvm::runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM,
ToolOutputFile *ThinLTOLinkOut,
ToolOutputFile *OptRemarkFile,
StringRef PassPipeline, ArrayRef<StringRef> Passes,
+ ArrayRef<PassPlugin> PassPlugins,
OutputKind OK, VerifierKind VK,
bool ShouldPreserveAssemblyUseListOrder,
bool ShouldPreserveBitcodeUseListOrder,
@@ -312,33 +348,17 @@ bool llvm::runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM,
PassBuilder PB(TM, PTO, P, &PIC);
registerEPCallbacks(PB);
- // 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);
- }
+ // For any loaded plugins, let them register pass builder callbacks.
+ for (auto &PassPlugin : PassPlugins)
+ PassPlugin.registerPassBuilderCallbacks(PB);
PB.registerPipelineParsingCallback(
[](StringRef Name, ModulePassManager &MPM,
ArrayRef<PassBuilder::PipelineElement>) {
AddressSanitizerOptions Opts;
if (Name == "asan-pipeline") {
- MPM.addPass(
- RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
MPM.addPass(ModuleAddressSanitizerPass(Opts));
return true;
- } else if (Name == "asan-function-pipeline") {
- MPM.addPass(
- RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
- MPM.addPass(
- createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
- return true;
}
return false;
});