Nadav Rotem
5ffb049a55
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
4a87683a41
Implement a basic cost model for vector and scalar instructions.
...
llvm-svn: 166642
2012-10-24 23:47:38 +00:00
Nadav Rotem
a721b21c64
LoopVectorizer: Add a basic cost model which uses the VTTI interface.
...
llvm-svn: 166620
2012-10-24 20:36:32 +00:00
Nadav Rotem
5bed7b4fad
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
1c7fc71e69
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
03011f1393
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
fe88c67161
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
c1679a95b6
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
7e1084d36c
Vectorizer: fix a bug in the classification of induction/reduction phis.
...
llvm-svn: 166384
2012-10-21 02:38:01 +00:00
Nadav Rotem
e5dc57d4fb
Fix an infinite loop in the loop-vectorizer.
...
PR14134.
llvm-svn: 166379
2012-10-20 20:45:01 +00:00
Nadav Rotem
d189b82a9b
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
4f7f72702b
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
Nadav Rotem
ced93f3a05
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
b52f717411
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
Nadav Rotem
6b94c2a09b
Add a loop vectorizer.
...
llvm-svn: 166112
2012-10-17 18:25:06 +00:00