4

在 LLVM-3.0 中,命名结构始终是唯一的,并且与其他结构相同的结构的指针相等不起作用。从他们关于 LLVM-3.0 types 的博客条目中,亮点是我的:

已识别的结构就是我们所说的那种:它们可以有一个名称,并且可以在创建类型之后指定它们的主体。识别的结构与其他结构类型不唯一,这就是为什么它们是用 StructType::create(...) 生成的。因为标识的类型可能是递归的,所以 asmprinter 总是按它们的名称打印它们(如果标识的结构没有名称,则打印类似 %42 的数字)。

这通过类型指针检查打破了类型相等检查。例如,haskell 包llvm依赖于 llvm 类型指针相等,用于编译时类型检查和类型转换。

有什么方法可以检查两个结构是否同构(相同的结构)?最好在 llvm-c api 中?

4

1 回答 1

2

在 C++ API 中,StructType类具有

bool StructType::isLayoutIdentical(StructType *Other) const

此函数遍历 StructTypes 的元素以查看它们是否相等。

于 2013-01-16T05:03:53.983 回答