<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<link rel="Start" href="index.html">
<link rel="previous" href="Dataflow.html">
<link rel="Up" href="index.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of classes" rel=Appendix href="index_classes.html">
<link title="Index of class types" rel=Appendix href="index_class_types.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="Pretty" rel="Chapter" href="Pretty.html">
<link title="Errormsg" rel="Chapter" href="Errormsg.html">
<link title="Clist" rel="Chapter" href="Clist.html">
<link title="Stats" rel="Chapter" href="Stats.html">
<link title="Cil" rel="Chapter" href="Cil.html">
<link title="Formatcil" rel="Chapter" href="Formatcil.html">
<link title="Alpha" rel="Chapter" href="Alpha.html">
<link title="Cillower" rel="Chapter" href="Cillower.html">
<link title="Cfg" rel="Chapter" href="Cfg.html">
<link title="Dataflow" rel="Chapter" href="Dataflow.html">
<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.7) : Dominators</title>
</head>
<body>
<div class="navbar"><a href="Dataflow.html">Previous</a>
&nbsp;<a href="index.html">Up</a>
&nbsp;</div>
<center><h1>Module <a href="type_Dominators.html">Dominators</a></h1></center>
<br>
<pre><span class="keyword">module</span> Dominators: <code class="code">sig</code> <a href="Dominators.html">..</a> <code class="code">end</code></pre>Compute dominators using data flow analysis<br>
<hr width="100%">
<br>
Author: George Necula   
      5/28/2004 
<br>
<pre><span class="keyword">val</span> <a name="VALcomputeIDom"></a>computeIDom : <code class="type">?doCFG:bool -> <a href="Cil.html#TYPEfundec">Cil.fundec</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t</code></pre><div class="info">
Invoke on a code after filling in the CFG info and it computes the 
 immediate dominator information. We map each statement to its immediate 
 dominator (None for the start statement, and for the unreachable 
 statements).<br>
</div>
<pre><span class="keyword">type</span> <a name="TYPEtree"></a><code class="type"></code>tree </pre>

<pre><span class="keyword">val</span> <a name="VALcomputeDomTree"></a>computeDomTree : <code class="type">?doCFG:bool -> <a href="Cil.html#TYPEfundec">Cil.fundec</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t * <a href="Dominators.html#TYPEtree">tree</a></code></pre><div class="info">
returns the IDoms and a map from statement ids to 
  the set of statements that are dominated<br>
</div>
<pre><span class="keyword">val</span> <a name="VALgetIdom"></a>getIdom : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option</code></pre><div class="info">
This is like Inthash.find but gives an error if the information is 
 Not_found<br>
</div>
<pre><span class="keyword">val</span> <a name="VALdominates"></a>dominates : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> bool</code></pre><div class="info">
Check whether one statement dominates another.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALchildren"></a>children : <code class="type"><a href="Dominators.html#TYPEtree">tree</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> list</code></pre><div class="info">
Return a list of statements dominated by the argument<br>
</div>
<br><code><span class="keyword">type</span> <a name="TYPEorder"></a><code class="type"></code>order = </code><table class="typetable">
<tr>
<td align="left" valign="top" >
<code><span class="keyword">|</span></code></td>
<td align="left" valign="top" >
<code><span class="constructor">PreOrder</span></code></td>

</tr>
<tr>
<td align="left" valign="top" >
<code><span class="keyword">|</span></code></td>
<td align="left" valign="top" >
<code><span class="constructor">PostOrder</span></code></td>

</tr></table>


<pre><span class="keyword">val</span> <a name="VALdomTreeIter"></a>domTreeIter : <code class="type">(<a href="Cil.html#TYPEstmt">Cil.stmt</a> -> unit) -> <a href="Dominators.html#TYPEorder">order</a> -> <a href="Dominators.html#TYPEtree">tree</a> -> unit</code></pre><div class="info">
Iterate over a dominator tree<br>
</div>
<pre><span class="keyword">val</span> <a name="VALfindNaturalLoops"></a>findNaturalLoops : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> (<a href="Cil.html#TYPEstmt">Cil.stmt</a> * <a href="Cil.html#TYPEstmt">Cil.stmt</a> list) list</code></pre><div class="info">
Compute the start of the natural loops. This assumes that the "idom" 
 field has been computed. For each start, keep a list of origin of a back 
 edge. The loop consists of the loop start and all predecessors of the 
 origins of back edges, up to and including the loop start<br>
</div>
</body></html>