Nadav Rotem
133e437c48
Refactor the VectorTargetTransformInfo interface.
...
Add getCostXXX calls for different families of opcodes, such as casts, arithmetic, cmp, etc.
Port the LoopVectorizer to the new API.
The LoopVectorizer now finds instructions which will remain uniform after vectorization. It uses this information when calculating the cost of these instructions.
llvm-svn: 166836
2012-10-26 23:49:28 +00:00
Nadav Rotem
f73d286571
LoopVectorize: Teach the cost model to query scalar costs as scalar types and not vectors of 1.
...
llvm-svn: 166715
2012-10-25 21:03:48 +00:00
Nadav Rotem
5635a9350f
Add support for additional reduction variables: AND, OR, XOR.
...
Patch by Paul Redmond <paul.redmond@intel.com>.
llvm-svn: 166649
2012-10-25 00:08:41 +00:00
Nadav Rotem
9d7ba0ef55
Implement a basic cost model for vector and scalar instructions.
...
llvm-svn: 166642
2012-10-24 23:47:38 +00:00
Nadav Rotem
23bafecedf
whitespace
...
llvm-svn: 166622
2012-10-24 20:58:40 +00:00
Nadav Rotem
05d9e80245
LoopVectorizer: Add a basic cost model which uses the VTTI interface.
...
llvm-svn: 166620
2012-10-24 20:36:32 +00:00
Micah Villmow
ce5e56a156
Back out r166591, not sure why this made it through since I cancelled the command. Bleh, sorry about this!
...
llvm-svn: 166596
2012-10-24 17:25:11 +00:00
Micah Villmow
ae5ce80c36
Delete a directory that wasn't supposed to be checked in yet.
...
llvm-svn: 166591
2012-10-24 17:20:04 +00:00
Nadav Rotem
3deae09579
Use the AliasAnalysis isIdentifiedObj because it also understands mallocs and c++ news.
...
PR14158.
llvm-svn: 166491
2012-10-23 18:44:18 +00:00
Nadav Rotem
302d4b678a
Don't crash if the load/store pointer is not a GEP.
...
Fix by Shivarama Rao <Shivarama.Rao@amd.com>
llvm-svn: 166427
2012-10-22 18:27:56 +00:00
Nadav Rotem
ea70508da6
Rename a variable.
...
llvm-svn: 166410
2012-10-22 04:53:05 +00:00
Nadav Rotem
6b56385c1a
Vectorizer: optimize the generation of selects. If the condition is uniform, generate a scalar-cond select (i1 as selector).
...
llvm-svn: 166409
2012-10-22 04:38:00 +00:00
Nadav Rotem
708e5d2fb0
Update the loop vectorizer docs.
...
llvm-svn: 166408
2012-10-22 03:52:53 +00:00
Anders Carlsson
d04e66ae01
Avoid an extra hash lookup when inserting a value into the widen map.
...
llvm-svn: 166395
2012-10-21 16:26:35 +00:00
Jakub Staszak
a477da32fc
Simplify code. No functionality change.
...
llvm-svn: 166393
2012-10-21 15:36:03 +00:00
Jakub Staszak
ed5ec60053
Simplify code. No functionality change.
...
llvm-svn: 166392
2012-10-21 15:29:19 +00:00
Nadav Rotem
380fe201de
Fix a bug in the vectorization of wide load/store operations.
...
We used a SCEV to detect that A[X] is consecutive. We assumed that X was
the induction variable. But X can be any expression that uses the induction
for example: X = i + 2;
llvm-svn: 166388
2012-10-21 06:49:10 +00:00
Nadav Rotem
825cda19d5
Add support for reduction variables that do not start at zero.
...
This is important for nested-loop reductions such as :
In the innermost loop, the induction variable does not start with zero:
for (i = 0 .. n)
for (j = 0 .. m)
sum += ...
llvm-svn: 166387
2012-10-21 05:52:51 +00:00
Nadav Rotem
5ab04af30a
Document change. Describe the pass and some papers that inspired the design of the pass.
...
llvm-svn: 166386
2012-10-21 04:04:25 +00:00
Nadav Rotem
763abacb83
Vectorizer: fix a bug in the classification of induction/reduction phis.
...
llvm-svn: 166384
2012-10-21 02:38:01 +00:00
Nadav Rotem
2ee8edf34a
Fix an infinite loop in the loop-vectorizer.
...
PR14134.
llvm-svn: 166379
2012-10-20 20:45:01 +00:00
Nadav Rotem
cdd573e703
Vectorize: teach cavVectorizeMemory to distinguish between A[i]+=x and A[B[i]]+=x.
...
If the pointer is consecutive then it is safe to read and write. If the pointer is non-loop-consecutive then
it is unsafe to vectorize it because we may hit an ordering issue.
llvm-svn: 166371
2012-10-20 08:26:33 +00:00
Nadav Rotem
762317ecc6
Fix a typo
...
llvm-svn: 166367
2012-10-20 05:03:27 +00:00
Nadav Rotem
4e013454ca
Vectorizer: refactor the memory checks to a new function. No functionality change.
...
llvm-svn: 166366
2012-10-20 04:59:06 +00:00
Nadav Rotem
61a5b018ad
LoopVectorize: Keep the IRBuilder on the stack.
...
llvm-svn: 166354
2012-10-19 23:27:19 +00:00
Nadav Rotem
8fe03aa4c1
Vectorizer: Add support for loop reductions.
...
For example:
for (i=0; i<n; i++)
sum += A[i] + B[i] + i;
llvm-svn: 166351
2012-10-19 23:05:40 +00:00
Benjamin Kramer
5080891e07
LoopVectorize: Keep the IRBuilder on the stack.
...
No functionality change.
llvm-svn: 166274
2012-10-19 08:42:02 +00:00
Nadav Rotem
451f76acc3
vectorizer: Add support for reading and writing from the same memory location.
...
llvm-svn: 166255
2012-10-19 01:24:18 +00:00
Nadav Rotem
fe5d8c8c09
cleanup the comment.
...
llvm-svn: 166247
2012-10-18 23:21:01 +00:00
Nadav Rotem
ac2f32d807
fix a naming typo
...
llvm-svn: 166232
2012-10-18 21:45:31 +00:00
Nadav Rotem
b1d0bfd68b
Avoid reconstructing the pointer set when searching for duplicated read/write pointers.
...
llvm-svn: 166205
2012-10-18 18:34:50 +00:00
Nadav Rotem
f1bbc20bb0
When looking for a vector representation of a scalar, do a single lookup. Also, cache the result of the broadcast instruction.
...
No functionality change.
llvm-svn: 166191
2012-10-18 17:31:49 +00:00
Nadav Rotem
76ff018e87
remove unused variable to fix a warning.
...
llvm-svn: 166170
2012-10-18 06:09:21 +00:00
Nadav Rotem
67e1c2c770
Remove the use of dominators and AA.
...
llvm-svn: 166167
2012-10-18 05:33:02 +00:00
Nadav Rotem
fd924ec3c6
Vectorizer: Add support for loops with an unknown count. For example:
...
for (i=0; i<n; i++){
a[i] = b[i+1] + c[i+3];
}
llvm-svn: 166165
2012-10-18 05:29:12 +00:00
NAKAMURA Takumi
8ffefaa778
LoopVectorize.cpp: Fix a warning. [-Wunused-variable]
...
llvm-svn: 166153
2012-10-17 23:40:15 +00:00
Jakub Staszak
f66a4adca8
Remove redundant SetInsertPoint call.
...
llvm-svn: 166138
2012-10-17 23:06:37 +00:00
Roman Divacky
e9f1f9a823
Fix some typos and wrong indenting.
...
llvm-svn: 166128
2012-10-17 21:07:35 +00:00
Nadav Rotem
8303c909c7
Add a loop vectorizer.
...
llvm-svn: 166112
2012-10-17 18:25:06 +00:00