LLVM 中是否有带命名参数的 FunctionType?

Is there a FunctionType with named arguments in LLVM?

在 LLVM 中,函数如下所示:

define i32 @foo(i32, i32)

通过玩 lli,我注意到这也被接受:

define i32 @foo(i32 %first-arg, i32 %second-arg)

然后可以从给定的名称访问参数。

我应该如何使用 C++ API 生成这样一个带有命名参数的函数?我检查了文档,似乎无法为 FunctionType::get 提供名称,因为它的第二个参数是 ArrayRef<Type *> 类型,其中没有名称字段(或 Twine)。

名称不是类型的一部分。在类型方面,每个 i32 都是相同的。但是,您可以在不影响类型的情况下设置函数参数的名称,就像您可以设置函数的名称一样。我从 LLVM 的中生代版本中抄写了一个 for 循环并添加了一个 setName() 调用,并且成功了:

for (Function::arg_iterator a = foo->arg_begin(), ae = foo->arg_end();
     a != ae;
     ++a) {
  …
  a->setName(bar->name);
  …
}

我假设现在有一种更漂亮的方式来编写该循环。