summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SLPVectorizer
Commit message (Collapse)AuthorAgeFilesLines
...
* Erase all of the instructions that we RAUWedNadav Rotem2013-06-261-1/+1
| | | | llvm-svn: 184969
* Do not add cse-ed instructions into the visited map because we dont want to ↵Nadav Rotem2013-06-261-0/+84
| | | | | | consider them as a candidate for replacement of instructions to be visited. llvm-svn: 184966
* SLPVectorizer: support slp-vectorization of PHINodes between basic blocksNadav Rotem2013-06-251-0/+46
| | | | llvm-svn: 184888
* SLP Vectorizer: Add support for vectorizing parts of the tree.Nadav Rotem2013-06-241-0/+46
| | | | | | | | | | | | Untill now we detected the vectorizable tree and evaluated the cost of the entire tree. With this patch we can decide to trim-out branches of the tree that are not profitable to vectorizer. Also, increase the max depth from 6 to 12. In the worse possible case where all of the code is made of diamond-shaped graph this can bring the cost to 2**10, but diamonds are not very common. llvm-svn: 184681
* SLP Vectorizer: Fix a bug in the code that does CSE on the generated gather ↵Nadav Rotem2013-06-231-0/+51
| | | | | | | | sequences. Make sure that we don't replace and RAUW two sequences if one does not dominate the other. llvm-svn: 184674
* SLP Vectorizer: Implement a simple CSE optimization for the gather sequences.Nadav Rotem2013-06-231-0/+85
| | | | llvm-svn: 184660
* SLP Vectorizer: Implement multi-block slp-vectorization.Nadav Rotem2013-06-223-5/+60
| | | | | | | | | Rewrote the SLP-vectorization as a whole-function vectorization pass. It is now able to vectorize chains across multiple basic blocks. It still does not vectorize PHIs, but this should be easy to do now that we scan the entire function. I removed the support for extracting values from trees. We are now able to vectorize more programs, but there are some serious regressions in many workloads (such as flops-6 and mandel-2). llvm-svn: 184647
* SLPVectorization: Add a basic support for cross-basic block slp vectorization.Nadav Rotem2013-06-201-0/+54
| | | | | | | We collect gather sequences when we vectorize basic blocks. Gather sequences are excellent hints for vectorization of other basic blocks. llvm-svn: 184444
* SLPVectorizer: handle scalars that are extracted from vectors (using ↵Nadav Rotem2013-06-191-0/+59
| | | | | | ExtractElementInst). llvm-svn: 184325
* SLPVectorizer: start constructing chains at stores that are not power of two.Nadav Rotem2013-06-191-0/+46
| | | | | | | | The type <3 x i8> is a common in graphics and we want to be able to vectorize it. This changes accelerates bullet by 12% and 471_omnetpp by 5%. llvm-svn: 184317
* SLPVectorizer: vectorize compares and selects.Nadav Rotem2013-06-191-0/+32
| | | | llvm-svn: 184282
* SLPVectorizer: Change the order in which new instructions are added to the ↵Nadav Rotem2013-05-224-1/+104
| | | | | | | | | | | | function. We are not working on a DAG and I ran into a number of problems when I enabled the vectorizations of 'diamond-trees' (trees that share leafs). * Imroved the numbering API. * Changed the placement of new instructions to the last root. * Fixed a bug with external tree users with non-zero lane. * Fixed a bug in the placement of in-tree users. llvm-svn: 182508
* SLPVectorizer: Fix a bug in the code that generates extracts for values with ↵Nadav Rotem2013-05-121-2/+30
| | | | | | | | multiple users. The external user does not have to be in lane #0. We have to save the lane for each scalar so that we know which vector lane to extract. llvm-svn: 181674
* SLPVectorizer: Add support for trees with external users.Nadav Rotem2013-05-101-4/+5
| | | | | | | | | | | | | For example: bar() { int a = A[i]; int b = A[i+1]; B[i] = a; B[i+1] = b; foo(a); <--- a is used outside the vectorized expression. } llvm-svn: 181648
* TBAA: remove !tbaa from testing cases if not used.Manman Ren2013-04-301-20/+16
| | | | | | | This will make it easier to turn on struct-path aware TBAA since the metadata format will change. llvm-svn: 180796
* SLPVectorize: Add support for vectorization of casts.Nadav Rotem2013-04-211-0/+38
| | | | llvm-svn: 179975
* Fix PR15800. Do not try to vectorize vectors and structs.Nadav Rotem2013-04-201-0/+14
| | | | llvm-svn: 179960
* SLPVectorizer: Improve the cost model for loop invariant broadcast values.Nadav Rotem2013-04-201-0/+73
| | | | llvm-svn: 179930
* SLPVectorizer: Make it a function pass and add code for hoisting the ↵Nadav Rotem2013-04-151-0/+59
| | | | | | vector-gather sequence out of loops. llvm-svn: 179562
* Revert "Recommit r179497 after fixing uninitialized variable." untilEric Christopher2013-04-152-0/+6
| | | | | | | | | | | I can fix the testcases here: http://lab.llvm.org:8011/builders/clang-native-arm-cortex-a9/builds/6952 This reverts commit r179512 due to testcases specifying triples that they didn't actually mean and causing failures on other platforms. llvm-svn: 179513
* Recommit r179497 after fixing uninitialized variable.Eric Christopher2013-04-152-6/+0
| | | | llvm-svn: 179512
* SLPVectorizer: Add support for vectorizing trees that start at compare ↵Nadav Rotem2013-04-151-0/+53
| | | | | | instructions. llvm-svn: 179504
* Revert "Remove some unused triple and data layout."Eric Christopher2013-04-142-0/+6
| | | | | | This reverts commit r179497 and the accompanying commit as it broke random platforms that aren't osx. llvm-svn: 179499
* Remove some unused triple and data layout.Eric Christopher2013-04-142-6/+0
| | | | llvm-svn: 179498
* Make the command line triple match the module triple.Nadav Rotem2013-04-142-2/+2
| | | | llvm-svn: 179492
* Remove unused function attributes.Nadav Rotem2013-04-149-74/+46
| | | | llvm-svn: 179476
* SLPVectorizer: Add support for trees that don't start at binary operators, ↵Nadav Rotem2013-04-141-0/+37
| | | | | | and add the cost of extracting values from the roots of the tree. llvm-svn: 179475
* SLPVectorizer: add initial support for reduction variable vectorization.Nadav Rotem2013-04-141-0/+52
| | | | llvm-svn: 179470
* SLPVectorizer: add support for vectorization of diamond shaped trees. We now ↵Nadav Rotem2013-04-121-0/+83
| | | | | | perform a preliminary traversal of the graph to collect values with multiple users and check where the users came from. llvm-svn: 179414
* Make the SLP store-merger less paranoid about function calls. We check for ↵Nadav Rotem2013-04-101-0/+40
| | | | | | function calls when we check if it is safe to sink instructions. llvm-svn: 179207
* Add support for bottom-up SLP vectorization infrastructure.Nadav Rotem2013-04-097-0/+280
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]; } llvm-svn: 179117
OpenPOWER on IntegriCloud