Thanks Guys for the information. I now understand!<br><br><div class="gmail_quote">On Mon, Mar 28, 2011 at 4:16 PM, Jeffrey Yasskin <span dir="ltr"><<a href="mailto:jyasskin@google.com">jyasskin@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Mon, Mar 28, 2011 at 12:48 PM, George Baah <<a href="mailto:georgebaah@gmail.com">georgebaah@gmail.com</a>> wrote:<br>

> Oh I see what you mean but I don't think that is the value that I want.<br>
> In the code, I know that<br>
> %N = load i32* %k, align 4<br>
> %p = getelementptr inbounds [10 x [20 x i32]]* %3, i32 0, i32 %M, i32 %N<br>
> So I analyze the GEP and know that %N is a pointer to an int32, which is the<br>
> array index.<br>
<br>
</div>p->getOperand(3) will return %N as an llvm::Value(). Then you can use<br>
dyn_cast<llvm::ConstantInt> to see if it's a ConstantInt as opposed to<br>
a run-time variable (or some other flavor of constant like a<br>
ConstantExpr), and then you can pull the value out using getValue() or<br>
get{Z,S}ExtValue().<br>
<div><div></div><div class="h5"><br>
> I want to get that index so I can insert a check to see if it violates the<br>
> array bounds.<br>
> So the final code (in pseudocode) will look like,<br>
> %N = load i32* %k, align 4<br>
> if( 0 <= %N < array-size){<br>
>  %p = getelementptr inbounds [10 x [20 x i32]]* %3, i32 0, i32 %M, i32 %N<br>
>  ...<br>
> }else{<br>
>  throw an exception.<br>
> }<br>
><br>
> On Mon, Mar 28, 2011 at 3:25 PM, Duncan Sands <<a href="mailto:baldrick@free.fr">baldrick@free.fr</a>> wrote:<br>
>><br>
>> Hi George,<br>
>><br>
>>>  For this example,<br>
>>>   getelementptr inbounds [10 x [20 x i32]]* %3, i32 0, i32 %M, i32 %N<br>
>>> I am trying to retrieve %N and instrument the program to see if the value<br>
>>> pointed to by  %N exceeds the array bound (10). I assume that<br>
>>> %N will be associated with a load instruction. I have searched through<br>
>>> all the tutorials etc. and still have no clue as to how to do this, that<br>
>>> is,<br>
>>> get the value and then instrument the code.<br>
>><br>
>> if<br>
>>  %p = getelementptr inbounds [10 x [20 x i32]]* %3, i32 0, i32 %M, i32 %N<br>
>> then you need an instruction<br>
>>  %v = load %p<br>
>> to get the value %v pointed to by %p.<br>
>><br>
>> Ciao, Duncan.<br>
>><br>
>>><br>
>>> George<br>
>>><br>
>>> On Mon, Mar 28, 2011 at 4:32 AM, Duncan Sands <<a href="mailto:baldrick@free.fr">baldrick@free.fr</a><br>
>>> <mailto:<a href="mailto:baldrick@free.fr">baldrick@free.fr</a>>> wrote:<br>
>>><br>
>>>    Hi George,<br>
>>><br>
>>>     >    I am trying to get the first index into this two-dimensional<br>
>>> array,<br>
>>>    that is *5.*<br>
>>><br>
>>>    not sure what you mean, but if you think of your array as being a 10 x<br>
>>> 20 matrix<br>
>>>    then to get a pointer to element M,N you would do:<br>
>>>       getelementptr inbounds [10 x [20 x i32]]* %3, i32 0, i32 %M, i32 %N<br>
>>><br>
>>>     ><br>
>>>     > %4 = getelementptr inbounds [10 x [20 x i32]]* %3, i32 0, i32 *5*<br>
>>>     > *<br>
>>>     > *<br>
>>>     > I can iterate over the GEP and get the types of the operands but<br>
>>> not the<br>
>>>    values.<br>
>>>     ><br>
>>>     > How do I get the value (5)?<br>
>>><br>
>>>    getelementptr only does pointer arithmetic, i.e. using it you can get<br>
>>> a pointer<br>
>>>    to an array element.  But to get the element itself you need to use a<br>
>>> load<br>
>>>    instruction to load the value pointed to by the pointer.<br>
>>><br>
>>>    Ciao, Duncan.<br>
>>>    _______________________________________________<br>
>>>    LLVM Developers mailing list<br>
>>>    <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a> <mailto:<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>><br>
>>> <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
>>>    <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
>>><br>
>>><br>
>><br>
><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
</div></div>> <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<div><div></div><div class="h5">> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
><br>
><br>
</div></div></blockquote></div><br>