[LLVMdev] Get Element Ptr inst

Arushi Aggarwal arushi987 at gmail.com
Thu Feb 24 09:27:49 PST 2011


Thanks John. You are right.

Is this also true for constant GEP expressions? Do they also create a
pointer to the calculated type? The language manual does not state so
explicitly.

Arushi

On Thu, Feb 24, 2011 at 10:47 AM, John Criswell <criswell at illinois.edu>wrote:

> On 2/24/11 10:39 AM, Arushi Aggarwal wrote:
>
>> Given 2 GEPs as follows,
>>
>> %tmp124 = getelementptr inbounds %struct.termbox* %termptr.1, i32 0, i32
>> 5, !dbg !1051 ; <[2 x i16]*> [#uses=1]
>>  %tmp125 = getelementptr inbounds [2 x i16]* %tmp124, i64 0, i64 0, !dbg
>> !1051 ; <i16*> [#uses=1]
>>
>> can I replace the 2nd one with
>>
>> %tmp126 = getelementptr inbounds %struct.termbox* %termptr.1, i32 0, i32
>> 5, i64 0, i64 0 ; <i16*>
>>
>
> You should double-check the LangRef manual, but I think the problem stems
> from the fact that a GEP returns a pointer to the type found after all
> indexing is completed.
>
> So, in %tmp124, indexing %termptr.1 by i32 0 and i32 5 yields a [2xi16]
> type, and then the result of the GEP is a pointer to that, which is of type
> [2xi16] *.
>
> In the new GEP you've created, I think you can remove the first i64 0 index
> because the result of indexing i32 0 and i32 5 is a [2 x i16] and not a [2 x
> i16] *.
>
> -- John T.
>
>
>
>> When I try to create this instruction i get the follwoing error,
>>
>> opt: /home/vadve/aggarwa4/llvm27/llvm-2.7/include/llvm/Instructions.h:276:
>> const llvm::Type* llvm::checkType(const llvm::Type*): Assertion `Ty &&
>> "Invalid GetElementPtrInst indices for type!"' failed.
>>
>> Thanks!
>> Arushi
>>
>>
>>
>>
>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110224/56e850bd/attachment.html>


More information about the llvm-dev mailing list