diff options
author | Dan Gohman <gohman@apple.com> | 2011-07-21 23:30:09 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2011-07-21 23:30:09 +0000 |
commit | e106aee6f5737cd478c98f70bac73f1eb089c46f (patch) | |
tree | 9e11844a278024d63737cb26e0a9ebe3f0816fff /llvm/lib | |
parent | f224ae06d219df331032d197bf9f76b249852762 (diff) | |
download | bcm5719-llvm-e106aee6f5737cd478c98f70bac73f1eb089c46f.tar.gz bcm5719-llvm-e106aee6f5737cd478c98f70bac73f1eb089c46f.zip |
Fix MergeInVectorType to check for vector types with the same alloc
size but different element types, so that it filters out the cases
that CreateShuffleVectorCast doesn't handle. This fixes rdar://9786827.
llvm-svn: 135721
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp index fbf309292d8..b3d7ef6ec10 100644 --- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -425,6 +425,12 @@ bool ConvertToScalarInfo::MergeInVectorType(VectorType *VInTy, Type *ElementTy = VectorTy->getElementType(); Type *InElementTy = VInTy->getElementType(); + // If they're the same alloc size, we'll be attempting to convert between + // them with a vector shuffle, which requires the element types to match. + if (TD.getTypeAllocSize(VectorTy) == TD.getTypeAllocSize(VInTy) && + ElementTy != InElementTy) + return false; + // Do not allow mixed integer and floating-point accesses from vectors of // different sizes. if (ElementTy->isFloatingPointTy() != InElementTy->isFloatingPointTy()) |