<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>The Often Misunderstood GEP Instruction</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
  <style type="text/css">
    TABLE   { text-align: left; border: 1px solid black; border-collapse: collapse; margin: 0 0 0 0; }
  </style>
</head>
<body>

<h1>
  The Often Misunderstood GEP Instruction
</h1>

<ol>
  <li><a href="#intro">Introduction</a></li>
  <li><a href="#addresses">Address Computation</a>
  <ol>
    <li><a href="#extra_index">Why is the extra 0 index required?</a></li>
    <li><a href="#deref">What is dereferenced by GEP?</a></li>
    <li><a href="#firstptr">Why can you index through the first pointer but not
      subsequent ones?</a></li>
    <li><a href="#lead0">Why don't GEP x,0,0,1 and GEP x,1 alias? </a></li>
    <li><a href="#trail0">Why do GEP x,1,0,0 and GEP x,1 alias? </a></li>
    <li><a href="#vectors">Can GEP index into vector elements?</a>
    <li><a href="#addrspace">What effect do address spaces have on GEPs?</a>
    <li><a href="#int">How is GEP different from ptrtoint, arithmetic, and inttoptr?</a></li>
    <li><a href="#be">I'm writing a backend for a target which needs custom lowering for GEP. How do I do this?</a>
    <li><a href="#vla">How does VLA addressing work with GEPs?</a>
  </ol></li>
  <li><a href="#rules">Rules</a>
  <ol>
    <li><a href="#bounds">What happens if an array index is out of bounds?</a>
    <li><a href="#negative">Can array indices be negative?</a>
    <li><a href="#compare">Can I compare two values computed with GEPs?</a>
    <li><a href="#types">Can I do GEP with a different pointer type than the type of the underlying object?</a>
    <li><a href="#null">Can I cast an object's address to integer and add it to null?</a>
    <li><a href="#ptrdiff">Can I compute the distance between two objects, and add that value to one address to compute the other address?</a>
    <li><a href="#tbaa">Can I do type-based alias analysis on LLVM IR?</a>
    <li><a href="#overflow">What happens if a GEP computation overflows?</a>
    <li><a href="#check">How can I tell if my front-end is following the rules?</a>
  </ol></li>
  <li><a href="#rationale">Rationale</a>
  <ol>
    <li><a href="#goals">Why is GEP designed this way?</a></li>
    <li><a href="#i32">Why do struct member indices always use i32?</a></li>
    <li><a href="#uglygep">What's an uglygep?</a>
  </ol></li>
  <li><a href="#summary">Summary</a></li>
</ol>

<div class="doc_author">
  <p>Written by: <a href="mailto:rspencer@reidspencer.com">Reid Spencer</a>.</p>
</div>


<!-- *********************************************************************** -->
<h2><a name="intro">Introduction</a></h2>
<!-- *********************************************************************** -->

<div>
  <p>This document seeks to dispel the mystery and confusion surrounding LLVM's
  <a href="LangRef.html#i_getelementptr">GetElementPtr</a> (GEP) instruction.
  Questions about the wily GEP instruction are
  probably the most frequently occurring questions once a developer gets down to
  coding with LLVM. Here we lay out the sources of confusion and show that the
  GEP instruction is really quite simple.
  </p>
</div>

<!-- *********************************************************************** -->
<h2><a name="addresses">Address Computation</a></h2>
<!-- *********************************************************************** -->
<div>
  <p>When people are first confronted with the GEP instruction, they tend to
  relate it to known concepts from other programming paradigms, most notably C
  array indexing and field selection. GEP closely resembles C array indexing
  and field selection, however it's is a little different and this leads to
  the following questions.</p>

<!-- *********************************************************************** -->
<h3>
  <a name="firstptr">What is the first index of the GEP instruction?</a>
</h3>
<div>
  <p>Quick answer: The index stepping through the first operand.</p> 
  <p>The confusion with the first index usually arises from thinking about 
  the GetElementPtr instruction as if it was a C index operator. They aren't the
  same. For example, when we write, in "C":</p>

<div class="doc_code">
<pre>
AType *Foo;
...
X = &amp;Foo-&gt;F;
</pre>
</div>

  <p>it is natural to think that there is only one index, the selection of the
  field <tt>F</tt>.  However, in this example, <tt>Foo</tt> is a pointer. That 
  pointer must be indexed explicitly in LLVM. C, on the other hand, indices
  through it transparently.  To arrive at the same address location as the C 
  code, you would provide the GEP instruction with two index operands. The 
  first operand indexes through the pointer; the second operand indexes the 
  field <tt>F</tt> of the structure, just as if you wrote:</p>

<div class="doc_code">
<pre>
X = &amp;Foo[0].F;
</pre>
</div>

  <p>Sometimes this question gets rephrased as:</p>
  <blockquote><p><i>Why is it okay to index through the first pointer, but 
      subsequent pointers won't be dereferenced?</i></p></blockquote> 
  <p>The answer is simply because memory does not have to be accessed to 
  perform the computation. The first operand to the GEP instruction must be a 
  value of a pointer type. The value of the pointer is provided directly to 
  the GEP instruction as an operand without any need for accessing memory. It 
  must, therefore be indexed and requires an index operand. Consider this 
  example:</p>

<div class="doc_code">
<pre>
struct munger_struct {
  int f1;
  int f2;
};
void munge(struct munger_struct *P) {
  P[0].f1 = P[1].f1 + P[2].f2;
}
...
munger_struct Array[3];
...
munge(Array);
</pre>
</div>

  <p>In this "C" example, the front end compiler (llvm-gcc) will generate three
  GEP instructions for the three indices through "P" in the assignment
  statement.  The function argument <tt>P</tt> will be the first operand of each
  of these GEP instructions.  The second operand indexes through that pointer.
  The third operand will be the field offset into the 
  <tt>struct munger_struct</tt> type,  for either the <tt>f1</tt> or 
  <tt>f2</tt> field. So, in LLVM assembly the <tt>munge</tt> function looks 
  like:</p>

<div class="doc_code">
<pre>
void %munge(%struct.munger_struct* %P) {
entry:
  %tmp = getelementptr %struct.munger_struct* %P, i32 1, i32 0
  %tmp = load i32* %tmp
  %tmp6 = getelementptr %struct.munger_struct* %P, i32 2, i32 1
  %tmp7 = load i32* %tmp6
  %tmp8 = add i32 %tmp7, %tmp
  %tmp9 = getelementptr %struct.munger_struct* %P, i32 0, i32 0
  store i32 %tmp8, i32* %tmp9
  ret void
}
</pre>
</div>

  <p>In each case the first operand is the pointer through which the GEP
  instruction starts. The same is true whether the first operand is an
  argument, allocated memory, or a global variable. </p>
  <p>To make this clear, let's consider a more obtuse example:</p>

<div class="doc_code">
<pre>
%MyVar = uninitialized global i32
...
%idx1 = getelementptr i32* %MyVar, i64 0
%idx2 = getelementptr i32* %MyVar, i64 1
%idx3 = getelementptr i32* %MyVar, i64 2
</pre>
</div>

  <p>These GEP instructions are simply making address computations from the 
  base address of <tt>MyVar</tt>.  They compute, as follows (using C syntax):
  </p>

<div class="doc_code">
<pre>
idx1 = (char*) &amp;MyVar + 0
idx2 = (char*) &amp;MyVar + 4
idx3 = (char*) &amp;MyVar + 8
</pre>
</div>

  <p>Since the type <tt>i32</tt> is known to be four bytes long, the indices 
  0, 1 and 2 translate into memory offsets of 0, 4, and 8, respectively. No 
  memory is accessed to make these computations because the address of 
  <tt>%MyVar</tt> is passed directly to the GEP instructions.</p>
  <p>The obtuse part of this example is in the cases of <tt>%idx2</tt> and 
  <tt>%idx3</tt>. They result in the computation of addresses that point to
  memory past the end of the <tt>%MyVar</tt> global, which is only one
  <tt>i32</tt> long, not three <tt>i32</tt>s long.  While this is legal in LLVM,
  it is inadvisable because any load or store with the pointer that results 
  from these GEP instructions would produce undefined results.</p>
</div>

<!-- *********************************************************************** -->
<h3>
  <a name="extra_index">Why is the extra 0 index required?</a>
</h3>
<!-- *********************************************************************** -->
<div>
  <p>Quick answer: there are no superfluous indices.</p>
  <p>This question arises most often when the GEP instruction is applied to a
  global variable which is always a pointer type. For example, consider
  this:</p>

<div class="doc_code">
<pre>
%MyStruct = uninitialized global { float*, i32 }
...
%idx = getelementptr { float*, i32 }* %MyStruct, i64 0, i32 1
</pre>
</div>

  <p>The GEP above yields an <tt>i32*</tt> by indexing the <tt>i32</tt> typed 
  field of the structure <tt>%MyStruct</tt>. When people first look at it, they 
  wonder why the <tt>i64 0</tt> index is needed. However, a closer inspection 
  of how globals and GEPs work reveals the need. Becoming aware of the following
  facts will dispel the confusion:</p>
  <ol>
    <li>The type of <tt>%MyStruct</tt> is <i>not</i> <tt>{ float*, i32 }</tt> 
    but rather <tt>{ float*, i32 }*</tt>. That is, <tt>%MyStruct</tt> is a 
    pointer to a structure containing a pointer to a <tt>float</tt> and an 
    <tt>i32</tt>.</li>
    <li>Point #1 is evidenced by noticing the type of the first operand of 
    the GEP instruction (<tt>%MyStruct</tt>) which is 
    <tt>{ float*, i32 }*</tt>.</li>
    <li>The first index, <tt>i64 0</tt> is required to step over the global
    variable <tt>%MyStruct</tt>.  Since the first argument to the GEP
    instruction must always be a value of pointer type, the first index 
    steps through that pointer. A value of 0 means 0 elements offset from that
    pointer.</li>
    <li>The second index, <tt>i32 1</tt> selects the second field of the
    structure (the <tt>i32</tt>). </li>
  </ol>
</div>

<!-- *********************************************************************** -->
<h3>
  <a name="deref">What is dereferenced by GEP?</a>
</h3>
<div>
  <p>Quick answer: nothing.</p> 
  <p>The GetElementPtr instruction dereferences nothing. That is, it doesn't
  access memory in any way. That's what the Load and Store instructions are for.
  GEP is only involved in the computation of addresses. For example, consider 
  this:</p>

<div class="doc_code">
<pre>
%MyVar = uninitialized global { [40 x i32 ]* }
...
%idx = getelementptr { [40 x i32]* }* %MyVar, i64 0, i32 0, i64 0, i64 17
</pre>
</div>

  <p>In this example, we have a global variable, <tt>%MyVar</tt> that is a
  pointer to a structure containing a pointer to an array of 40 ints. The 
  GEP instruction seems to be accessing the 18th integer of the structure's
  array of ints. However, this is actually an illegal GEP instruction. It 
  won't compile. The reason is that the pointer in the structure <i>must</i>
  be dereferenced in order to index into the array of 40 ints. Since the 
  GEP instruction never accesses memory, it is illegal.</p>
  <p>In order to access the 18th integer in the array, you would need to do the
  following:</p>

<div class="doc_code">
<pre>
%idx = getelementptr { [40 x i32]* }* %, i64 0, i32 0
%arr = load [40 x i32]** %idx
%idx = getelementptr [40 x i32]* %arr, i64 0, i64 17
</pre>
</div>

  <p>In this case, we have to load the pointer in the structure with a load
  instruction before we can index into the array. If the example was changed 
  to:</p>

<div class="doc_code">
<pre>
%MyVar = uninitialized global { [40 x i32 ] }
...
%idx = getelementptr { [40 x i32] }*, i64 0, i32 0, i64 17
</pre>
</div>

  <p>then everything works fine. In this case, the structure does not contain a
  pointer and the GEP instruction can index through the global variable,
  into the first field of the structure and access the 18th <tt>i32</tt> in the 
  array there.</p>
</div>

<!-- *********************************************************************** -->
<h3>
  <a name="lead0">Why don't GEP x,0,0,1 and GEP x,1 alias?</a>
</h3>
<div>
  <p>Quick Answer: They compute different address locations.</p>
  <p>If you look at the first indices in these GEP
  instructions you find that they are different (0 and 1), therefore the address
  computation diverges with that index. Consider this example:</p>

<div class="doc_code">
<pre>
%MyVar = global { [10 x i32 ] }
%idx1 = getelementptr { [10 x i32 ] }* %MyVar, i64 0, i32 0, i64 1
%idx2 = getelementptr { [10 x i32 ] }* %MyVar, i64 1
</pre>
</div>

  <p>In this example, <tt>idx1</tt> computes the address of the second integer
  in the array that is in the structure in <tt>%MyVar</tt>, that is
  <tt>MyVar+4</tt>. The type of <tt>idx1</tt> is <tt>i32*</tt>. However,
  <tt>idx2</tt> computes the address of <i>the next</i> structure after
  <tt>%MyVar</tt>. The type of <tt>idx2</tt> is <tt>{ [10 x i32] }*</tt> and its
  value is equivalent to <tt>MyVar + 40</tt> because it indexes past the ten
  4-byte integers in <tt>MyVar</tt>. Obviously, in such a situation, the
  pointers don't alias.</p>

</div>

<!-- *********************************************************************** -->
<h3>
  <a name="trail0">Why do GEP x,1,0,0 and GEP x,1 alias?</a>
</h3>
<div>
  <p>Quick Answer: They compute the same address location.</p>
  <p>These two GEP instructions will compute the same address because indexing
  through the 0th element does not change the address. However, it does change
  the type. Consider this example:</p>

<div class="doc_code">
<pre>
%MyVar = global { [10 x i32 ] }
%idx1 = getelementptr { [10 x i32 ] }* %MyVar, i64 1, i32 0, i64 0
%idx2 = getelementptr { [10 x i32 ] }* %MyVar, i64 1
</pre>
</div>

  <p>In this example, the value of <tt>%idx1</tt> is <tt>%MyVar+40</tt> and
  its type is <tt>i32*</tt>. The value of <tt>%idx2</tt> is also 
  <tt>MyVar+40</tt> but its type is <tt>{ [10 x i32] }*</tt>.</p>
</div>

<!-- *********************************************************************** -->

<h3>
  <a name="vectors">Can GEP index into vector elements?</a>
</h3>
<div>
  <p>This hasn't always been forcefully disallowed, though it's not recommended.
     It leads to awkward special cases in the optimizers, and fundamental
     inconsistency in the IR. In the future, it will probably be outright
     disallowed.</p>

</div>

<!-- *********************************************************************** -->

<h3>
  <a name="addrspace">What effect do address spaces have on GEPs?</a>
</h3>
<div>
   <p>None, except that the address space qualifier on the first operand pointer
      type always matches the address space qualifier on the result type.</p>

</div>

<!-- *********************************************************************** -->

<h3>
  <a name="int">
    How is GEP different from ptrtoint, arithmetic, and inttoptr?
  </a>
</h3>
<div>
  <p>It's very similar; there are only subtle differences.</p>

  <p>With ptrtoint, you have to pick an integer type. One approach is to pick i64;
     this is safe on everything LLVM supports (LLVM internally assumes pointers
     are never wider than 64 bits in many places), and the optimizer will actually
     narrow the i64 arithmetic down to the actual pointer size on targets which
     don't support 64-bit arithmetic in most cases. However, there are some cases
     where it doesn't do this. With GEP you can avoid this problem.

  <p>Also, GEP carries additional pointer aliasing rules. It's invalid to take a
     GEP from one object, address into a different separately allocated
     object, and dereference it. IR producers (front-ends) must follow this rule,
     and consumers (optimizers, specifically alias analysis) benefit from being
     able to rely on it. See the <a href="#rules">Rules</a> section for more
     information.</p>

  <p>And, GEP is more concise in common cases.</p>

  <p>However, for the underlying integer computation implied, there
     is no difference.</p>

</div>

<!-- *********************************************************************** -->

<h3>
  <a name="be">
    I'm writing a backend for a target which needs custom lowering for GEP.
    How do I do this?
  </a>
</h3>
<div>
  <p>You don't. The integer computation implied by a GEP is target-independent.
     Typically what you'll need to do is make your backend pattern-match
     expressions trees involving ADD, MUL, etc., which are what GEP is lowered
     into. This has the advantage of letting your code work correctly in more
     cases.</p>

  <p>GEP does use target-dependent parameters for the size and layout of data
     types, which targets can customize.</p>

  <p>If you require support for addressing units which are not 8 bits, you'll
     need to fix a lot of code in the backend, with GEP lowering being only a
     small piece of the overall picture.</p>

</div>

<!-- *********************************************************************** -->

<h3>
  <a name="vla">How does VLA addressing work with GEPs?</a>
</h3>
<div>
  <p>GEPs don't natively support VLAs. LLVM's type system is entirely static,
     and GEP address computations are guided by an LLVM type.</p>

  <p>VLA indices can be implemented as linearized indices. For example, an
     expression like X[a][b][c], must be effectively lowered into a form
     like X[a*m+b*n+c], so that it appears to the GEP as a single-dimensional
     array reference.</p>

  <p>This means if you want to write an analysis which understands array
     indices and you want to support VLAs, your code will have to be
     prepared to reverse-engineer the linearization. One way to solve this
     problem is to use the ScalarEvolution library, which always presents
     VLA and non-VLA indexing in the same manner.</p>
</div>

</div>

<!-- *********************************************************************** -->
<h2><a name="rules">Rules</a></h2>
<!-- *********************************************************************** -->
<div>
<!-- *********************************************************************** -->

<h3>
  <a name="bounds">What happens if an array index is out of bounds?</a>
</h3>
<div>
  <p>There are two senses in which an array index can be out of bounds.</p>

  <p>First, there's the array type which comes from the (static) type of
     the first operand to the GEP. Indices greater than the number of elements
     in the corresponding static array type are valid. There is no problem with
     out of bounds indices in this sense. Indexing into an array only depends
     on the size of the array element, not the number of elements.</p>
     
  <p>A common example of how this is used is arrays where the size is not known.
     It's common to use array types with zero length to represent these. The
     fact that the static type says there are zero elements is irrelevant; it's
     perfectly valid to compute arbitrary element indices, as the computation
     only depends on the size of the array element, not the number of
     elements. Note that zero-sized arrays are not a special case here.</p>

  <p>This sense is unconnected with <tt>inbounds</tt> keyword. The
     <tt>inbounds</tt> keyword is designed to describe low-level pointer
     arithmetic overflow conditions, rather than high-level array
     indexing rules.

  <p>Analysis passes which wish to understand array indexing should not
     assume that the static array type bounds are respected.</p>

  <p>The second sense of being out of bounds is computing an address that's
     beyond the actual underlying allocated object.</p>

  <p>With the <tt>inbounds</tt> keyword, the result value of the GEP is
     undefined if the address is outside the actual underlying allocated
     object and not the address one-past-the-end.</p>

  <p>Without the <tt>inbounds</tt> keyword, there are no restrictions
     on computing out-of-bounds addresses. Obviously, performing a load or
     a store requires an address of allocated and sufficiently aligned
     memory. But the GEP itself is only concerned with computing addresses.</p>

</div>

<!-- *********************************************************************** -->
<h3>
  <a name="negative">Can array indices be negative?</a>
</h3>
<div>
  <p>Yes. This is basically a special case of array indices being out
     of bounds.</p>

</div>

<!-- *********************************************************************** -->
<h3>
  <a name="compare">Can I compare two values computed with GEPs?</a>
</h3>
<div>
  <p>Yes. If both addresses are within the same allocated object, or 
     one-past-the-end, you'll get the comparison result you expect. If either
     is outside of it, integer arithmetic wrapping may occur, so the
     comparison may not be meaningful.</p>

</div>

<!-- *********************************************************************** -->
<h3>
  <a name="types">
    Can I do GEP with a different pointer type than the type of
    the underlying object?
  </a>
</h3>
<div>
  <p>Yes. There are no restrictions on bitcasting a pointer value to an arbitrary
     pointer type. The types in a GEP serve only to define the parameters for the
     underlying integer computation. They need not correspond with the actual
     type of the underlying object.</p>

  <p>Furthermore, loads and stores don't have to use the same types as the type
     of the underlying object. Types in this context serve only to specify
     memory size and alignment. Beyond that there are merely a hint to the
     optimizer indicating how the value will likely be used.</p>

</div>

<!-- *********************************************************************** -->
<h3>
  <a name="null">
    Can I cast an object's address to integer and add it to null?
  </a>
</h3>
<div>
  <p>You can compute an address that way, but if you use GEP to do the add,
     you can't use that pointer to actually access the object, unless the
     object is managed outside of LLVM.</p>

  <p>The underlying integer computation is sufficiently defined; null has a
     defined value -- zero -- and you can add whatever value you want to it.</p>

  <p>However, it's invalid to access (load from or store to) an LLVM-aware
     object with such a pointer. This includes GlobalVariables, Allocas, and
     objects pointed to by noalias pointers.</p>

  <p>If you really need this functionality, you can do the arithmetic with
     explicit integer instructions, and use inttoptr to convert the result to
     an address. Most of GEP's special aliasing rules do not apply to pointers
     computed from ptrtoint, arithmetic, and inttoptr sequences.</p>

</div>

<!-- *********************************************************************** -->
<h3>
  <a name="ptrdiff">
    Can I compute the distance between two objects, and add
    that value to one address to compute the other address?
  </a>
</h3>
<div>
  <p>As with arithmetic on null, You can use GEP to compute an address that
     way, but you can't use that pointer to actually access the object if you
     do, unless the object is managed outside of LLVM.</p>

  <p>Also as above, ptrtoint and inttoptr provide an alternative way to do this
     which do not have this restriction.</p>

</div>

<!-- *********************************************************************** -->
<h3>
  <a name="tbaa">Can I do type-based alias analysis on LLVM IR?</a>
</h3>
<div>
  <p>You can't do type-based alias analysis using LLVM's built-in type system,
     because LLVM has no restrictions on mixing types in addressing, loads or
     stores.</p>

  <p>It would be possible to add special annotations to the IR, probably using
     metadata, to describe a different type system (such as the C type system),
     and do type-based aliasing on top of that. This is a much bigger
     undertaking though.</p>

</div>

<!-- *********************************************************************** -->

<h3>
  <a name="overflow">What happens if a GEP computation overflows?</a>
</h3>
<div>
   <p>If the GEP lacks the <tt>inbounds</tt> keyword, the value is the result
      from evaluating the implied two's complement integer computation. However,
      since there's no guarantee of where an object will be allocated in the
      address space, such values have limited meaning.</p>

  <p>If the GEP has the <tt>inbounds</tt> keyword, the result value is
     undefined (a "<a href="LangRef.html#trapvalues">trap value</a>") if the GEP
     overflows (i.e. wraps around the end of the address space).</p>
  
  <p>As such, there are some ramifications of this for inbounds GEPs: scales
     implied by array/vector/pointer indices are always known to be "nsw" since
     they are signed values that are scaled by the element size.  These values
     are also allowed to be negative (e.g. "gep i32 *%P, i32 -1") but the
     pointer itself is logically treated as an unsigned value.  This means that
     GEPs have an asymmetric relation between the pointer base (which is treated
     as unsigned) and the offset applied to it (which is treated as signed). The
     result of the additions within the offset calculation cannot have signed
     overflow, but when applied to the base pointer, there can be signed
     overflow.
  </p>
  

</div>

<!-- *********************************************************************** -->

<h3>
  <a name="check">
    How can I tell if my front-end is following the rules?
  </a>
</h3>
<div>
   <p>There is currently no checker for the getelementptr rules. Currently,
      the only way to do this is to manually check each place in your front-end
      where GetElementPtr operators are created.</p>

   <p>It's not possible to write a checker which could find all rule
      violations statically. It would be possible to write a checker which
      works by instrumenting the code with dynamic checks though. Alternatively,
      it would be possible to write a static checker which catches a subset of
      possible problems. However, no such checker exists today.</p>

</div>

</div>

<!-- *********************************************************************** -->
<h2><a name="rationale">Rationale</a></h2>
<!-- *********************************************************************** -->
<div>
<!-- *********************************************************************** -->

<h3>
  <a name="goals">Why is GEP designed this way?</a>
</h3>
<div>
   <p>The design of GEP has the following goals, in rough unofficial
      order of priority:</p>
   <ul>
     <li>Support C, C-like languages, and languages which can be
         conceptually lowered into C (this covers a lot).</li>
     <li>Support optimizations such as those that are common in
         C compilers. In particular, GEP is a cornerstone of LLVM's
         <a href="LangRef.html#pointeraliasing">pointer aliasing model</a>.</li>
     <li>Provide a consistent method for computing addresses so that
         address computations don't need to be a part of load and
         store instructions in the IR.</li>
     <li>Support non-C-like languages, to the extent that it doesn't
         interfere with other goals.</li>
     <li>Minimize target-specific information in the IR.</li>
   </ul>
</div>

<!-- *********************************************************************** -->
<h3>
  <a name="i32">Why do struct member indices always use i32?</a>
</h3>
<div>
  <p>The specific type i32 is probably just a historical artifact, however it's
     wide enough for all practical purposes, so there's been no need to change it.
     It doesn't necessarily imply i32 address arithmetic; it's just an identifier
     which identifies a field in a struct. Requiring that all struct indices be
     the same reduces the range of possibilities for cases where two GEPs are
     effectively the same but have distinct operand types.</p>

</div>

<!-- *********************************************************************** -->

<h3>
  <a name="uglygep">What's an uglygep?</a>
</h3>
<div>
  <p>Some LLVM optimizers operate on GEPs by internally lowering them into
     more primitive integer expressions, which allows them to be combined
     with other integer expressions and/or split into multiple separate
     integer expressions. If they've made non-trivial changes, translating
     back into LLVM IR can involve reverse-engineering the structure of
     the addressing in order to fit it into the static type of the original
     first operand. It isn't always possibly to fully reconstruct this
     structure; sometimes the underlying addressing doesn't correspond with
     the static type at all. In such cases the optimizer instead will emit
     a GEP with the base pointer casted to a simple address-unit pointer,
     using the name "uglygep". This isn't pretty, but it's just as
     valid, and it's sufficient to preserve the pointer aliasing guarantees
     that GEP provides.</p>

</div>

</div>

<!-- *********************************************************************** -->
<h2><a name="summary">Summary</a></h2>
<!-- *********************************************************************** -->

<div>
  <p>In summary, here's some things to always remember about the GetElementPtr
  instruction:</p>
  <ol>
    <li>The GEP instruction never accesses memory, it only provides pointer
    computations.</li>
    <li>The first operand to the GEP instruction is always a pointer and it must
    be indexed.</li>
    <li>There are no superfluous indices for the GEP instruction.</li>
    <li>Trailing zero indices are superfluous for pointer aliasing, but not for
    the types of the pointers.</li>
    <li>Leading zero indices are not superfluous for pointer aliasing nor the
    types of the pointers.</li>
  </ol>
</div>

<!-- *********************************************************************** -->

<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
  <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br/>
  Last modified: $Date: 2011-04-22 20:30:22 -0400 (Fri, 22 Apr 2011) $
</address>
</body>
</html>
