[LLVMdev] compare two GEP instructions operand by operand

John Criswell criswell at illinois.edu
Tue Aug 30 08:35:20 PDT 2011


On 8/30/11 10:10 AM, Jimborean Alexandra wrote:
> Hi,
>
> I have a question regarding the GEP instruction. Is it correct to 
> consider that two GEP instructions compute the same memory address if 
> and only if all their corresponding fields are equal?

It's more complicated than that.

First, all the operands of the GEP must be dynamically identical for all 
executions.  Second, the *type* of the pointer operands must be identical.

The first requirement means that you can't just statically look at the 
SSA values and figure out if they're identical.  Consider the following 
psuedo-LLVM IR/C code example:

while (x > 0) {
     y = gep p, 0, x
}

z = gep p, 0, x

The two GEPs have identical, static SSA operands but won't compute the 
same address because one is in a loop, and the other is not.  You have 
to tack on some additional requirements, like requiring that y and z be 
in the same basic block.  In short, you have to take control-dependence 
into account somehow.

The second requirement handles issues like the following:

p = global int
y = gep p, 0, x
z = gep cast p to char *, 0, x

Note that requirement 1 is fulfilled, but because p is an int * when 
calculating y and a char * when calculating z, y and z will not be the 
same values.

-- John T.


>
> For instance, for a two-dimensional array of integers, can we have two 
> GEP instructions that are equal?
>
>   %arrayidx = getelementptr [10 x [30 x i32]]* @main.B, i64 0, i64 0, 
> i64 %tmp157
>
>   %tmp = load i32* getelementptr inbounds ([10 x [30 x i32]]* @main.B, 
> i64 0, i64 3, i64 10), align 8
>
> although their corresponding indices are different? For instance if 
> %tmp157 goes out of the bounds of the line 0 and computes the address 
> of the 10th element in line 3.
>
>
> Thank you,
> Alexandra
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110830/c600aa99/attachment.html>


More information about the llvm-dev mailing list