如何检查两个 GEP 指令在语义上是否相等?

How can I check if two GEP instructions are semantically equal or not?

我有两个如下所示的 GEP 指令:

%size = getelementptr inbounds %struct.ArrayInfo, %struct.ArrayInfo* %0, i32 0, i32 0

...
%size = getelementptr inbounds %struct.ArrayInfo, %struct.ArrayInfo* %1, i32 0, i32 0

这两个本质上访问的是同一个结构字段。有没有办法检查这两条指令在 llvm 中是否等效?我尝试比较 GEPOperator (GEPOperator*) 的指针,但看起来它们是不同的。

尝试isSameOperationAs()。如果您将示例中的两个 size 变量都转换为 llvm::Instruction 并在其中一个上调用此方法并将另一个作为参数,您将获得一个 true 值。