3

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

这是我一直在引用的 API:http: //llvm.org/doxygen/modules.html

4

2 回答 2

3

在 c 中,您可以使用 LLVMGetTypeKind 和 LLVMTypeOf 来确定它是什么类型。

对于整数类型,您可以检查:

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

对于指针类型,您可以检查:

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

枚举参考:LLVMTypeKind

于 2014-12-03T15:26:56.073 回答
1

C API 非常有限。

我认为您必须自己使用 C++ API 或将 C++ API 包装到 C API。

例如,

extern "C" int LLVMTypeIsPointerTy(LLVMTypeRef ty){
      return ((llvm::Type*)ty)->isPointerTy();
}
于 2012-11-22T09:20:43.093 回答