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

3
我正在使用LLVM C API编写一些C代码。我需要检查指令值是否为int类型或指针类型。我试图使用LLVMTypeOf(LLVMValueRef val)并查看它是否等于所有不同类型的intLLVMInt1Type()LLVMInt8Type()LLVMInt16Type()等。但我不知道如何确定它是指针类型还是其他类型,并且我认为我之前尝试的方法来查看是否为整数类型也不起作用。
这是我一直在参考的API: http://llvm.org/doxygen/modules.html
2个回答

4

在C语言中,你可以使用LLVMGetTypeKind和LLVMTypeOf来确定所处理的类型。

对于整型,你可以通过以下方式进行检查:

if(LLVMGetTypeKind(LLVMTypeOf(LLVMValueRef val))==LLVMIntegerTypeKind)

指针类型可以通过以下方式进行检查:

if(LLVMGetTypeKind(LLVMTypeOf(LLVMValueRef val))==LLVMPointerTypeKind)

枚举参考:LLVMTypeKind


1

C API非常有限。

我认为您需要使用C++ API或自己将C++ API封装成C API。

例如,

extern "C" int LLVMTypeIsPointerTy(LLVMTypeRef ty){
      return ((llvm::Type*)ty)->isPointerTy();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接