2012-11-19 6 views
2

저는 LLVM C API를 사용하여 일부 C 코드를 작성하고 있습니다. 명령 값이 int 유형인지 포인터인지 확인해야합니다. 내가 시도한 것은 LLVMTypeOf(LLVMValueRef val)을 사용하고 단지 int : LLVMInt1Type(), LLVMInt8Type(), LLVMInt16Type() 등등의 다른 유형과 모두 일치하는지 확인하는 것입니다. 포인터 유형인지 여부는 알지 못했지만 내가 정수인지 아닌지 알기 위해 사용했던 방법을 생각해 보라. http://llvm.org/doxygen/modules.htmlLLVM C API. LLVMValueRef가 정수인지 포인터 유형인지 확인하는 방법은 무엇입니까?

답변

1

는 C API는 매우 제한 : 다음

내가 참조 된 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

관련 문제