Matt Arsenault
3c71dabd88
Fix typo
...
llvm-svn: 188915
2013-08-21 18:54:47 +00:00
Arnold Schwaighofer
e1f3ab69d1
SLPVectorizer: Fix invalid iterator errors
...
Update iterator when the SLP vectorizer changes the instructions in the basic
block by restarting the traversal of the basic block.
Patch by Yi Jiang!
Fixes PR 16899.
llvm-svn: 188832
2013-08-20 21:21:45 +00:00
Joerg Sonnenberger
8e3050db51
PR 16899: Do not modify the basic block using the iterator, but keep the
...
next value. This avoids crashes due to invalidation.
Patch by Joey Gouly.
llvm-svn: 188605
2013-08-17 11:04:47 +00:00
Matt Arsenault
5cae894a13
Fix spelling
...
llvm-svn: 188506
2013-08-15 23:11:03 +00:00
Nadav Rotem
e23147bbd4
Fix PR16797 - Support PHINodes with multiple inputs from the same basic block.
...
Do not generate new vector values for the same entries because we know that the incoming values
from the same block must be identical.
llvm-svn: 188185
2013-08-12 17:46:44 +00:00
Nadav Rotem
5defea90e6
SLPVectorizer: Fix PR16777. PHInodes may use multiple extracted values that come from different blocks.
...
Thanks Alexey Samsonov.
llvm-svn: 187663
2013-08-02 18:40:24 +00:00
Nadav Rotem
d9c74cc6d3
SLPVectorier: update the debug location for the new instructions.
...
llvm-svn: 187363
2013-07-29 18:18:46 +00:00
Nadav Rotem
750e42cba3
Don't vectorize when the attribute NoImplicitFloat is used.
...
llvm-svn: 187340
2013-07-29 05:13:00 +00:00
Nadav Rotem
3e50c68956
Update the comment
...
llvm-svn: 187316
2013-07-27 23:28:47 +00:00
Nadav Rotem
cfd40da9b1
SLP Vectorier: Don't vectorize really short chains because they are already handled by the SelectionDAG store-vectorizer, which does a better job in deciding when to vectorize.
...
llvm-svn: 187267
2013-07-26 23:07:55 +00:00
Nadav Rotem
9ce0f779bc
SLP Vectorizer: Disable the vectorization of non power of two chains, such as <3 x float>, because we dont have a good cost model for these types.
...
llvm-svn: 187265
2013-07-26 22:53:11 +00:00
Nadav Rotem
cf0dcdc71c
When we vectorize across multiple basic blocks we may vectorize PHINodes that create a cycle. We already break the cycle on phi-nodes, but arithmetic operations are still uplicated. This patch adds code that checks if the operation that we are vectorizing was vectorized during the visit of the operands and uses this value if it can.
...
llvm-svn: 186883
2013-07-22 22:18:07 +00:00
Nadav Rotem
d7ff88a8d9
Delete unused helper functions.
...
llvm-svn: 186808
2013-07-22 05:19:22 +00:00
Nadav Rotem
f6bb6a464c
Revert a part of r186420. Don't forbid multiple store chains that merge.
...
llvm-svn: 186786
2013-07-21 06:12:57 +00:00
Nadav Rotem
e210839f5b
fix an 80-col line.
...
llvm-svn: 186733
2013-07-19 23:14:01 +00:00
Nadav Rotem
c069c25518
Use LLVMs ADTs that improve the compile time of this pass.
...
llvm-svn: 186732
2013-07-19 23:12:19 +00:00
Nadav Rotem
5c9a193a65
SLPVectorizer: Improve the compile time of isConsecutive by reordering the conditions that check GEPs and eliminate two of the calls to accumulateConstantOffset.
...
llvm-svn: 186731
2013-07-19 23:11:15 +00:00
Nadav Rotem
bb3398f000
Handle constants without going through SCEV.
...
llvm-svn: 186593
2013-07-18 18:34:21 +00:00
Nadav Rotem
de2815a5f7
SLPVectorizer: Speedup isConsecutive by manually checking GEPs with multiple indices.
...
This brings the compile time of the SLP-Vectorizer to about 2.5% of OPT for my testcase.
llvm-svn: 186592
2013-07-18 18:20:45 +00:00
Nadav Rotem
7d7036b8c6
SLPVectorizer: Speedup isConsecutive (that checks if two addresses are consecutive in memory) by checking for additional patterns that don't need to go through SCEV.
...
llvm-svn: 186563
2013-07-18 04:33:20 +00:00
Nadav Rotem
43639e8492
Fix a comment.
...
llvm-svn: 186541
2013-07-17 22:41:16 +00:00
Nadav Rotem
3072baeb9c
Add a micro optimization to catch cases where the PtrA equals PtrB.
...
llvm-svn: 186531
2013-07-17 19:52:25 +00:00
Nadav Rotem
2202317fce
SLPVectorizer: Accelerate the isConsecutive check by replacing the subtraction of the two values with a simple SCEV expression that adds the offset to one of the pointers that we compare.
...
llvm-svn: 186479
2013-07-17 00:48:31 +00:00
Nadav Rotem
d2e8c4cdea
flip the scev minus direction to simplify the code.
...
llvm-svn: 186466
2013-07-16 22:57:06 +00:00
Nadav Rotem
8f924f3891
SLPVectorizer: Improve the compile time of isConsecutive by adding a simple constant-gep check before using SCEV.
...
This check does not always work because not all of the GEPs use a constant offset, but it happens often enough to reduce the number of times we use SCEV.
llvm-svn: 186465
2013-07-16 22:51:07 +00:00
Nadav Rotem
26bf9a0c75
SLPVectorizer: Reduce the compile time of the consecutive store lookup.
...
Process groups of stores in chunks of 16.
llvm-svn: 186420
2013-07-16 15:25:17 +00:00
Nadav Rotem
1c1d6c1666
PR16628: Fix a bug in the code that merges compares.
...
Compares return i1 but they compare different types.
llvm-svn: 186359
2013-07-15 22:52:48 +00:00
Nadav Rotem
d9f3f4548e
SLPVectorizer: change the order in which we search for vectorization candidates. Do stores first and PHIs second.
...
llvm-svn: 186277
2013-07-14 06:15:46 +00:00
Nadav Rotem
89c41bf06a
SLPVectorizer: Sink and enable CSE for ExtractElements.
...
llvm-svn: 186145
2013-07-12 06:09:24 +00:00
Nadav Rotem
fa3c2db211
SLPVectorize: Replace the code that checks for vectorization candidates in successor blocks with code that scans PHINodes.
...
Before we could vectorize PHINodes scanning successors was a good way of finding candidates. Now we can vectorize the phinodes which is simpler.
llvm-svn: 186139
2013-07-12 00:04:18 +00:00
Nadav Rotem
db06b139fd
Remove an argument that we dont use anymore.
...
llvm-svn: 186116
2013-07-11 20:56:13 +00:00
Nadav Rotem
08efb262a9
Fix a warning.
...
llvm-svn: 186064
2013-07-11 05:39:02 +00:00
Nadav Rotem
b8dd66f655
SLPVectorizer: refactor the code that places extracts. Place the code that decides where to put extracts in the build-tree phase. This allows us to take the cost of the extracts into account.
...
llvm-svn: 186058
2013-07-11 04:54:05 +00:00
Nadav Rotem
d7b574e5b3
Fix PR16571, which is a bug in the code that checks that all of the types in the bundle are uniform.
...
llvm-svn: 185970
2013-07-09 21:38:08 +00:00
Nadav Rotem
861bef7dd0
Set the default insert point to the first instruction, and not to end()
...
llvm-svn: 185953
2013-07-09 17:55:36 +00:00
Nadav Rotem
c9c57518ab
This patch changes the saved IRBuilder insert point from BasicBlock::iterator to AssertingVH.
...
Commit 185883 fixes a bug in the IRBuilder that should fix the ASan bot. AssertingVH can help in exposing some RAUW problems.
Thanks Ben and Alexey!
llvm-svn: 185886
2013-07-08 23:31:13 +00:00
Nadav Rotem
2ee35771a8
Clear the builder insert point between tree-vectorization phases.
...
llvm-svn: 185777
2013-07-07 14:57:18 +00:00
Nadav Rotem
2041b742d4
SLPVectorizer: Implement DCE as part of vectorization.
...
This is a complete re-write if the bottom-up vectorization class.
Before this commit we scanned the instruction tree 3 times. First in search of merge points for the trees. Second, for estimating the cost. And finally for vectorization.
There was a lot of code duplication and adding the DCE exposed bugs. The new design is simpler and DCE was a part of the design.
In this implementation we build the tree once. After that we estimate the cost by scanning the different entries in the constructed tree (in any order). The vectorization phase also works on the built tree.
llvm-svn: 185774
2013-07-07 06:57:07 +00:00
Craig Topper
af0dea1347
Use SmallVectorImpl::iterator/const_iterator instead of SmallVector to avoid specifying the vector size.
...
llvm-svn: 185606
2013-07-04 01:31:24 +00:00
Nadav Rotem
0a25727f31
We preserve the CFG and some of the analysis passes.
...
llvm-svn: 185251
2013-06-29 05:38:15 +00:00
Nadav Rotem
e00343446c
Update docs.
...
llvm-svn: 185250
2013-06-29 05:37:19 +00:00
Nadav Rotem
060be733a5
SLP Vectorizer: Add support for trees with external users.
...
To support this we have to insert 'extractelement' instructions to pick the right lane.
We had this functionality before but I removed it when we moved to the multi-block design because it was too complicated.
llvm-svn: 185230
2013-06-28 22:07:09 +00:00
Nadav Rotem
8edefb3665
No need to use a Set when a vector would do.
...
llvm-svn: 185047
2013-06-27 00:14:13 +00:00
Nadav Rotem
93f880fb77
SLP: When searching for vectorization opportunities scan the blocks in post-order because we grow chains upwards.
...
llvm-svn: 185041
2013-06-26 23:44:45 +00:00
Nadav Rotem
7f0d6d7975
SLP: Dont erase instructions during vectorization because it prevents the outerloops from iterating over the instructions.
...
llvm-svn: 185040
2013-06-26 23:43:23 +00:00
Nadav Rotem
4c5b2d1de6
Erase all of the instructions that we RAUWed
...
llvm-svn: 184969
2013-06-26 17:16:09 +00:00
Nadav Rotem
f4ca3994b8
Do not add cse-ed instructions into the visited map because we dont want to consider them as a candidate for replacement of instructions to be visited.
...
llvm-svn: 184966
2013-06-26 16:54:53 +00:00
Nadav Rotem
0794acc1da
SLPVectorizer: support slp-vectorization of PHINodes between basic blocks
...
llvm-svn: 184888
2013-06-25 23:04:09 +00:00
Nadav Rotem
3de032a3b6
Fix a typo in the code that collected the costs recursively.
...
llvm-svn: 184827
2013-06-25 05:30:56 +00:00
Nadav Rotem
9c7c997a7e
Rename the variable to fix a warning. Thanks Andy Gibbs.
...
llvm-svn: 184749
2013-06-24 15:59:47 +00:00