Commit 91380570 authored by Nadav Rotem's avatar Nadav Rotem
Browse files

Update the vectorizer docs.

llvm-svn: 167688
parent 9cf328b5
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -473,15 +473,31 @@ Release Notes</a>.</h1>
    <b>-mllvm -force-vector-width=4</b>.
    The default value is <b>0</b> which means auto-select.
    <br/>
    We can now vectorize this code:
    We can now vectorize this function:

    <pre class="doc_code">
    for (i=0; i&lt;n; i++) {
      a[i] = b[i+1] + c[i+3] + i;
      sum += d[i];
    unsigned sum_arrays(int *A, int *B, int start, int end) {
      unsigned sum = 0;
      for (int i = start; i &lt; end; ++i)
        sum += A[i] + B[i] + i;

      return sum;
    }
    </pre>

    We vectorize under the following loops:
    <ul>
    <li>The inner most loops must have a single basic block.</li>
    <li>The number of iterations are known before the loop starts to execute.</li>
    <li>The loop counter needs to be incrimented by one.</li>
    <li>The loop trip count <b>can</b> be a variable.</li>
    <li>Loops do <b>not</b> need to start at zero.</li>
    <li>The induction variable can be used inside the loop.</li>
    <li>Loop reductions are supported.</li>
    <li>Arrays with affine access pattern do <b>not</b> need to be marked as 'noalias' and are checked at runtime.</li>
    <li>...</li>
    </ul>

</p>

<p>SROA - We've re-written SROA to be significantly more powerful.