[llvm] r290449 - [PM] Add support for building a default AA pipeline to the PassBuilder.

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 23 18:43:58 PST 2016


On Fri, Dec 23, 2016 at 12:38 PM, Chandler Carruth via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: chandlerc
> Date: Fri Dec 23 14:38:19 2016
> New Revision: 290449
>
> URL: http://llvm.org/viewvc/llvm-project?rev=290449&view=rev
> Log:
> [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
>
> Modified:
>     llvm/trunk/include/llvm/Passes/PassBuilder.h
>     llvm/trunk/lib/Passes/PassBuilder.cpp
>     llvm/trunk/test/Other/new-pass-manager.ll
>
> Modified: llvm/trunk/include/llvm/Passes/PassBuilder.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/Passes/PassBuilder.h?rev=290449&r1=290448&r2=290449&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/Passes/PassBuilder.h (original)
> +++ llvm/trunk/include/llvm/Passes/PassBuilder.h Fri Dec 23 14:38:19 2016
> @@ -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:
>
> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/
> PassBuilder.cpp?rev=290449&r1=290448&r2=290449&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)
> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Fri Dec 23 14:38:19 2016
> @@ -544,6 +544,33 @@ ModulePassManager PassBuilder::buildLTOD
>    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.
>

This comment is confusing. It starts out talking about how to cause the
analysis to be computed, but then the FIXME is about invalidation logic.
Can you somehow make it clear that they are talking about two different
things? (move the FIXME inside the `#if 0` maybe?).

Also, for context about the "isn't enough to cause it to be available"
aspect, you probably want to emphasize that AAManager is a function
analysis and will access GlobalsAA through the proxy, which provides a
read-only view of the module analysis manager.

-- Sean Silva


> +#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(Modu
>  }
>
>  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(',');
>
> Modified: llvm/trunk/test/Other/new-pass-manager.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/
> new-pass-manager.ll?rev=290449&r1=290448&r2=290449&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/Other/new-pass-manager.ll (original)
> +++ llvm/trunk/test/Other/new-pass-manager.ll Fri Dec 23 14:38:19 2016
> @@ -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
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161223/3117c3e5/attachment.html>


More information about the llvm-commits mailing list