From: Benjamin Kramer Date: Sat, 13 Jun 2015 19:50:38 +0000 (+0000) Subject: [Statepoints] Skip a vector copy when uniquing values. X-Git-Tag: llvmorg-3.7.0-rc1~2409 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=258ea0dbdfdc5b432395e49c158404b8ae90f90c;p=platform%2Fupstream%2Fllvm.git [Statepoints] Skip a vector copy when uniquing values. No functionality change intended. llvm-svn: 239688 --- diff --git a/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp b/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp index 6f6ba72..21ff55c 100644 --- a/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp +++ b/llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp @@ -1659,17 +1659,10 @@ static void relocationViaAlloca( /// vector. Doing so has the effect of changing the output of a couple of /// tests in ways which make them less useful in testing fused safepoints. template static void unique_unsorted(SmallVectorImpl &Vec) { - DenseSet Seen; - SmallVector TempVec; - TempVec.reserve(Vec.size()); - for (auto Element : Vec) - TempVec.push_back(Element); - Vec.clear(); - for (auto V : TempVec) { - if (Seen.insert(V).second) { - Vec.push_back(V); - } - } + SmallSet Seen; + Vec.erase(std::remove_if(Vec.begin(), Vec.end(), [&](const T &V) { + return !Seen.insert(V).second; + }), Vec.end()); } /// Insert holders so that each Value is obviously live through the entire