mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-14 16:40:42 +00:00
Revert "[ScopedNoAliasAA] Remove an unneccesary set"
This reverts commit r278641. I'm not sure why but this has upset the multistage builders... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278644 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6bd5c84e0b
commit
28873d7b25
@ -42,6 +42,8 @@ public:
|
||||
|
||||
private:
|
||||
bool mayAliasInScopes(const MDNode *Scopes, const MDNode *NoAlias) const;
|
||||
void collectMDInDomain(const MDNode *List, const MDNode *Domain,
|
||||
SmallPtrSetImpl<const MDNode *> &Nodes) const;
|
||||
};
|
||||
|
||||
/// Analysis pass providing a never-invalidated alias analysis result.
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user