Changes in directory llvm/lib/Transforms/Scalar:
ScalarReplAggregates.cpp updated: 1.47 -> 1.48 --- Log message: 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 --- Diffs of the changes: (+7 -3) ScalarReplAggregates.cpp | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) Index: llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp diff -u llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.47 llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.48 --- llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp:1.47 Thu Nov 2 14:25:50 2006 +++ llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp Tue Nov 7 16:42:47 2006 @@ -316,9 +316,13 @@ // // 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; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits