llvm - LLVM 中是否有带有命名参数的 FunctionType?
问题描述
在 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);
…
}
我认为现在有一种更漂亮的方法来编写该循环。
推荐阅读
- nginx - nginx如何在域名后添加语言代码
- python - Python冒泡排序没有对整个列表进行排序
- c++ - (b&(1<> i) & 1) C++
- c++ - 如何根据 cpp 模板中的实际类型调用整数类型?
- javascript - 为什么当我在 angularjs 中使用 ES6 语法时 gulp-uglify 不起作用
- javascript - javascript 不返回所需的值
- java - 如何在 Scala 中为 Kafka (ConsumerRebalanceListener) 实现 Java 接口?
- vba - 查找和替换表中的值
- html - 做一个
标签更易于访问
- c# - 使用多个文本框进行 SQL LIKE 搜索?