Skip to content

Commit 42e2050

Browse files
committed
RequirementMachine: Better debug output for generating conformances algorithm
1 parent 2755f74 commit 42e2050

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

lib/AST/RequirementMachine/GeneratingConformances.cpp

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,11 @@ namespace {
150150
/// Utility class to encapsulate some shared state.
151151
class GeneratingConformances {
152152
const RewriteSystem &System;
153+
153154
RewriteContext &Context;
154155

156+
DebugOptions Debug;
157+
155158
// All conformance rules, sorted by (isExplicit(), getLHS()), with non-explicit
156159
// rules with longer left hand sides coming first.
157160
//
@@ -209,6 +212,7 @@ class GeneratingConformances {
209212
llvm::DenseSet<unsigned> &redundantConformances)
210213
: System(system),
211214
Context(system.getRewriteContext()),
215+
Debug(system.getDebugOptions()),
212216
RedundantConformances(redundantConformances) {}
213217

214218
void collectConformanceRules();
@@ -481,7 +485,7 @@ void GeneratingConformances::computeCandidateConformancePaths() {
481485
if (result.empty())
482486
continue;
483487

484-
if (System.getDebugOptions().contains(DebugFlags::GeneratingConformances)) {
488+
if (Debug.contains(DebugFlags::GeneratingConformances)) {
485489
llvm::dbgs() << "Candidate homotopy generator: ";
486490
loop.dump(llvm::dbgs(), System);
487491
llvm::dbgs() << "\n";
@@ -497,7 +501,7 @@ void GeneratingConformances::computeCandidateConformancePaths() {
497501
if (inEmptyContext.empty())
498502
continue;
499503

500-
if (System.getDebugOptions().contains(DebugFlags::GeneratingConformances)) {
504+
if (Debug.contains(DebugFlags::GeneratingConformances)) {
501505
llvm::dbgs() << "* Protocol " << proto->getName() << ":\n";
502506
llvm::dbgs() << "** Conformance rules not in context:\n";
503507
for (unsigned ruleID : inEmptyContext) {
@@ -755,7 +759,7 @@ void GeneratingConformances::verifyGeneratingConformanceEquations() const {
755759
llvm::errs() << "Mismatched conformance:\n";
756760
llvm::errs() << "Base rule: " << rule << "\n";
757761
llvm::errs() << "Final rule: " << otherRule << "\n\n";
758-
System.dump(llvm::errs());
762+
dumpGeneratingConformanceEquations(llvm::errs());
759763
abort();
760764
}
761765

@@ -772,7 +776,7 @@ void GeneratingConformances::verifyGeneratingConformanceEquations() const {
772776
pair.first, pair.second);
773777
llvm::errs() << "\n";
774778
llvm::errs() << "Term: " << rule << "\n";
775-
System.dump(llvm::errs());
779+
dumpGeneratingConformanceEquations(llvm::errs());
776780
abort();
777781
}
778782

@@ -789,7 +793,7 @@ void GeneratingConformances::verifyGeneratingConformanceEquations() const {
789793
llvm::errs() << "Invalid conformance path:\n";
790794
llvm::errs() << "Expected: " << baseTerm << "\n";
791795
llvm::errs() << "Got: " << otherTerm << "\n\n";
792-
System.dump(llvm::errs());
796+
dumpGeneratingConformanceEquations(llvm::errs());
793797
abort();
794798
}
795799
}
@@ -824,6 +828,12 @@ void GeneratingConformances::computeGeneratingConformances(
824828
// considered in the second pass.
825829
if (!derivedViaConcrete)
826830
continue;
831+
832+
if (Debug.contains(DebugFlags::GeneratingConformances)) {
833+
llvm::dbgs() << "Derived-via-concrete: ";
834+
dumpGeneratingConformanceEquation(llvm::dbgs(), ruleID, paths);
835+
llvm::dbgs() << "\n";
836+
}
827837
} else {
828838
// Ignore rules already determined to be redundant by the first pass.
829839
if (RedundantConformances.count(ruleID) > 0)
@@ -843,6 +853,14 @@ void GeneratingConformances::computeGeneratingConformances(
843853

844854
if (isValidConformancePath(visited, path,
845855
/*allowConcrete=*/true)) {
856+
if (Debug.contains(DebugFlags::GeneratingConformances)) {
857+
llvm::dbgs() << "Redundant rule in ";
858+
llvm::dbgs() << (firstPass ? "first" : "second");
859+
llvm::dbgs() << " pass: ";
860+
llvm::dbgs() << System.getRule(ruleID).getLHS();
861+
llvm::dbgs() << "\n";
862+
}
863+
846864
RedundantConformances.insert(ruleID);
847865
break;
848866
}
@@ -869,7 +887,7 @@ void GeneratingConformances::verifyGeneratingConformances() const {
869887
/*allowConcrete=*/true)) {
870888
llvm::errs() << "Redundant conformance is not recoverable:\n";
871889
llvm::errs() << rule << "\n\n";
872-
System.dump(llvm::errs());
890+
dumpGeneratingConformanceEquations(llvm::errs());
873891
abort();
874892
}
875893

@@ -879,14 +897,14 @@ void GeneratingConformances::verifyGeneratingConformances() const {
879897
if (rule.isRedundant()) {
880898
llvm::errs() << "Generating conformance is redundant: ";
881899
llvm::errs() << rule << "\n\n";
882-
System.dump(llvm::errs());
900+
dumpGeneratingConformanceEquations(llvm::errs());
883901
abort();
884902
}
885903

886904
if (rule.getLHS().containsUnresolvedSymbols()) {
887905
llvm::errs() << "Generating conformance contains unresolved symbols: ";
888906
llvm::errs() << rule << "\n\n";
889-
System.dump(llvm::errs());
907+
dumpGeneratingConformanceEquations(llvm::errs());
890908
abort();
891909
}
892910
}

0 commit comments

Comments
 (0)