diff options
author | Tobias Grosser <grosser@fim.uni-passau.de> | 2010-10-20 01:54:44 +0000 |
---|---|---|
committer | Tobias Grosser <grosser@fim.uni-passau.de> | 2010-10-20 01:54:44 +0000 |
commit | 65513605353c7e3ee8be6fc92892f257ad399d92 (patch) | |
tree | 5ed1eadcd13601b914a22908e03ef41152586b4f /docs/WritingAnLLVMPass.html | |
parent | 3e26c3c7d4c652811ab1ec5bd0f2a749c372709b (diff) | |
download | external_llvm-65513605353c7e3ee8be6fc92892f257ad399d92.zip external_llvm-65513605353c7e3ee8be6fc92892f257ad399d92.tar.gz external_llvm-65513605353c7e3ee8be6fc92892f257ad399d92.tar.bz2 |
Add RegionPass support.
A RegionPass is executed like a LoopPass but on the regions detected by the
RegionInfo pass instead of the loops detected by the LoopInfo pass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116905 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/WritingAnLLVMPass.html')
-rw-r--r-- | docs/WritingAnLLVMPass.html | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/docs/WritingAnLLVMPass.html b/docs/WritingAnLLVMPass.html index 3cef2c9..a1d5564 100644 --- a/docs/WritingAnLLVMPass.html +++ b/docs/WritingAnLLVMPass.html @@ -51,6 +51,14 @@ <li><a href="#doFinalization_loop">The <tt>doFinalization() </tt> method</a></li> </ul></li> + <li><a href="#RegionPass">The <tt>RegionPass</tt> class</a> + <ul> + <li><a href="#doInitialization_region">The <tt>doInitialization(Region *, + RGPassManager &)</tt> method</a></li> + <li><a href="#runOnRegion">The <tt>runOnRegion</tt> method</a></li> + <li><a href="#doFinalization_region">The <tt>doFinalization() + </tt> method</a></li> + </ul></li> <li><a href="#BasicBlockPass">The <tt>BasicBlockPass</tt> class</a> <ul> <li><a href="#doInitialization_fn">The <tt>doInitialization(Function @@ -134,6 +142,7 @@ the <tt><a href="#ModulePass">ModulePass</a></tt>, <tt><a href="#CallGraphSCCPass">CallGraphSCCPass</a></tt>, <tt><a href="#FunctionPass">FunctionPass</a></tt>, or <tt><a href="#LoopPass">LoopPass</a></tt>, or <tt><a +href="#RegionPass">RegionPass</a></tt>, or <tt><a href="#BasicBlockPass">BasicBlockPass</a></tt> classes, which gives the system more information about what your pass does, and how it can be combined with other passes. One of the main features of the LLVM Pass Framework is that it @@ -805,6 +814,84 @@ program being compiled. </p> </div> +<!-- ======================================================================= --> +<div class="doc_subsection"> + <a name="RegionPass">The <tt>RegionPass</tt> class </a> +</div> + +<div class="doc_text"> + +<p> <tt>RegionPass</tt> is similar to <a href="#LoopPass"><tt>LoopPass</tt></a>, +but executes on each single entry single exit region in the function. +<tt>RegionPass</tt> processes regions in nested order such that the outer most +region is processed last. </p> + +<p> <tt>RegionPass</tt> subclasses are allowed to update the region tree by using +the <tt>RGPassManager</tt> interface. You may overload three virtual methods of +<tt>RegionPass</tt> to implementing your own region pass is usually. All these +methods should return true if they modified the program, or false if they didn not. +</p> +</div> + +<!-- _______________________________________________________________________ --> +<div class="doc_subsubsection"> + <a name="doInitialization_region">The <tt>doInitialization(Region *, + RGPassManager &)</tt> + method</a> +</div> + +<div class="doc_text"> + +<div class="doc_code"><pre> + <b>virtual bool</b> doInitialization(Region *, RGPassManager &RGM); +</pre></div> + +<p>The <tt>doInitialization</tt> method is designed to do simple initialization +type of stuff that does not depend on the functions being processed. The +<tt>doInitialization</tt> method call is not scheduled to overlap with any +other pass executions (thus it should be very fast). RPPassManager +interface should be used to access Function or Module level analysis +information.</p> + +</div> + + +<!-- _______________________________________________________________________ --> +<div class="doc_subsubsection"> + <a name="runOnRegion">The <tt>runOnRegion</tt> method</a> +</div> + +<div class="doc_text"> + +<div class="doc_code"><pre> + <b>virtual bool</b> runOnRegion(Region *, RGPassManager &RGM) = 0; +</pre></div><p> + +<p>The <tt>runOnRegion</tt> method must be implemented by your subclass to do +the transformation or analysis work of your pass. As usual, a true value should +be returned if the region is modified. <tt>RGPassManager</tt> interface +should be used to update region tree.</p> + +</div> + +<!-- _______________________________________________________________________ --> +<div class="doc_subsubsection"> + <a name="doFinalization_region">The <tt>doFinalization()</tt> method</a> +</div> + +<div class="doc_text"> + +<div class="doc_code"><pre> + <b>virtual bool</b> doFinalization(); +</pre></div> + +<p>The <tt>doFinalization</tt> method is an infrequently used method that is +called when the pass framework has finished calling <a +href="#runOnRegion"><tt>runOnRegion</tt></a> for every region in the +program being compiled. </p> + +</div> + <!-- ======================================================================= --> |