Add support for bottom-up SLP vectorization infrastructure.
authorNadav Rotem <nrotem@apple.com>
Tue, 9 Apr 2013 19:44:35 +0000 (19:44 +0000)
committerNadav Rotem <nrotem@apple.com>
Tue, 9 Apr 2013 19:44:35 +0000 (19:44 +0000)
commit8383b539ff4c039108ee0c202a27b787621d96cf
treea94c718adf657b35e9c1581987a588bac83242f1
parent376e05fd7ba37b76ea26fa7604671c9abd32307e
Add support for bottom-up SLP vectorization infrastructure.

This commit adds the infrastructure for performing bottom-up SLP vectorization (and other optimizations) on parallel computations.
The infrastructure has three potential users:

  1. The loop vectorizer needs to be able to vectorize AOS data structures such as (sum += A[i] + A[i+1]).

  2. The BB-vectorizer needs this infrastructure for bottom-up SLP vectorization, because bottom-up vectorization is faster to compute.

  3. A loop-roller needs to be able to analyze consecutive chains and roll them into a loop, in order to reduce code size. A loop roller does not need to create vector instructions, and this infrastructure separates the chain analysis from the vectorization.

This patch also includes a simple (100 LOC) bottom up SLP vectorizer that uses the infrastructure, and can vectorize this code:

void SAXPY(int *x, int *y, int a, int i) {
  x[i]   = a * x[i]   + y[i];
  x[i+1] = a * x[i+1] + y[i+1];
  x[i+2] = a * x[i+2] + y[i+2];
  x[i+3] = a * x[i+3] + y[i+3];
}

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179117 91177308-0d34-0410-b5e6-96231b3b80d8
15 files changed:
include/llvm/InitializePasses.h
include/llvm/LinkAllPasses.h
include/llvm/Transforms/Vectorize.h
lib/Transforms/Vectorize/CMakeLists.txt
lib/Transforms/Vectorize/SLPVectorizer.cpp [new file with mode: 0644]
lib/Transforms/Vectorize/VecUtils.cpp [new file with mode: 0644]
lib/Transforms/Vectorize/VecUtils.h [new file with mode: 0644]
lib/Transforms/Vectorize/Vectorize.cpp
test/Transforms/SLPVectorizer/X86/flag.ll [new file with mode: 0644]
test/Transforms/SLPVectorizer/X86/lit.local.cfg [new file with mode: 0644]
test/Transforms/SLPVectorizer/X86/multi_user.ll [new file with mode: 0644]
test/Transforms/SLPVectorizer/X86/saxpy.ll [new file with mode: 0644]
test/Transforms/SLPVectorizer/X86/simple-loop.ll [new file with mode: 0644]
test/Transforms/SLPVectorizer/X86/simplebb.ll [new file with mode: 0644]
test/Transforms/SLPVectorizer/lit.local.cfg [new file with mode: 0644]