forked from OSchip/llvm-project
Remove "ModulePasses requiring FunctionPasses" from the list of future
extensions. llvm-svn: 36186
This commit is contained in:
parent
62a8cbe594
commit
f96c3625c2
|
@ -103,8 +103,6 @@
|
||||||
<li><a href="#future">Future extensions planned</a>
|
<li><a href="#future">Future extensions planned</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#SMP">Multithreaded LLVM</a></li>
|
<li><a href="#SMP">Multithreaded LLVM</a></li>
|
||||||
<li><a href="#PassFunctionPass"><tt>ModulePass</tt>es requiring
|
|
||||||
<tt>FunctionPass</tt>es</a></li>
|
|
||||||
</ul></li>
|
</ul></li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
@ -1137,7 +1135,7 @@ For example:</p>
|
||||||
<div class="doc_code"><pre>
|
<div class="doc_code"><pre>
|
||||||
bool ModuleLevelPass::runOnModule(Module &M) {
|
bool ModuleLevelPass::runOnModule(Module &M) {
|
||||||
...
|
...
|
||||||
DominatorTree &DT = getAnalysis<DominatorTree>(Function &F);
|
DominatorTree &DT = getAnalysis<DominatorTree>(Func);
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
</pre></div>
|
</pre></div>
|
||||||
|
@ -1780,31 +1778,6 @@ places (for global resources). Although this is a simple extension, we simply
|
||||||
haven't had time (or multiprocessor machines, thus a reason) to implement this.
|
haven't had time (or multiprocessor machines, thus a reason) to implement this.
|
||||||
Despite that, we have kept the LLVM passes SMP ready, and you should too.</p>
|
Despite that, we have kept the LLVM passes SMP ready, and you should too.</p>
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- _______________________________________________________________________ -->
|
|
||||||
<div class="doc_subsubsection">
|
|
||||||
<a name="PassFunctionPass"><tt>ModulePass</tt>es requiring <tt>FunctionPass</tt>es</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="doc_text">
|
|
||||||
|
|
||||||
<p>Currently it is illegal for a <a href="#ModulePass"><tt>ModulePass</tt></a>
|
|
||||||
to require a <a href="#FunctionPass"><tt>FunctionPass</tt></a>. This is because
|
|
||||||
there is only one instance of the <a
|
|
||||||
href="#FunctionPass"><tt>FunctionPass</tt></a> object ever created, thus nowhere
|
|
||||||
to store information for all of the functions in the program at the same time.
|
|
||||||
Although this has come up a couple of times before, this has always been worked
|
|
||||||
around by factoring one big complicated pass into a global and an
|
|
||||||
interprocedural part, both of which are distinct. In the future, it would be
|
|
||||||
nice to have this though.</p>
|
|
||||||
|
|
||||||
<p>Note that it is no problem for a <a
|
|
||||||
href="#FunctionPass"><tt>FunctionPass</tt></a> to require the results of a <a
|
|
||||||
href="#ModulePass"><tt>ModulePass</tt></a>, only the other way around.</p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- *********************************************************************** -->
|
<!-- *********************************************************************** -->
|
||||||
<hr>
|
<hr>
|
||||||
<address>
|
<address>
|
||||||
|
|
Loading…
Reference in New Issue