if (isa<<a href="#Constant">Constant</a>>(V) || isa<<a href="#Argument">Argument</a>>(V) || isa<<a href="#GlobalValue">GlobalValue</a>>(V))
return true;
- <i>// Otherwise, it must be an instruction...</i>
- return !L->contains(cast<<a href="#Instruction">Instruction</a>>(V)->getParent());
+ <i>// Otherwise, it must be an instruction...</i>
+ return !L->contains(cast<<a href="#Instruction">Instruction</a>>(V)->getParent());
+ }
</pre>
<p>Note that you should <b>not</b> use an <tt>isa<></tt> test followed
call to <tt>isa<></tt> and a call to <tt>cast<></tt> into one
statement, which is very convenient.</p>
- <p> Another common example is:</p>
-
- <pre>
- <i>// Loop over all of the phi nodes in a basic block</i>
- BasicBlock::iterator BBI = BB->begin();
- for (; <a href="#PhiNode">PHINode</a> *PN = dyn_cast<<a href="#PHINode">PHINode</a>>(BBI); ++BBI)
- std::cerr << *PN;
- </pre>
-
<p>Note that the <tt>dyn_cast<></tt> operator, like C++'s
<tt>dynamic_cast</tt> or Java's <tt>instanceof</tt> operator, can be abused.
In particular you should not use big chained <tt>if/then/else</tt> blocks to
check for lots of different variants of classes. If you find yourself
wanting to do this, it is much cleaner and more efficient to use the
- InstVisitor class to dispatch over the instruction type directly.</p>
+ <tt>InstVisitor</tt> class to dispatch over the instruction type directly.</p>
</dd>