[LLVMdev] Get Element Ptr inst

John Criswell criswell at illinois.edu
Thu Feb 24 08:47:22 PST 2011


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
>
>
>
>
>
>
>




More information about the llvm-dev mailing list