我正在迁移旧的代码库,并将一些操作移至新功能(f)。
在旧版本中,我们创建了一个字符串(char数组)并将其传递给函数(g)。在新版本中,将创建字符串并将其传递给函数(f),在该函数中调用(g)。
因此,使用“入站” getelementptr指令将char数组(str)传递给(g):
auto ptr = llvm::ConstantExpr::getInBoundsGetElementPtr(llvm::Type::getInt8Ty(context), str, get_elemptr_args);
在新版本中,我没有与(f)中的(str)对应的llvm :: Constant *,因为它以llvm :: Argument *的形式传递。如何使用llvm :: Argument *调用getInBoundGetElementPtr?
// create string globalvariable and call (f)
auto str = add_int8Array_global_variable(name, llvm::GlobalValue::CommonLinkage);
/* ... */
call_function("f", llvm::FunctionType::get(llvm::Type::getInt32Ty(context), llvm::Type::getInt8PtrTy(context)), {str});
// in f
llvm::Function::arg_iterator args = f->arg_begin();
auto str = args++;
auto ptr = ??? // here, getInBoundElementPtr want a Constant*, not a Argument* or a Value*.
// call (g) with the string as argument.
我应该简单地使用常规的getElementPtr指令吗?