From: Fangrui Song Date: Sun, 3 Mar 2019 11:12:57 +0000 (+0000) Subject: [DemandedBits] Optimize a find()+insert pattern with try_emplace and APInt::operator|= X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7d44079bb351185a726266470e2d3c3459677c46;p=llvm [DemandedBits] Optimize a find()+insert pattern with try_emplace and APInt::operator|= git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355284 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/DemandedBits.cpp b/lib/Analysis/DemandedBits.cpp index 0df47a9eda6..48412d204dc 100644 --- a/lib/Analysis/DemandedBits.cpp +++ b/lib/Analysis/DemandedBits.cpp @@ -402,14 +402,9 @@ void DemandedBits::performAnalysis() { // If we've added to the set of alive bits (or the operand has not // been previously visited), then re-queue the operand to be visited // again. - APInt ABPrev(BitWidth, 0); - auto ABI = AliveBits.find(I); - if (ABI != AliveBits.end()) - ABPrev = ABI->second; - - APInt ABNew = AB | ABPrev; - if (ABNew != ABPrev || ABI == AliveBits.end()) { - AliveBits[I] = std::move(ABNew); + auto Res = AliveBits.try_emplace(I); + if (Res.second || (AB |= Res.first->second) != Res.first->second) { + Res.first->second = std::move(AB); Worklist.insert(I); } }