aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-11-07 22:42:47 +0000
committerChris Lattner <sabre@nondot.org>2006-11-07 22:42:47 +0000
commitd92515034fc4157850b981f696702cc2f35733f0 (patch)
treeb01e22b9fd8a460a1f5ce98a53a7917aa86cc3d7 /lib/Transforms
parent03507f53c495e5a91e3c83120bdcb5be5d024950 (diff)
downloadexternal_llvm-d92515034fc4157850b981f696702cc2f35733f0.zip
external_llvm-d92515034fc4157850b981f696702cc2f35733f0.tar.gz
external_llvm-d92515034fc4157850b981f696702cc2f35733f0.tar.bz2
scalarrepl should not split the two elements of the vsiidx array:
int func(vFloat v0, vFloat v1) { int ii; vSInt32 vsiidx[2]; vsiidx[0] = _mm_cvttps_epi32(v0); vsiidx[1] = _mm_cvttps_epi32(v1); ii = ((int *) vsiidx)[4]; return ii; } This fixes Transforms/ScalarRepl/2006-11-07-InvalidArrayPromote.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31524 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Scalar/ScalarReplAggregates.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/lib/Transforms/Scalar/ScalarReplAggregates.cpp
index 3eba528..3e141be 100644
--- a/lib/Transforms/Scalar/ScalarReplAggregates.cpp
+++ b/lib/Transforms/Scalar/ScalarReplAggregates.cpp
@@ -316,9 +316,13 @@ int SROA::isSafeUseOfAllocation(Instruction *User) {
//
// Scalar replacing *just* the outer index of the array is probably not
// going to be a win anyway, so just give up.
- for (++I; I != E && isa<ArrayType>(*I); ++I) {
- const ArrayType *SubArrayTy = cast<ArrayType>(*I);
- uint64_t NumElements = SubArrayTy->getNumElements();
+ for (++I; I != E && (isa<ArrayType>(*I) || isa<PackedType>(*I)); ++I) {
+ uint64_t NumElements;
+ if (const ArrayType *SubArrayTy = dyn_cast<ArrayType>(*I))
+ NumElements = SubArrayTy->getNumElements();
+ else
+ NumElements = cast<PackedType>(*I)->getNumElements();
+
if (!isa<ConstantInt>(I.getOperand())) return 0;
if (cast<ConstantInt>(I.getOperand())->getZExtValue() >= NumElements)
return 0;