2012-11-19 59 views
2

我正在使用LLVM C API編寫一些C代碼。我需要檢查指令值是否爲int或者是指針。我試圖做的是使用LLVMTypeOf(LLVMValueRef val),只是看看它是否等於所有不同類型的intLLVMInt1Type()LLVMInt8Type(),LLVMInt16Type()等我不知道如何確定它是否是指針類型或不,但我想想我用來查看它是否爲整數的方法也無法正常工作。LLVM C API。如何確定LLVMValueRef是整數還是指針類型?

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

回答

1

的C API是非常有限的。

我認爲您必須使用C++ API或自行將C++ API封裝到C API。

例如,

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

在C你可以使用LLVMGetTypeKind和LLVMTypeOf,以確定它是什麼類型。

對於整數類型,可以用檢查:

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

枚舉參考:

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

對於指針類型,可以用檢查LLVMTypeKind

相關問題