LLVM C API。如何确定LLVMValueRef是整数还是指针类型?

时间:2012-11-19 13:48:53

标签: c llvm

我正在使用LLVM C api编写一些C代码。我需要检查指令值是int类型还是指针。我尝试做的是使用LLVMTypeOf(LLVMValueRef val),看看它是否等于所有不同类型的intLLVMInt1Type()LLVMInt8Type()LLVMInt16Type()等我不知道如何判断它是否是指针类型,我认为我用来查看它是否为整数的方法也不起作用。

以下是我引用的API: http://llvm.org/doxygen/modules.html

2 个答案:

答案 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();
}