компактный способ выполнить llvm::dyn_cast
:
... // using namespace llvm
if (PointerType *PT = dyn_cast<PointerType>(arg.getType()))
if (IntegerType *IT = dyn_cast<IntegerType>(PT->getPointerElementType()))
if (IT->getBitWidth() == 8)
// do stuff
...
. Обратите внимание, что типы, которые не идентифицированы, структурно структурированы в LLVM IR. Если у вас есть ручка на LLVMContext
вы можете сравнить указатель типа аргумента к встроенным 8-битным Int указателя:
... //using namespace llvm
if (PointerType *PT = dyn_cast<PointerType>(arg.getType()))
if (PT == Type::getInt8PtrTy(ctx, PT->getPointerAddressSpace()))
// do stuff
...
.