比较LLVM值的类型

4

我正在尝试比较一个LLVM类型和一个Type*。我正在使用LLVM C API。有没有可能的方法可以做到这一点?

我有一个Type*,因为我使用了LLVMTypeOf API从LLVM值中获取类型。所以如果我可以从一个值中获取类型,那么它也会解决这个问题。

3个回答

4

在LLVM世界中,类型是独一无二的,因此您可以比较它们的地址。


2
为了更加清晰,扩展之前的回答并提供一个合适的llvm-c代码示例,您可以像比较任何两个指针一样比较两个LLVMTypeRef以检查它们是否相等。
LLVMTypeRef type1 = whatever1();  // e.g. LLVMTypeOf(...)
LLVMTypeRef type2 = whatever2();  // e.g. LLVMDoubleType()
if (type1 == type2)
{
    // the two types are equal
}

0

您可以直接比较两个值的LLVM类型。例如:

llvm/lib/Analysis/BasicAliasAnalysis.cpp:967

          GEP1->getPointerOperandType() == GEP2->getPointerOperandType() &&

你能使用 LLVMGetTypeKind 吗?每个类型都返回一个唯一的 LLVMTypeKind。 - A. K.
嘿,问题是我必须比较一个指向类型的指针和一个类型。 - Destructor
你应该能够从Type*中获取Type,对吗?然后再比较这两种类型。 - A. K.
这就是问题所在。我无法弄清如何从 LLVM C API 中的 type* 获取类型。感谢您迄今所做的所有澄清。 - Destructor
1
你可以使用 LLVMTypeRef LLVMTypeOf(LLVMValueRef Val) 函数,通过传递一个 Type 类型的对象来获取类型。另一种方法是使用 LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name); 函数,通过传递 Type* 的名称来获取类型。 - A. K.
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接