From: Sanjiv Gupta
The type of each index argument depends on the type it is indexing into. When indexing into a (packed) structure, only i32 integer constants are allowed. When indexing into an array, pointer or vector, -only integers of 16, 32 or 64 bits are allowed (also non-constants).16-bit -values will be sign extended to 32-bits if required, and 32-bit values +only integers of 16, 32 or 64 bits are allowed (also non-constants). 16-bit +values will be sign extended to 32-bits if required, and 32-bit values will be sign extended to 64-bits if required.
For example, let's consider a C code fragment and how it gets @@ -3719,7 +3719,7 @@ FAQ.
; yields i8*:eptr %eptr = getelementptr [12 x i8]* %aptr, i64 0, i32 1 ; yields i16*:iptr - %iptr = getelementptr [10 x i16]* @arr, i16 0, i16 0 + %iptr = getelementptr [10 x i32]* @arr, i16 0, i16 0