diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2016-12-23 20:38:19 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2016-12-23 20:38:19 +0000 |
commit | 060ad61fbe8c97dc58529a0f27b793ad5793b6b9 (patch) | |
tree | 9fd1aadf1d59e0fd82cb120f7bf4c8e49dae2754 | |
parent | 3e8353724b8ef7e04c1ff1e0bad40a9d4233865b (diff) | |
download | bcm5719-llvm-060ad61fbe8c97dc58529a0f27b793ad5793b6b9.tar.gz bcm5719-llvm-060ad61fbe8c97dc58529a0f27b793ad5793b6b9.zip |
[PM] Add support for building a default AA pipeline to the PassBuilder.
Pretty boring and lame as-is but necessary. This is definitely a place
we'll end up with extension hooks longer term. =]
Differential Revision: https://reviews.llvm.org/D28076
llvm-svn: 290449
-rw-r--r-- | llvm/include/llvm/Passes/PassBuilder.h | 4 | ||||
-rw-r--r-- | llvm/lib/Passes/PassBuilder.cpp | 34 | ||||
-rw-r--r-- | llvm/test/Other/new-pass-manager.ll | 11 |
3 files changed, 49 insertions, 0 deletions
diff --git a/llvm/include/llvm/Passes/PassBuilder.h b/llvm/include/llvm/Passes/PassBuilder.h index d50476263b5..ba3238c8604 100644 --- a/llvm/include/llvm/Passes/PassBuilder.h +++ b/llvm/include/llvm/Passes/PassBuilder.h @@ -224,6 +224,10 @@ public: ModulePassManager buildLTODefaultPipeline(OptimizationLevel Level, bool DebugLogging = false); + /// Build the default `AAManager` with the default alias analysis pipeline + /// registered. + AAManager buildDefaultAAPipeline(); + /// \brief Parse a textual pass pipeline description into a \c ModulePassManager. /// /// The format of the textual pass pipeline description looks something like: diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 58b242efa34..b7609c994cf 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -544,6 +544,33 @@ ModulePassManager PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, return MPM; } +AAManager PassBuilder::buildDefaultAAPipeline() { + AAManager AA; + + // The order in which these are registered determines their priority when + // being queried. + + // First we register the basic alias analysis that provides the majority of + // per-function local AA logic. This is a stateless, on-demand local set of + // AA techniques. + AA.registerFunctionAnalysis<BasicAA>(); + + // Next we query fast, specialized alias analyses that wrap IR-embedded + // information about aliasing. + AA.registerFunctionAnalysis<ScopedNoAliasAA>(); + AA.registerFunctionAnalysis<TypeBasedAA>(); + + // Add support for querying global aliasing information when available. + // Because this is a module analysis this will use any cached analysis state + // available but isn't enough to cause it to be available. + // FIXME: Enable once the invalidation logic supports this. +#if 0 + AA.registerModuleAnalysis<GlobalsAA>(); +#endif + + return AA; +} + static Optional<int> parseRepeatPassName(StringRef Name) { if (!Name.consume_front("repeat<") || !Name.consume_back(">")) return None; @@ -1084,6 +1111,13 @@ bool PassBuilder::parsePassPipeline(ModulePassManager &MPM, } bool PassBuilder::parseAAPipeline(AAManager &AA, StringRef PipelineText) { + // If the pipeline just consists of the word 'default' just replace the AA + // manager with our default one. + if (PipelineText == "default") { + AA = buildDefaultAAPipeline(); + return true; + } + while (!PipelineText.empty()) { StringRef Name; std::tie(Name, PipelineText) = PipelineText.split(','); diff --git a/llvm/test/Other/new-pass-manager.ll b/llvm/test/Other/new-pass-manager.ll index 22a6bc22789..c50d4169760 100644 --- a/llvm/test/Other/new-pass-manager.ll +++ b/llvm/test/Other/new-pass-manager.ll @@ -312,6 +312,17 @@ ; CHECK-AA: Finished llvm::Module pass manager run ; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \ +; RUN: -passes='require<aa>' -aa-pipeline='default' \ +; RUN: | FileCheck %s --check-prefix=CHECK-AA-DEFAULT +; CHECK-AA-DEFAULT: Starting llvm::Module pass manager run +; CHECK-AA-DEFAULT: Running pass: RequireAnalysisPass +; CHECK-AA-DEFAULT: Running analysis: AAManager +; CHECK-AA-DEFAULT: Running analysis: BasicAA +; CHECK-AA-DEFAULT: Running analysis: ScopedNoAliasAA +; CHECK-AA-DEFAULT: Running analysis: TypeBasedAA +; CHECK-AA-DEFAULT: Finished llvm::Module pass manager run + +; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \ ; RUN: -passes='require<memdep>' \ ; RUN: | FileCheck %s --check-prefix=CHECK-MEMDEP ; CHECK-MEMDEP: Starting llvm::Module pass manager run |