mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-28 09:31:03 +00:00
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:
parent
97c2a0a110
commit
b5a8a905ae
@ -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
|
||||||
------
|
------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user