From 768d013a036802ca80b6a4dd5d109dd78b1a1bf0 Mon Sep 17 00:00:00 2001 From: Michael Kuperstein Date: Mon, 6 Mar 2017 23:54:51 +0000 Subject: [SLP] Revert r296863 due to miscompiles. Details and reproducer are on the email thread for r296863. llvm-svn: 297103 --- llvm/lib/Analysis/LoopAccessAnalysis.cpp | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) (limited to 'llvm/lib/Analysis/LoopAccessAnalysis.cpp') diff --git a/llvm/lib/Analysis/LoopAccessAnalysis.cpp b/llvm/lib/Analysis/LoopAccessAnalysis.cpp index 0d588b901a5..a3ed412b738 100644 --- a/llvm/lib/Analysis/LoopAccessAnalysis.cpp +++ b/llvm/lib/Analysis/LoopAccessAnalysis.cpp @@ -1040,8 +1040,7 @@ static unsigned getAddressSpaceOperand(Value *I) { bool llvm::sortMemAccesses(ArrayRef VL, const DataLayout &DL, ScalarEvolution &SE, - SmallVectorImpl &Sorted, - SmallVectorImpl *Mask) { + SmallVectorImpl &Sorted) { SmallVector, 4> OffValPairs; OffValPairs.reserve(VL.size()); Sorted.reserve(VL.size()); @@ -1051,6 +1050,7 @@ bool llvm::sortMemAccesses(ArrayRef VL, const DataLayout &DL, Value *Ptr0 = getPointerOperand(VL[0]); const SCEV *Scev0 = SE.getSCEV(Ptr0); Value *Obj0 = GetUnderlyingObject(Ptr0, DL); + for (auto *Val : VL) { // The only kind of access we care about here is load. if (!isa(Val)) @@ -1077,30 +1077,14 @@ bool llvm::sortMemAccesses(ArrayRef VL, const DataLayout &DL, OffValPairs.emplace_back(Diff->getAPInt().getSExtValue(), Val); } - SmallVector UseOrder(VL.size()); - for (unsigned i = 0; i < VL.size(); i++) { - UseOrder[i] = i; - } - - // Sort the memory accesses and keep the order of their uses in UseOrder. - std::sort(UseOrder.begin(), UseOrder.end(), - [&OffValPairs](unsigned Left, unsigned Right) { - return OffValPairs[Left].first < OffValPairs[Right].first; + std::sort(OffValPairs.begin(), OffValPairs.end(), + [](const std::pair &Left, + const std::pair &Right) { + return Left.first < Right.first; }); - for (unsigned i = 0; i < VL.size(); i++) - Sorted.emplace_back(OffValPairs[UseOrder[i]].second); - - // Sort UseOrder to compute the Mask. - if (Mask) { - Mask->reserve(VL.size()); - for (unsigned i = 0; i < VL.size(); i++) - Mask->emplace_back(i); - std::sort(Mask->begin(), Mask->end(), - [&UseOrder](unsigned Left, unsigned Right) { - return UseOrder[Left] < UseOrder[Right]; - }); - } + for (auto &it : OffValPairs) + Sorted.push_back(it.second); return true; } -- cgit v1.2.3