[llvm] ce304a4 - [docs][NewPM] Add example C++ code on how to actually use the new PM
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 25 13:24:45 PDT 2021
Author: Arthur Eubanks
Date: 2021-10-25T13:24:20-07:00
New Revision: ce304a452a8ccd8d4ec75260d8438bbbf3953568
URL: https://github.com/llvm/llvm-project/commit/ce304a452a8ccd8d4ec75260d8438bbbf3953568
DIFF: https://github.com/llvm/llvm-project/commit/ce304a452a8ccd8d4ec75260d8438bbbf3953568.diff
LOG: [docs][NewPM] Add example C++ code on how to actually use the new PM
Differential Revision: https://reviews.llvm.org/D112477
Added:
Modified:
llvm/docs/NewPassManager.rst
Removed:
################################################################################
diff --git a/llvm/docs/NewPassManager.rst b/llvm/docs/NewPassManager.rst
index 55898ef3b1fe..81886857aa8d 100644
--- a/llvm/docs/NewPassManager.rst
+++ b/llvm/docs/NewPassManager.rst
@@ -11,6 +11,43 @@ Overview
For an overview of the new pass manager, see the `blog post
<https://blog.llvm.org/posts/2021-03-26-the-new-pass-manager/>`_.
+Just Tell Me How To Run The Default Optimization Pipeline With The New Pass Manager
+===================================================================================
+
+.. code-block:: c++
+
+ // Create the analysis managers.
+ LoopAnalysisManager LAM;
+ FunctionAnalysisManager FAM;
+ CGSCCAnalysisManager CGAM;
+ ModuleAnalysisManager MAM;
+
+ // Create the new pass manager builder.
+ // Take a look at the PassBuilder constructor parameters for more
+ // customization, e.g. specifying a TargetMachine or various debugging
+ // options.
+ PassBuilder PB;
+
+ // Make sure to use the default alias analysis pipeline, otherwise we'll end
+ // up only using a subset of the available analyses.
+ FAM.registerPass([&] { return PB.buildDefaultAAPipeline(); });
+
+ // Register all the basic analyses with the managers.
+ PB.registerModuleAnalyses(MAM);
+ PB.registerCGSCCAnalyses(CGAM);
+ PB.registerFunctionAnalyses(FAM);
+ PB.registerLoopAnalyses(LAM);
+ PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
+
+ // Create the pass manager.
+ // This one corresponds to a typical -O2 optimization pipeline.
+ ModulePassManager MPM = PB.buildPerModuleDefaultPipeline(OptimizationLevel::O2);
+
+ // Optimize the IR!
+ MPM.run(MyModule, MAM);
+
+The C API also supports most of this, see ``llvm-c/Transforms/PassBuilder.h``.
+
Adding Passes to a Pass Manager
===============================
More information about the llvm-commits
mailing list