2626#include " llvm/ExecutionEngine/Orc/Shared/ExecutorSymbolDef.h"
2727#include " llvm/ExecutionEngine/Orc/Shared/WrapperFunctionUtils.h"
2828#include " llvm/ExecutionEngine/Orc/TaskDispatch.h"
29- #include " llvm/ExecutionEngine/Orc/WaitingOnGraph.h"
3029#include " llvm/Support/Compiler.h"
3130#include " llvm/Support/Debug.h"
3231#include " llvm/Support/ExtensibleRTTI.h"
@@ -50,9 +49,6 @@ class InProgressLookupState;
5049
5150enum class SymbolState : uint8_t ;
5251
53- using WaitingOnGraph =
54- detail::WaitingOnGraph<JITDylib *, NonOwningSymbolStringPtr>;
55-
5652using ResourceTrackerSP = IntrusiveRefCntPtr<ResourceTracker>;
5753using JITDylibSP = IntrusiveRefCntPtr<JITDylib>;
5854
@@ -1135,6 +1131,20 @@ class JITDylib : public ThreadSafeRefCountedBase<JITDylib>,
11351131 using UnmaterializedInfosList =
11361132 std::vector<std::shared_ptr<UnmaterializedInfo>>;
11371133
1134+ struct EmissionDepUnit {
1135+ EmissionDepUnit (JITDylib &JD) : JD(&JD) {}
1136+
1137+ JITDylib *JD = nullptr ;
1138+ DenseMap<NonOwningSymbolStringPtr, JITSymbolFlags> Symbols;
1139+ DenseMap<JITDylib *, DenseSet<NonOwningSymbolStringPtr>> Dependencies;
1140+ };
1141+
1142+ struct EmissionDepUnitInfo {
1143+ std::shared_ptr<EmissionDepUnit> EDU;
1144+ DenseSet<EmissionDepUnit *> IntraEmitUsers;
1145+ DenseMap<JITDylib *, DenseSet<NonOwningSymbolStringPtr>> NewDeps;
1146+ };
1147+
11381148 // Information about not-yet-ready symbol.
11391149 // * DefiningEDU will point to the EmissionDepUnit that defines the symbol.
11401150 // * DependantEDUs will hold pointers to any EmissionDepUnits currently
@@ -1144,6 +1154,9 @@ class JITDylib : public ThreadSafeRefCountedBase<JITDylib>,
11441154 struct MaterializingInfo {
11451155 friend class ExecutionSession ;
11461156
1157+ std::shared_ptr<EmissionDepUnit> DefiningEDU;
1158+ DenseSet<EmissionDepUnit *> DependantEDUs;
1159+
11471160 LLVM_ABI void addQuery (std::shared_ptr<AsynchronousSymbolQuery> Q);
11481161 LLVM_ABI void removeQuery (const AsynchronousSymbolQuery &Q);
11491162 LLVM_ABI AsynchronousSymbolQueryList
@@ -1765,26 +1778,30 @@ class ExecutionSession {
17651778 LLVM_ABI Error OL_notifyResolved (MaterializationResponsibility &MR,
17661779 const SymbolMap &Symbols);
17671780
1768- // FIXME: We should be able to derive FailedSymsForQuery from each query once
1769- // we fix how the detach operation works.
1770- struct EmitQueries {
1771- JITDylib::AsynchronousSymbolQuerySet Updated;
1772- JITDylib::AsynchronousSymbolQuerySet Failed;
1773- DenseMap<AsynchronousSymbolQuery *, std::shared_ptr<SymbolDependenceMap>>
1774- FailedSymsForQuery;
1775- };
1776-
1777- WaitingOnGraph::ExternalState
1778- IL_getSymbolState (JITDylib *JD, NonOwningSymbolStringPtr Name);
1779-
1780- template <typename UpdateSymbolFn, typename UpdateQueryFn>
1781- void IL_collectQueries (JITDylib::AsynchronousSymbolQuerySet &Qs,
1782- WaitingOnGraph::ContainerElementsMap &QualifiedSymbols,
1783- UpdateSymbolFn &&UpdateSymbol,
1784- UpdateQueryFn &&UpdateQuery);
1785-
1786- Expected<EmitQueries> IL_emit (MaterializationResponsibility &MR,
1787- WaitingOnGraph::SimplifyResult SR);
1781+ using EDUInfosMap =
1782+ DenseMap<JITDylib::EmissionDepUnit *, JITDylib::EmissionDepUnitInfo>;
1783+
1784+ template <typename HandleNewDepFn>
1785+ void propagateExtraEmitDeps (std::deque<JITDylib::EmissionDepUnit *> Worklist,
1786+ EDUInfosMap &EDUInfos,
1787+ HandleNewDepFn HandleNewDep);
1788+ EDUInfosMap simplifyDepGroups (MaterializationResponsibility &MR,
1789+ ArrayRef<SymbolDependenceGroup> EmittedDeps);
1790+ void IL_makeEDUReady (std::shared_ptr<JITDylib::EmissionDepUnit> EDU,
1791+ JITDylib::AsynchronousSymbolQuerySet &Queries);
1792+ void IL_makeEDUEmitted (std::shared_ptr<JITDylib::EmissionDepUnit> EDU,
1793+ JITDylib::AsynchronousSymbolQuerySet &Queries);
1794+ bool IL_removeEDUDependence (JITDylib::EmissionDepUnit &EDU, JITDylib &DepJD,
1795+ NonOwningSymbolStringPtr DepSym,
1796+ EDUInfosMap &EDUInfos);
1797+
1798+ static Error makeJDClosedError (JITDylib::EmissionDepUnit &EDU,
1799+ JITDylib &ClosedJD);
1800+ static Error makeUnsatisfiedDepsError (JITDylib::EmissionDepUnit &EDU,
1801+ JITDylib &BadJD, SymbolNameSet BadDeps);
1802+
1803+ Expected<JITDylib::AsynchronousSymbolQuerySet>
1804+ IL_emit (MaterializationResponsibility &MR, EDUInfosMap EDUInfos);
17881805 LLVM_ABI Error OL_notifyEmitted (MaterializationResponsibility &MR,
17891806 ArrayRef<SymbolDependenceGroup> EmittedDeps);
17901807
@@ -1813,7 +1830,6 @@ class ExecutionSession {
18131830 std::vector<ResourceManager *> ResourceManagers;
18141831
18151832 std::vector<JITDylibSP> JDs;
1816- WaitingOnGraph G;
18171833
18181834 // FIXME: Remove this (and runOutstandingMUs) once the linking layer works
18191835 // with callbacks from asynchronous queries.
0 commit comments