Skip to content

Commit e6e6307

Browse files
authored
Merge pull request #26347 from DougGregor/constraint-graph-remove-adjacencies
[Constraint graph] Eliminate adjacency information in the graph nodes.
2 parents f82572a + 8355f3d commit e6e6307

File tree

10 files changed

+218
-357
lines changed

10 files changed

+218
-357
lines changed

lib/Sema/CSBindings.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -209,14 +209,14 @@ bool ConstraintSystem::PotentialBindings::isViable(
209209
static bool hasNilLiteralConstraint(TypeVariableType *typeVar,
210210
ConstraintSystem &CS) {
211211
// Look for a literal-conformance constraint on the type variable.
212-
llvm::SetVector<Constraint *> constraints;
213-
CS.getConstraintGraph().gatherConstraints(
214-
typeVar, constraints, ConstraintGraph::GatheringKind::EquivalenceClass,
215-
[](Constraint *constraint) -> bool {
216-
return constraint->getKind() == ConstraintKind::LiteralConformsTo &&
217-
constraint->getProtocol()->isSpecificProtocol(
218-
KnownProtocolKind::ExpressibleByNilLiteral);
219-
});
212+
auto constraints =
213+
CS.getConstraintGraph().gatherConstraints(
214+
typeVar, ConstraintGraph::GatheringKind::EquivalenceClass,
215+
[](Constraint *constraint) -> bool {
216+
return constraint->getKind() == ConstraintKind::LiteralConformsTo &&
217+
constraint->getProtocol()->isSpecificProtocol(
218+
KnownProtocolKind::ExpressibleByNilLiteral);
219+
});
220220

221221
for (auto constraint : constraints)
222222
if (CS.simplifyType(constraint->getFirstType())->isEqual(typeVar))
@@ -392,9 +392,9 @@ ConstraintSystem::getPotentialBindings(TypeVariableType *typeVar) {
392392
}
393393

394394
// Gather the constraints associated with this type variable.
395-
llvm::SetVector<Constraint *> constraints;
396-
getConstraintGraph().gatherConstraints(
397-
typeVar, constraints, ConstraintGraph::GatheringKind::EquivalenceClass);
395+
auto constraints =
396+
getConstraintGraph().gatherConstraints(
397+
typeVar, ConstraintGraph::GatheringKind::EquivalenceClass);
398398

399399
PotentialBindings result(typeVar);
400400

lib/Sema/CSDiag.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6929,9 +6929,8 @@ bool FailureDiagnosis::diagnoseAmbiguousGenericParameters() {
69296929
// because type B would have no constraints associated with it.
69306930
unsigned numConstraints = 0;
69316931
{
6932-
llvm::SetVector<Constraint *> constraints;
6933-
CS.getConstraintGraph().gatherConstraints(
6934-
tv, constraints, ConstraintGraph::GatheringKind::EquivalenceClass,
6932+
auto constraints = CS.getConstraintGraph().gatherConstraints(
6933+
tv, ConstraintGraph::GatheringKind::EquivalenceClass,
69356934
[&](Constraint *constraint) -> bool {
69366935
// We are not interested in ConformsTo constraints because
69376936
// we can't derive any concrete type information from them.

lib/Sema/CSGen.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -533,9 +533,8 @@ namespace {
533533

534534
llvm::SmallSetVector<ProtocolDecl *, 2> literalProtos;
535535
if (auto argTypeVar = argTy->getAs<TypeVariableType>()) {
536-
llvm::SetVector<Constraint *> constraints;
537-
CS.getConstraintGraph().gatherConstraints(
538-
argTypeVar, constraints,
536+
auto constraints = CS.getConstraintGraph().gatherConstraints(
537+
argTypeVar,
539538
ConstraintGraph::GatheringKind::EquivalenceClass,
540539
[](Constraint *constraint) {
541540
return constraint->getKind() == ConstraintKind::LiteralConformsTo;

lib/Sema/CSSimplify.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7133,9 +7133,8 @@ ConstraintSystem::addKeyPathApplicationRootConstraint(Type root, ConstraintLocat
71337133
if (!typeVar)
71347134
return;
71357135

7136-
llvm::SetVector<Constraint *> constraints;
7137-
CG.gatherConstraints(
7138-
typeVar, constraints, ConstraintGraph::GatheringKind::EquivalenceClass,
7136+
auto constraints = CG.gatherConstraints(
7137+
typeVar, ConstraintGraph::GatheringKind::EquivalenceClass,
71397138
[&keyPathExpr](Constraint *constraint) -> bool {
71407139
return constraint->getKind() == ConstraintKind::KeyPath &&
71417140
constraint->getLocator()->getAnchor() == keyPathExpr;

lib/Sema/CSSolver.cpp

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,9 +1519,8 @@ static Constraint *selectBestBindingDisjunction(
15191519
if (!firstBindDisjunction)
15201520
firstBindDisjunction = disjunction;
15211521

1522-
llvm::SetVector<Constraint *> constraints;
1523-
cs.getConstraintGraph().gatherConstraints(
1524-
typeVar, constraints, ConstraintGraph::GatheringKind::EquivalenceClass,
1522+
auto constraints = cs.getConstraintGraph().gatherConstraints(
1523+
typeVar, ConstraintGraph::GatheringKind::EquivalenceClass,
15251524
[](Constraint *constraint) {
15261525
return constraint->getKind() == ConstraintKind::Conversion;
15271526
});
@@ -1576,9 +1575,8 @@ void ConstraintSystem::ArgumentInfoCollector::walk(Type argType) {
15761575

15771576
visited.insert(rep);
15781577

1579-
llvm::SetVector<Constraint *> constraints;
1580-
CS.getConstraintGraph().gatherConstraints(
1581-
rep, constraints, ConstraintGraph::GatheringKind::EquivalenceClass);
1578+
auto constraints = CS.getConstraintGraph().gatherConstraints(
1579+
rep, ConstraintGraph::GatheringKind::EquivalenceClass);
15821580

15831581
for (auto *constraint : constraints) {
15841582
switch (constraint->getKind()) {
@@ -1772,9 +1770,8 @@ Constraint *ConstraintSystem::getUnboundBindOverloadDisjunction(
17721770
while (visitedVars.insert(rep).second) {
17731771
// Look for a disjunction that binds this type variable to an overload set.
17741772
TypeVariableType *optionalObjectTypeVar = nullptr;
1775-
llvm::SetVector<Constraint *> disjunctions;
1776-
getConstraintGraph().gatherConstraints(
1777-
rep, disjunctions, ConstraintGraph::GatheringKind::EquivalenceClass,
1773+
auto disjunctions = getConstraintGraph().gatherConstraints(
1774+
rep, ConstraintGraph::GatheringKind::EquivalenceClass,
17781775
[this, rep, &optionalObjectTypeVar](Constraint *match) {
17791776
// If we have an "optional object of" constraint where the right-hand
17801777
// side is this type variable, we may need to follow that type
@@ -1875,9 +1872,8 @@ void ConstraintSystem::sortDesignatedTypes(
18751872
SmallVectorImpl<NominalTypeDecl *> &nominalTypes,
18761873
Constraint *bindOverload) {
18771874
auto *tyvar = bindOverload->getFirstType()->castTo<TypeVariableType>();
1878-
llvm::SetVector<Constraint *> applicableFns;
1879-
getConstraintGraph().gatherConstraints(
1880-
tyvar, applicableFns, ConstraintGraph::GatheringKind::EquivalenceClass,
1875+
auto applicableFns = getConstraintGraph().gatherConstraints(
1876+
tyvar, ConstraintGraph::GatheringKind::EquivalenceClass,
18811877
[](Constraint *match) {
18821878
return match->getKind() == ConstraintKind::ApplicableFunction;
18831879
});
@@ -2292,21 +2288,21 @@ void DisjunctionChoice::propagateConversionInfo(ConstraintSystem &cs) const {
22922288
return;
22932289

22942290
auto conversionType = bindings.Bindings[0].BindingType;
2295-
llvm::SetVector<Constraint *> constraints;
2296-
cs.CG.gatherConstraints(typeVar, constraints,
2297-
ConstraintGraph::GatheringKind::EquivalenceClass,
2298-
[](Constraint *constraint) -> bool {
2299-
switch (constraint->getKind()) {
2300-
case ConstraintKind::Conversion:
2301-
case ConstraintKind::Defaultable:
2302-
case ConstraintKind::ConformsTo:
2303-
case ConstraintKind::LiteralConformsTo:
2304-
return false;
2305-
2306-
default:
2307-
return true;
2308-
}
2309-
});
2291+
auto constraints = cs.CG.gatherConstraints(
2292+
typeVar,
2293+
ConstraintGraph::GatheringKind::EquivalenceClass,
2294+
[](Constraint *constraint) -> bool {
2295+
switch (constraint->getKind()) {
2296+
case ConstraintKind::Conversion:
2297+
case ConstraintKind::Defaultable:
2298+
case ConstraintKind::ConformsTo:
2299+
case ConstraintKind::LiteralConformsTo:
2300+
return false;
2301+
2302+
default:
2303+
return true;
2304+
}
2305+
});
23102306

23112307
if (constraints.empty())
23122308
cs.addConstraint(ConstraintKind::Bind, typeVar, conversionType,

0 commit comments

Comments
 (0)