The SLP Vectorizer works across basic blocks. Update the docs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184973 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nadav Rotem 2013-06-26 17:59:35 +00:00
parent 97c2a0a110
commit b5a8a905ae

View File

@ -7,11 +7,11 @@ Auto-Vectorization in LLVM
LLVM has two vectorizers: The :ref:`Loop Vectorizer <loop-vectorizer>`, LLVM has two vectorizers: The :ref:`Loop Vectorizer <loop-vectorizer>`,
which operates on Loops, and the :ref:`SLP Vectorizer which operates on Loops, and the :ref:`SLP Vectorizer
<slp-vectorizer>`, which optimizes straight-line code. These vectorizers <slp-vectorizer>`. These vectorizers
focus on different optimization opportunities and use different techniques. focus on different optimization opportunities and use different techniques.
The SLP vectorizer merges multiple scalars that are found in the code into The SLP vectorizer merges multiple scalars that are found in the code into
vectors while the Loop Vectorizer widens instructions in the original loop vectors while the Loop Vectorizer widens instructions in loops
to operate on multiple consecutive loop iterations. to operate on multiple consecutive iterations.
.. _loop-vectorizer: .. _loop-vectorizer:
@ -302,10 +302,9 @@ Details
------- -------
The goal of SLP vectorization (a.k.a. superword-level parallelism) is The goal of SLP vectorization (a.k.a. superword-level parallelism) is
to combine similar independent instructions within simple control-flow regions to combine similar independent instructions
into vector instructions. Memory accesses, arithemetic operations, comparison into vector instructions. Memory accesses, arithmetic operations, comparison
operations and some math functions can all be vectorized using this technique operations, PHI-nodes, can all be vectorized using this technique.
(subject to the capabilities of the target architecture).
For example, the following function performs very similar operations on its For example, the following function performs very similar operations on its
inputs (a1, b1) and (a2, b2). The basic-block vectorizer may combine these inputs (a1, b1) and (a2, b2). The basic-block vectorizer may combine these
@ -318,8 +317,7 @@ into vector operations.
A[1] = a2*(a2 + b2)/b2 + 50*b2/a2; A[1] = a2*(a2 + b2)/b2 + 50*b2/a2;
} }
The SLP-vectorizer has two phases, bottom-up, and top-down. The top-down vectorization The SLP-vectorizer processes the code bottom-up, across basic blocks, in search of scalars to combine.
phase is more aggressive, but takes more time to run.
Usage Usage
------ ------