From 0d62e3c5ec6b61a6e682105cad3c46036f049c5d Mon Sep 17 00:00:00 2001 From: Gogul Balakrishnan Date: Thu, 5 Dec 2019 13:25:13 -0800 Subject: [PATCH 1/3] [AutoDiff] Move dumpActivityInfo to DifferentiableActivityInfo class --- .../Analysis/DifferentiableActivityAnalysis.h | 10 ++++++ .../DifferentiableActivityAnalysis.cpp | 29 ++++++++++++++++ .../Mandatory/Differentiation.cpp | 34 ++----------------- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h b/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h index 65b666f8b071d..869a2f50c9fea 100644 --- a/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h +++ b/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h @@ -206,6 +206,16 @@ class DifferentiableActivityInfo { /// Returns the activity of the given value for the given `SILAutoDiffIndices` /// (parameter indices and result index). Activity getActivity(SILValue value, const SILAutoDiffIndices &indices) const; + + /// Prints activity information for the `indices` of the given `value`. + void dumpActivityInfo(SILValue value, + const SILAutoDiffIndices &indices, + llvm::raw_ostream &s = llvm::dbgs()) const; + + /// Prints activity information for the `indices` of the given `fn`. + void dumpActivityInfo(SILFunction &fn, SILAutoDiffIndices indices, + llvm::raw_ostream &s = llvm::dbgs()) const; + }; class DifferentiableActivityCollection { diff --git a/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp b/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp index 2de3998245143..0fb2cb299c9c1 100644 --- a/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp +++ b/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp @@ -421,3 +421,32 @@ Activity DifferentiableActivityInfo::getActivity( activity |= ActivityFlags::Useful; return activity; } + +void DifferentiableActivityInfo::dumpActivityInfo( + SILValue value, const SILAutoDiffIndices &indices, + llvm::raw_ostream &s) const { + s << '['; + auto activity = getActivity(value, indices); + switch (activity.toRaw()) { + case 0: s << "NONE"; break; + case (unsigned)ActivityFlags::Varied: s << "VARIED"; break; + case (unsigned)ActivityFlags::Useful: s << "USEFUL"; break; + case (unsigned)ActivityFlags::Active: s << "ACTIVE"; break; + } + s << "] " << value; +} + +void DifferentiableActivityInfo::dumpActivityInfo(SILFunction &fn, + SILAutoDiffIndices indices, + llvm::raw_ostream &s) const { + s << "Activity info for " << fn.getName() << " at " << indices << '\n'; + for (auto &bb : fn) { + s << "bb" << bb.getDebugID() << ":\n"; + for (auto *arg : bb.getArguments()) + dumpActivityInfo(arg, indices, s); + for (auto &inst : bb) + for (auto res : inst.getResults()) + dumpActivityInfo(res, indices, s); + s << '\n'; + } +} diff --git a/lib/SILOptimizer/Mandatory/Differentiation.cpp b/lib/SILOptimizer/Mandatory/Differentiation.cpp index 597dd72f434ad..396a3ec735c48 100644 --- a/lib/SILOptimizer/Mandatory/Differentiation.cpp +++ b/lib/SILOptimizer/Mandatory/Differentiation.cpp @@ -262,36 +262,6 @@ class DifferentiationTransformer { } // end anonymous namespace -static void dumpActivityInfo(SILValue value, - const SILAutoDiffIndices &indices, - const DifferentiableActivityInfo &activityInfo, - llvm::raw_ostream &s = llvm::dbgs()) { - s << '['; - auto activity = activityInfo.getActivity(value, indices); - switch (activity.toRaw()) { - case 0: s << "NONE"; break; - case (unsigned)ActivityFlags::Varied: s << "VARIED"; break; - case (unsigned)ActivityFlags::Useful: s << "USEFUL"; break; - case (unsigned)ActivityFlags::Active: s << "ACTIVE"; break; - } - s << "] " << value; -} - -static void dumpActivityInfo(SILFunction &fn, SILAutoDiffIndices indices, - const DifferentiableActivityInfo &activityInfo, - llvm::raw_ostream &s = llvm::dbgs()) { - s << "Activity info for " << fn.getName() << " at " << indices << '\n'; - for (auto &bb : fn) { - s << "bb" << bb.getDebugID() << ":\n"; - for (auto *arg : bb.getArguments()) - dumpActivityInfo(arg, indices, activityInfo, s); - for (auto &inst : bb) - for (auto res : inst.getResults()) - dumpActivityInfo(res, indices, activityInfo, s); - s << '\n'; - } -} - /// If the original function doesn't have a return, it cannot be differentiated. /// Returns true if error is emitted. static bool diagnoseNoReturn(ADContext &context, SILFunction *original, @@ -1374,7 +1344,7 @@ class VJPEmitter final vjp->getLoweredFunctionType()->getSubstGenericSignature(), AutoDiffDerivativeFunctionKind::VJP); LLVM_DEBUG( - dumpActivityInfo(*original, indices, activityInfo, getADDebugStream())); + activityInfo.dumpActivityInfo(*original, indices, getADDebugStream())); return activityInfo; } @@ -2128,7 +2098,7 @@ class JVPEmitter final jvp->getLoweredFunctionType()->getSubstGenericSignature(), AutoDiffDerivativeFunctionKind::JVP); LLVM_DEBUG( - dumpActivityInfo(*original, indices, activityInfo, getADDebugStream())); + activityInfo.dumpActivityInfo(*original, indices, getADDebugStream())); return activityInfo; } From aac03c45371565ea79534eedb2a755b20f1e89bd Mon Sep 17 00:00:00 2001 From: Gogul Balakrishnan Date: Thu, 5 Dec 2019 13:42:37 -0800 Subject: [PATCH 2/3] dumpActivityInfo -> dump --- .../Analysis/DifferentiableActivityAnalysis.h | 10 ++++------ .../Analysis/DifferentiableActivityAnalysis.cpp | 16 ++++++++-------- lib/SILOptimizer/Mandatory/Differentiation.cpp | 4 ++-- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h b/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h index 869a2f50c9fea..a5ffe643c56a2 100644 --- a/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h +++ b/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h @@ -208,14 +208,12 @@ class DifferentiableActivityInfo { Activity getActivity(SILValue value, const SILAutoDiffIndices &indices) const; /// Prints activity information for the `indices` of the given `value`. - void dumpActivityInfo(SILValue value, - const SILAutoDiffIndices &indices, - llvm::raw_ostream &s = llvm::dbgs()) const; + void dump(SILValue value, const SILAutoDiffIndices &indices, + llvm::raw_ostream &s = llvm::dbgs()) const; /// Prints activity information for the `indices` of the given `fn`. - void dumpActivityInfo(SILFunction &fn, SILAutoDiffIndices indices, - llvm::raw_ostream &s = llvm::dbgs()) const; - + void dump(SILFunction &fn, SILAutoDiffIndices indices, + llvm::raw_ostream &s = llvm::dbgs()) const; }; class DifferentiableActivityCollection { diff --git a/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp b/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp index 0fb2cb299c9c1..32bf300fe06c4 100644 --- a/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp +++ b/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp @@ -422,9 +422,9 @@ Activity DifferentiableActivityInfo::getActivity( return activity; } -void DifferentiableActivityInfo::dumpActivityInfo( - SILValue value, const SILAutoDiffIndices &indices, - llvm::raw_ostream &s) const { +void DifferentiableActivityInfo::dump(SILValue value, + const SILAutoDiffIndices &indices, + llvm::raw_ostream &s) const { s << '['; auto activity = getActivity(value, indices); switch (activity.toRaw()) { @@ -436,17 +436,17 @@ void DifferentiableActivityInfo::dumpActivityInfo( s << "] " << value; } -void DifferentiableActivityInfo::dumpActivityInfo(SILFunction &fn, - SILAutoDiffIndices indices, - llvm::raw_ostream &s) const { +void DifferentiableActivityInfo::dump(SILFunction &fn, + SILAutoDiffIndices indices, + llvm::raw_ostream &s) const { s << "Activity info for " << fn.getName() << " at " << indices << '\n'; for (auto &bb : fn) { s << "bb" << bb.getDebugID() << ":\n"; for (auto *arg : bb.getArguments()) - dumpActivityInfo(arg, indices, s); + dump(arg, indices, s); for (auto &inst : bb) for (auto res : inst.getResults()) - dumpActivityInfo(res, indices, s); + dump(res, indices, s); s << '\n'; } } diff --git a/lib/SILOptimizer/Mandatory/Differentiation.cpp b/lib/SILOptimizer/Mandatory/Differentiation.cpp index 396a3ec735c48..511d647a5ed0b 100644 --- a/lib/SILOptimizer/Mandatory/Differentiation.cpp +++ b/lib/SILOptimizer/Mandatory/Differentiation.cpp @@ -1344,7 +1344,7 @@ class VJPEmitter final vjp->getLoweredFunctionType()->getSubstGenericSignature(), AutoDiffDerivativeFunctionKind::VJP); LLVM_DEBUG( - activityInfo.dumpActivityInfo(*original, indices, getADDebugStream())); + activityInfo.dump(*original, indices, getADDebugStream())); return activityInfo; } @@ -2098,7 +2098,7 @@ class JVPEmitter final jvp->getLoweredFunctionType()->getSubstGenericSignature(), AutoDiffDerivativeFunctionKind::JVP); LLVM_DEBUG( - activityInfo.dumpActivityInfo(*original, indices, getADDebugStream())); + activityInfo.dump(*original, indices, getADDebugStream())); return activityInfo; } From f6f98c50954c1af7e38fe84fa2661639dcafe9ef Mon Sep 17 00:00:00 2001 From: Gogul Balakrishnan Date: Thu, 5 Dec 2019 14:58:19 -0800 Subject: [PATCH 3/3] Remove redundant argument from DifferentiableActivityInfo::dump(). --- .../SILOptimizer/Analysis/DifferentiableActivityAnalysis.h | 6 +++--- .../Analysis/DifferentiableActivityAnalysis.cpp | 6 +++--- lib/SILOptimizer/Mandatory/Differentiation.cpp | 6 ++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h b/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h index a5ffe643c56a2..beb02f1d84804 100644 --- a/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h +++ b/include/swift/SILOptimizer/Analysis/DifferentiableActivityAnalysis.h @@ -131,7 +131,7 @@ class DifferentiableActivityInfo { SmallVector, 4> usefulValueSets; /// The original function. - SILFunction &getFunction(); + SILFunction &getFunction() const; /// Returns true if the given SILValue has a tangent space. bool hasTangentSpace(SILValue value) { @@ -211,8 +211,8 @@ class DifferentiableActivityInfo { void dump(SILValue value, const SILAutoDiffIndices &indices, llvm::raw_ostream &s = llvm::dbgs()) const; - /// Prints activity information for the `indices` of the given `fn`. - void dump(SILFunction &fn, SILAutoDiffIndices indices, + /// Prints activity information for the given `indices`. + void dump(SILAutoDiffIndices indices, llvm::raw_ostream &s = llvm::dbgs()) const; }; diff --git a/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp b/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp index 32bf300fe06c4..718b999aff516 100644 --- a/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp +++ b/lib/SILOptimizer/Analysis/DifferentiableActivityAnalysis.cpp @@ -59,7 +59,7 @@ DifferentiableActivityInfo::DifferentiableActivityInfo( analyze(parent.domInfo, parent.postDomInfo); } -SILFunction &DifferentiableActivityInfo::getFunction() { +SILFunction &DifferentiableActivityInfo::getFunction() const { return parent.function; } @@ -436,9 +436,9 @@ void DifferentiableActivityInfo::dump(SILValue value, s << "] " << value; } -void DifferentiableActivityInfo::dump(SILFunction &fn, - SILAutoDiffIndices indices, +void DifferentiableActivityInfo::dump(SILAutoDiffIndices indices, llvm::raw_ostream &s) const { + SILFunction &fn = getFunction(); s << "Activity info for " << fn.getName() << " at " << indices << '\n'; for (auto &bb : fn) { s << "bb" << bb.getDebugID() << ":\n"; diff --git a/lib/SILOptimizer/Mandatory/Differentiation.cpp b/lib/SILOptimizer/Mandatory/Differentiation.cpp index 511d647a5ed0b..f067bf0799a97 100644 --- a/lib/SILOptimizer/Mandatory/Differentiation.cpp +++ b/lib/SILOptimizer/Mandatory/Differentiation.cpp @@ -1343,8 +1343,7 @@ class VJPEmitter final auto &activityInfo = activityCollection.getActivityInfo( vjp->getLoweredFunctionType()->getSubstGenericSignature(), AutoDiffDerivativeFunctionKind::VJP); - LLVM_DEBUG( - activityInfo.dump(*original, indices, getADDebugStream())); + LLVM_DEBUG(activityInfo.dump(indices, getADDebugStream())); return activityInfo; } @@ -2097,8 +2096,7 @@ class JVPEmitter final auto &activityInfo = activityCollection.getActivityInfo( jvp->getLoweredFunctionType()->getSubstGenericSignature(), AutoDiffDerivativeFunctionKind::JVP); - LLVM_DEBUG( - activityInfo.dump(*original, indices, getADDebugStream())); + LLVM_DEBUG(activityInfo.dump(indices, getADDebugStream())); return activityInfo; }