[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