3

LLVMCAPIを使用してCコードを書いています。命令値が型でintあるかポインタであるかを確認する必要があります。私がやろうとしたのは、使用LLVMTypeOf(LLVMValueRef val)して、それがさまざまなタイプのすべてに等しいかどうかを確認することですintLLVMInt1Type()、、、など。しかし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

CAPIは非常に制限されています。

自分でC++APIを使用するか、C++APIをCAPIにラップする必要があると思います。

例えば、

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