比较 LLVM 值的类型

Compare Types of LLVM values

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

我有 Type* 因为我使用 LLVMTypeOf api 从 LLVM 值中获取类型。因此,如果我可以从值 中获取 Type,它也可以解决问题。

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

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

llvm/lib/Analysis/BasicAliasAnalysis.cpp:967

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

为了清楚起见,并使用适当的 llvm-c 代码示例扩展先前的答案,您只需比较两个 LLVMTypeRef,就像比较任意两个指针以检查它们是否相等一样。

LLVMTypeRef type1 = whatever1();  // e.g. LLVMTypeOf(...)
LLVMTypeRef type2 = whatever2();  // e.g. LLVMDoubleType()
if (type1 == type2)
{
    // the two types are equal
}