【问题标题】:Is there a FunctionType with named arguments in LLVM?LLVM 中是否有带有命名参数的 FunctionType?
【发布时间】:2019-11-20 14:20:13
【问题描述】:

在 LLVM 中,函数如下所示:

define i32 @foo(i32, i32)

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

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

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

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

【问题讨论】:

标签: llvm llvm-c++-api


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    相关资源
    最近更新 更多