X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FVectorizers.rst;h=d565c2122c9a0be711abf71411ec2c4f5fa28b9c;hb=a4ea4a72031809911d77f543eb65175e00fe914e;hp=693a148fa547aaefedc28fe920dacfd216833155;hpb=fc175d97ffd4a8de2525173a653caca62321a0c4;p=oota-llvm.git diff --git a/docs/Vectorizers.rst b/docs/Vectorizers.rst index 693a148fa54..d565c2122c9 100644 --- a/docs/Vectorizers.rst +++ b/docs/Vectorizers.rst @@ -6,10 +6,10 @@ Auto-Vectorization in LLVM :local: LLVM has two vectorizers: The :ref:`Loop Vectorizer `, -which operates on Loops, and the :ref:`Basic Block Vectorizer -`, which optimizes straight-line code. These vectorizers +which operates on Loops, and the :ref:`SLP Vectorizer +`, which optimizes straight-line code. These vectorizers focus on different optimization opportunities and use different techniques. -The BB 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 to operate on multiple consecutive loop iterations. @@ -22,6 +22,7 @@ Usage ----- LLVM's Loop Vectorizer is now enabled by default for -O3. +We plan to enable parts of the Loop Vectorizer on -O2 and -Os in future releases. The vectorizer can be disabled using the command line: .. code-block:: console @@ -317,6 +318,8 @@ into vector operations. A[1] = a2*(a2 + b2)/b2 + 50*b2/a2; } +The SLP-vectorizer has two phases, bottom-up, and top-down. The top-down vectorization +phase is more aggressive, but takes more time to run. Usage ------ @@ -328,7 +331,7 @@ through clang using the command line flag: $ clang -fslp-vectorize file.c -LLVM has a second phase basic block vectorization phase +LLVM has a second basic block vectorization phase which is more compile-time intensive (The BB vectorizer). This optimization can be enabled through clang using the command line flag: