[LLVMdev] Using isa with derived types

Nick Lewycky nicholas at mxc.ca
Wed Nov 12 22:10:39 PST 2008


Zappel-Phillip wrote:
> Hello,
> 
> I am writing an optimization pass which optimizes code based on an online
> pointer analysis algorithm and need to detect pointers which are pointing to
> derived types. I have not had any problem identifying pointers in general
> using isa<PointerType>(...), but I can't seem to figure out how I can make
> sure that the pointer is pointing to a scalar value and not a function,
> array, struct, etc.
> 
> What am I missing?

Please see the doxygen: http://llvm.org/doxygen/classllvm_1_1Type.html

   if (const PointerType *PTy = dyn_cast<PointerType>(...)) {
     const Type *InnerTy = PTy->getElementType();
     switch (InnerTy->getTypeID()) {
       case Type::ArrayTyID:
         ...
       case Type::FunctionTyID:
         ...
       case Type::StructTyID:
         ...
       case Type::IntegerTyID:
         ...
     }
   }

A switch on getTypeID() is equivalent to isa<>, but more efficient than 
a chain of if's when doing multiple tests.

If you only care about whether it's first class or not, you can just 
call InnerTy->isFirstClass().

Nick Lewycky



More information about the llvm-dev mailing list