From 3c1ca0b195ed50ba9492684841bd95e509cabe96 Mon Sep 17 00:00:00 2001
From: Devang Patel
Date: Mon, 16 Apr 2007 21:28:14 +0000
Subject: [PATCH] Document how, module pass can require function pass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36171 91177308-0d34-0410-b5e6-96231b3b80d8
---
docs/WritingAnLLVMPass.html | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/docs/WritingAnLLVMPass.html b/docs/WritingAnLLVMPass.html
index 3b116074b71..c9813ef11c5 100644
--- a/docs/WritingAnLLVMPass.html
+++ b/docs/WritingAnLLVMPass.html
@@ -466,7 +466,9 @@ class is the most general of all superclasses that you can use. Deriving from
ModulePass indicates that your pass uses the entire program as a unit,
refering to function bodies in no predictable order, or adding and removing
functions. Because nothing is known about the behavior of ModulePass
-subclasses, no optimization can be done for their execution.
+subclasses, no optimization can be done for their execution. A module pass
+can use function level passes (e.g. dominators) using getAnalysis interface
+ getAnalysis(Function).
To write a correct ModulePass subclass, derive from
ModulePass and overload the runOnModule method with the
@@ -1127,7 +1129,21 @@ runtime assertion failure if you attempt to get an analysis that you did not
declare as required in your getAnalysisUsage implementation. This
method can be called by your run* method implementation, or by any
-other local method invoked by your run* method.
+other local method invoked by your run* method.
+
+A module level pass can use function level analysis info using this interface.
+For example:
+
+
+ bool ModuleLevelPass::runOnModule(Module &M) {
+ ...
+ DominatorTree &DT = getAnalysis<DominatorTree>(Function &F);
+ ...
+ }
+
+
+In above example, runOnFunction for DominatorTree is called by pass manager
+before returning a reference to the desired pass.
If your pass is capable of updating analyses if they exist (e.g.,