[LLVMdev] isa and friends as an alternative to dynamic cast?

Chris Lattner sabre at nondot.org
Thu Apr 21 22:07:42 PDT 2005

On Thu, 21 Apr 2005, Reid Spencer wrote:
> one or more of the libraries. Since we don't have that situation in
> LLVM, using the various Casting.h facilities allows all that "dynamic"
> casting to actually be done statically, hence no runtime performance
> penalty.

Reid is right.  isa on an instruction literally loads a field out of the 
instruction and compares it against a constant.  As another example, a 
good compiler (ahem, like LLVM :) ), turns this:

if (... = dyn_cast<LoadInst>(Y)) {
} else if (... = dyn_cast<StoreInst>(Y)) {
} else if (... = dyn_cast<AllocaInst>(Y)) {


switch (Y->getOpcode()) {
case Instruction::Load:
case Instruction::Store:
case Instruction::AllocaInst:

Which is something that is just not possible with RTTI.



More information about the llvm-dev mailing list