diff options
author | Hal Finkel <hfinkel@anl.gov> | 2013-10-25 20:40:15 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2013-10-25 20:40:15 +0000 |
commit | 006183a9364660daba786d352df720e079412d60 (patch) | |
tree | 3230591282fa4be644177cc652f3699b4d881ad3 /lib/Transforms/Vectorize/LoopVectorize.cpp | |
parent | 7c0c2e56b09fee406ca0bb6e3ac840a3a6ed1160 (diff) | |
download | llvm-006183a9364660daba786d352df720e079412d60.tar.gz llvm-006183a9364660daba786d352df720e079412d60.tar.bz2 llvm-006183a9364660daba786d352df720e079412d60.tar.xz |
LoopVectorizer: Don't attempt to vectorize extractelement instructions
The loop vectorizer does not currently understand how to vectorize
extractelement instructions. The existing check, which excluded all
vector-valued instructions, did not catch extractelement instructions because
it checked only the return value. As a result, vectorization would proceed,
producing illegal instructions like this:
%58 = extractelement <2 x i32> %15, i32 0
%59 = extractelement i32 %58, i32 0
where the second extractelement is illegal because its first operand is not a vector.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193434 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Vectorize/LoopVectorize.cpp')
-rw-r--r-- | lib/Transforms/Vectorize/LoopVectorize.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/Transforms/Vectorize/LoopVectorize.cpp b/lib/Transforms/Vectorize/LoopVectorize.cpp index 317c1ffd85..8b5424f599 100644 --- a/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -2965,8 +2965,9 @@ bool LoopVectorizationLegality::canVectorizeInstrs() { } // Check that the instruction return type is vectorizable. - if (!VectorType::isValidElementType(it->getType()) && - !it->getType()->isVoidTy()) { + // Also, we can't vectorize extractelement instructions. + if ((!VectorType::isValidElementType(it->getType()) && + !it->getType()->isVoidTy()) || isa<ExtractElementInst>(it)) { DEBUG(dbgs() << "LV: Found unvectorizable type.\n"); return false; } |