summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2011-07-21 23:30:09 +0000
committerDan Gohman <gohman@apple.com>2011-07-21 23:30:09 +0000
commite106aee6f5737cd478c98f70bac73f1eb089c46f (patch)
tree9e11844a278024d63737cb26e0a9ebe3f0816fff /llvm/lib
parentf224ae06d219df331032d197bf9f76b249852762 (diff)
downloadbcm5719-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.cpp6
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())
OpenPOWER on IntegriCloud