Skip to content

Commit 13ca872

Browse files
committed
Revert "[ORC] Replace ORC's baked-in dependence tracking ... (#163027)"
Reverts commit c8c86ef while I investigate bot failures, e.g. https://lab.llvm.org/buildbot/#/builders/187/builds/12743.
1 parent c8c86ef commit 13ca872

File tree

7 files changed

+737
-1429
lines changed

7 files changed

+737
-1429
lines changed

llvm/include/llvm/ExecutionEngine/Orc/Core.h

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
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

5150
enum class SymbolState : uint8_t;
5251

53-
using WaitingOnGraph =
54-
detail::WaitingOnGraph<JITDylib *, NonOwningSymbolStringPtr>;
55-
5652
using ResourceTrackerSP = IntrusiveRefCntPtr<ResourceTracker>;
5753
using 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

Comments
 (0)