summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-01-03 16:56:04 +0000
committerChris Lattner <sabre@nondot.org>2008-01-03 16:56:04 +0000
commit2e438ca03b69ce199f9d567fc5e4ca028d1018c4 (patch)
tree2baebb551c76111bd2b65ca9fd97b8ac109abbec /docs
parentae636f8e997294fd997ae8b91e17c4f63b269cc2 (diff)
downloadllvm-2e438ca03b69ce199f9d567fc5e4ca028d1018c4.tar.gz
llvm-2e438ca03b69ce199f9d567fc5e4ca028d1018c4.tar.bz2
llvm-2e438ca03b69ce199f9d567fc5e4ca028d1018c4.tar.xz
add info on walking preds/succs of a block.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45537 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs')
-rw-r--r--docs/ProgrammersManual.html47
1 files changed, 39 insertions, 8 deletions
diff --git a/docs/ProgrammersManual.html b/docs/ProgrammersManual.html
index 66bca9b775..7bec1b964d 100644
--- a/docs/ProgrammersManual.html
+++ b/docs/ProgrammersManual.html
@@ -103,6 +103,8 @@ complex example</a> </li>
the same way</a> </li>
<li><a href="#iterate_chains">Iterating over def-use &amp;
use-def chains</a> </li>
+ <li><a href="#iterate_preds">Iterating over predecessors &amp;
+successors of blocks</a></li>
</ul>
</li>
<li><a href="#simplechanges">Making simple changes</a>
@@ -1536,7 +1538,7 @@ the last line of the last example,</p>
<div class="doc_code">
<pre>
-Instruction* pinst = &amp;*i;
+Instruction *pinst = &amp;*i;
</pre>
</div>
@@ -1544,7 +1546,7 @@ Instruction* pinst = &amp;*i;
<div class="doc_code">
<pre>
-Instruction* pinst = i;
+Instruction *pinst = i;
</pre>
</div>
@@ -1612,8 +1614,7 @@ class OurFunctionPass : public FunctionPass {
href="#CallInst">CallInst</a>&gt;(&amp;*i)) {
// <i>We know we've encountered a call instruction, so we</i>
// <i>need to determine if it's a call to the</i>
- // <i>function pointed to by m_func or not</i>
-
+ // <i>function pointed to by m_func or not.</i>
if (callInst-&gt;getCalledFunction() == targetFunc)
++callCounter;
}
@@ -1622,7 +1623,7 @@ class OurFunctionPass : public FunctionPass {
}
private:
- unsigned callCounter;
+ unsigned callCounter;
};
</pre>
</div>
@@ -1674,7 +1675,7 @@ of <tt>F</tt>:</p>
<div class="doc_code">
<pre>
-Function* F = ...;
+Function *F = ...;
for (Value::use_iterator i = F-&gt;use_begin(), e = F-&gt;use_end(); i != e; ++i)
if (Instruction *Inst = dyn_cast&lt;Instruction&gt;(*i)) {
@@ -1694,10 +1695,10 @@ the particular <tt>Instruction</tt>):</p>
<div class="doc_code">
<pre>
-Instruction* pi = ...;
+Instruction *pi = ...;
for (User::op_iterator i = pi-&gt;op_begin(), e = pi-&gt;op_end(); i != e; ++i) {
- Value* v = *i;
+ Value *v = *i;
// <i>...</i>
}
</pre>
@@ -1710,6 +1711,36 @@ for (User::op_iterator i = pi-&gt;op_begin(), e = pi-&gt;op_end(); i != e; ++i)
</div>
+<!--_______________________________________________________________________-->
+<div class="doc_subsubsection">
+ <a name="iterate_preds">Iterating over predecessors &amp;
+successors of blocks</a>
+</div>
+
+<div class="doc_text">
+
+<p>Iterating over the predecessors and successors of a block is quite easy
+with the routines defined in <tt>"llvm/Support/CFG.h"</tt>. Just use code like
+this to iterate over all predecessors of BB:</p>
+
+<div class="doc_code">
+<pre>
+#include "llvm/Support/CFG.h"
+BasicBlock *BB = ...;
+
+for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
+ BasicBlock *Pred = *PI;
+ // <i>...</i>
+}
+</pre>
+</div>
+
+<p>Similarly, to iterate over successors use
+succ_iterator/succ_begin/succ_end.</p>
+
+</div>
+
+
<!-- ======================================================================= -->
<div class="doc_subsection">
<a name="simplechanges">Making simple changes</a>