diff options
author | Chris Lattner <sabre@nondot.org> | 2006-11-07 22:42:47 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-11-07 22:42:47 +0000 |
commit | d92515034fc4157850b981f696702cc2f35733f0 (patch) | |
tree | b01e22b9fd8a460a1f5ce98a53a7917aa86cc3d7 /lib/Transforms | |
parent | 03507f53c495e5a91e3c83120bdcb5be5d024950 (diff) | |
download | external_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.cpp | 10 |
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; |