llvm ::参数“入站” getelementptr

时间:2019-09-05 13:54:22

标签: c++ llvm-c++-api

我正在迁移旧的代码库,并将一些操作移至新功能(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指令吗?

0 个答案:

没有答案