我正在使用LLVM C api编写一些C代码。我需要检查指令值是int
类型还是指针。我尝试做的是使用LLVMTypeOf(LLVMValueRef val)
,看看它是否等于所有不同类型的int
:LLVMInt1Type()
,LLVMInt8Type()
,LLVMInt16Type()
等我不知道如何判断它是否是指针类型,我认为我用来查看它是否为整数的方法也不起作用。
以下是我引用的API: http://llvm.org/doxygen/modules.html
答案 0 :(得分:3)
在c中,您可以使用LLVMGetTypeKind和LLVMTypeOf来确定它的类型。
对于整数类型,您可以查看:
if(LLVMGetTypeKind(LLVMTypeOf(LLVMValueRef val))==LLVMIntegerTypeKind)
对于指针类型,您可以查看:
if(LLVMGetTypeKind(LLVMTypeOf(LLVMValueRef val))==LLVMPointerTypeKind)
枚举参考:LLVMTypeKind
答案 1 :(得分:1)
C API非常有限。
我认为您必须自己使用C ++ API或将C ++ API包装到C API中。
例如,
extern "C" int LLVMTypeIsPointerTy(LLVMTypeRef ty){
return ((llvm::Type*)ty)->isPointerTy();
}