0

我有一个指向我需要调用的函数的指针,而无需通过 llvm::Module::getOrInsertFunction。此示例不起作用:

static int add(int x, int y);
llvm::Value *one, *two;

llvm::Constant* addfn 
   = llvm::ConstantInt::get(JB->getIntPtrTy(DataLayout), (intptr_t)add); 
llvm::Type* args[] = { Int32Ty, Int32Ty };
llvm::FunctionType* ftype = llvm::FunctionType::get(Int32Ty, args);
addfn = llvm::ConstantExpr::getPointerCast(addfn, ftype);
CreateCall(addfn, one, two);

有办法吗?还是我必须调用 getOrInsertFunction?

4

1 回答 1

0

看起来这样有效:

static int add(int x, int y) { return x + y; }

llvm::Constant* addfn 
  = llvm::ConstantInt::get(Builder->getIntPtrTy(DataLayout), (intptr_t)add);
llvm::FunctionType* ftype = 0;
{
    llvm::Type* args[] = { Int32Ty, Int32Ty };
    ftype = ftype->get(Int32Ty, args);
}
llvm::Constant* pp 
  = llvm::ConstantExpr::getIntToPtr(addfn, llvm::PointerType::getUnqual(ftype));
addfn = llvm::ConstantExpr::getPointerCast(pp, ftype->getPointerTo());
jit_value_t sum = JB->CreateCall2(addfn, Value1, Value2);
于 2014-10-28T09:30:39.457 回答