================
@@ -5980,23 +5981,63 @@ bool InstCombinerImpl::run() {
class AliasScopeTracker {
SmallPtrSet<const MDNode *, 8> UsedAliasScopesAndLists;
SmallPtrSet<const MDNode *, 8> UsedNoAliasScopesAndLists;
+ // Scopes used by every !alias.scope list that scopes from a disjoint-scope
+ // domain appears in. This is used to catch scopes that don't actually make
+ // anything noalias.
+ SmallDenseMap<const MDNode *, SmallPtrSet<const MDNode *, 4>, 4>
+ CommonScopesOfDisjointDomain;
+
+ // Record, for each disjoint-scope domain \p ScopeList uses, which of its
+ // scopes are used by \p ScopeList, adding to a running intersection.
+ void recordDisjointDomainScopes(const MDNode *ScopeList) {
+ SmallDenseMap<const MDNode *, SmallPtrSet<const MDNode *, 4>, 4>
UsedScopes;
+ for (const MDOperand &MDOperand : ScopeList->operands()) {
+ const auto *MDScope = dyn_cast<MDNode>(MDOperand);
+ if (!MDScope)
+ continue;
----------------
brunodf-gf wrote:
Is this needed? `Verifier::visitAliasScopeListMetadata` ensures that a scope
list consists of only `MDNode` objects.
https://github.com/llvm/llvm-project/pull/218768
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits