2014-11-04 28 views
0

我正在做一个类似JIT的事情。我有以下代码:如何将函数指针转换为LLVM值,以便我可以在IR中调用它?

Obj doSomething(Obj o, Selector sel){ 
    ... 
} 

而且我有一个指向这个功能,我的问题是如何包装指针成一个LLVM:Value,这样我可以将其插入我的IR,用IRBuilder.CreateCall,怎么办我需要去做?

+0

对于具有void类型的函数,该过程将在[这里]中解释(http://stackoverflow.com/questions/24899568/how-to-call-functions-from-external-dll-using-llvm-irbuilder/ 24937141#24937141)。 但是,您的情况要复杂得多,因为您需要创建正确的类型而不是使用'Type :: getVoidTy'。网上似乎没有任何好的例子可以说明如何做到这一点。如果可能的话,你可以使用指针(void *最好)和一个包装函数来简化情况。 – antipattern 2014-11-04 16:30:10

回答

0

(我明白你的问题是:我有一个C++指针LLVM的功能,我需要创建到一个电话,如果我错了,请澄清它在后或在下面评论)

大多数LLVM类的派生从llvm::Value,当你做这样的事情

llvm::Function *theFunction = llvm::Function::Create(...); 

llvm::Functionllvm::Value一个子类,你可以在一个CreateCall

使用
Value *result = Builder.CreateCall(theFunction, ...); // This is the call instruction 
相关问题