From 5ec9c58f1394e1232972604d765238594d48fce1 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Mon, 15 Aug 2016 00:13:04 +0000 Subject: [ScopedNoAliasAA] Remove an unneccesary set We are trying to prove that one group of operands is a subset of another. We did this by populating two Sets and determining that every element within one was inside the other. However, this is unnecessary. We can simply construct a single set and test if each operand is within it. llvm-svn: 278641 --- llvm/lib/Analysis/ScopedNoAliasAA.cpp | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) (limited to 'llvm/lib/Analysis/ScopedNoAliasAA.cpp') diff --git a/llvm/lib/Analysis/ScopedNoAliasAA.cpp b/llvm/lib/Analysis/ScopedNoAliasAA.cpp index 1c4d0fa94bf..b631faddbeb 100644 --- a/llvm/lib/Analysis/ScopedNoAliasAA.cpp +++ b/llvm/lib/Analysis/ScopedNoAliasAA.cpp @@ -127,15 +127,6 @@ ModRefInfo ScopedNoAliasAAResult::getModRefInfo(ImmutableCallSite CS1, return AAResultBase::getModRefInfo(CS1, CS2); } -void ScopedNoAliasAAResult::collectMDInDomain( - const MDNode *List, const MDNode *Domain, - SmallPtrSetImpl &Nodes) const { - for (const MDOperand &MDOp : List->operands()) - if (const MDNode *MD = dyn_cast(MDOp)) - if (AliasScopeNode(MD).getDomain() == Domain) - Nodes.insert(MD); -} - bool ScopedNoAliasAAResult::mayAliasInScopes(const MDNode *Scopes, const MDNode *NoAlias) const { if (!Scopes || !NoAlias) @@ -151,19 +142,21 @@ bool ScopedNoAliasAAResult::mayAliasInScopes(const MDNode *Scopes, // We alias unless, for some domain, the set of noalias scopes in that domain // is a superset of the set of alias scopes in that domain. for (const MDNode *Domain : Domains) { - SmallPtrSet NANodes, ScopeNodes; - collectMDInDomain(NoAlias, Domain, NANodes); - collectMDInDomain(Scopes, Domain, ScopeNodes); - if (!ScopeNodes.size()) - continue; + SmallPtrSet NANodes; + for (const MDOperand &MDOp : NoAlias->operands()) + if (const MDNode *MD = dyn_cast(MDOp)) + if (AliasScopeNode(MD).getDomain() == Domain) + NANodes.insert(MD); - // To not alias, all of the nodes in ScopeNodes must be in NANodes. + // To not alias, all of the nodes in Scopes must be in NANodes. bool FoundAll = true; - for (const MDNode *SMD : ScopeNodes) - if (!NANodes.count(SMD)) { - FoundAll = false; - break; - } + for (const MDOperand &MDOp : Scopes->operands()) + if (const MDNode *SMD = dyn_cast(MDOp)) + if (AliasScopeNode(SMD).getDomain() == Domain) + if (!NANodes.count(SMD)) { + FoundAll = false; + break; + } if (FoundAll) return false; -- cgit v1.2.3