[LLVMdev] linearizing aggregates

Duncan Sands baldrick at free.fr
Mon Apr 11 23:21:11 PDT 2011

Hi shrey,

>    I would like to address  aggregates (structures, arrays)  in a
> linear fashion and in terms of the simplest target type that is
> embedded in these data structures,   So a 2 dimensional array becomes
> a single dimension array. A structure with a character and array is
> addressed in terms of the target size of character.  So hopefully
> express the
> address calculation in terms of one GEP(base, offset) or if  GEP cant
> express it  use my intrinsic.
> Is that feasible ? If so, can that be done as a bc transformation.

it sounds like you want to turn GEP into pointer arithmetic.  It is easy
to do this directly, but here is a trick: suppose you originally have
   %p = GEP(base, offset0, offset1, ...)
   %q = GEP(0, offset0, offset1, ...)
i.e. where you replaced base by a null pointer.  Now do
   %r = ptrtoint %q to i64
So %r holds the offset in octets from base.  Then the original GEP is the
same as
   $p2 = GEP(base, %r)

Ciao, Duncan.

PS: If you constant fold %r probably it will get turned into a more explicit

More information about the llvm-dev mailing list