diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-08-15 02:23:46 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-08-15 02:23:46 +0000 |
commit | c77a1390deb5ed8b3d598a2b4904658ccbff6146 (patch) | |
tree | 175dca025b80750339f726cf58738d5b548f77f6 /llvm/lib/Analysis | |
parent | 921a3f1c8d8a076af6744f7429cf01374c0a5e42 (diff) | |
download | bcm5719-llvm-c77a1390deb5ed8b3d598a2b4904658ccbff6146.tar.gz bcm5719-llvm-c77a1390deb5ed8b3d598a2b4904658ccbff6146.zip |
Revert "[ScopedNoAliasAA] Remove an unneccesary set"
This reverts commit r278641. I'm not sure why but this has upset the
multistage builders...
llvm-svn: 278644
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r-- | llvm/lib/Analysis/ScopedNoAliasAA.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/llvm/lib/Analysis/ScopedNoAliasAA.cpp b/llvm/lib/Analysis/ScopedNoAliasAA.cpp index b631faddbeb..1c4d0fa94bf 100644 --- a/llvm/lib/Analysis/ScopedNoAliasAA.cpp +++ b/llvm/lib/Analysis/ScopedNoAliasAA.cpp @@ -127,6 +127,15 @@ ModRefInfo ScopedNoAliasAAResult::getModRefInfo(ImmutableCallSite CS1, return AAResultBase::getModRefInfo(CS1, CS2); } +void ScopedNoAliasAAResult::collectMDInDomain( + const MDNode *List, const MDNode *Domain, + SmallPtrSetImpl<const MDNode *> &Nodes) const { + for (const MDOperand &MDOp : List->operands()) + if (const MDNode *MD = dyn_cast<MDNode>(MDOp)) + if (AliasScopeNode(MD).getDomain() == Domain) + Nodes.insert(MD); +} + bool ScopedNoAliasAAResult::mayAliasInScopes(const MDNode *Scopes, const MDNode *NoAlias) const { if (!Scopes || !NoAlias) @@ -142,21 +151,19 @@ 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<const MDNode *, 16> NANodes; - for (const MDOperand &MDOp : NoAlias->operands()) - if (const MDNode *MD = dyn_cast<MDNode>(MDOp)) - if (AliasScopeNode(MD).getDomain() == Domain) - NANodes.insert(MD); + SmallPtrSet<const MDNode *, 16> NANodes, ScopeNodes; + collectMDInDomain(NoAlias, Domain, NANodes); + collectMDInDomain(Scopes, Domain, ScopeNodes); + if (!ScopeNodes.size()) + continue; - // To not alias, all of the nodes in Scopes must be in NANodes. + // To not alias, all of the nodes in ScopeNodes must be in NANodes. bool FoundAll = true; - for (const MDOperand &MDOp : Scopes->operands()) - if (const MDNode *SMD = dyn_cast<MDNode>(MDOp)) - if (AliasScopeNode(SMD).getDomain() == Domain) - if (!NANodes.count(SMD)) { - FoundAll = false; - break; - } + for (const MDNode *SMD : ScopeNodes) + if (!NANodes.count(SMD)) { + FoundAll = false; + break; + } if (FoundAll) return false; |