LLVM: include/llvm/ExecutionEngine/Orc/ReOptimizeLayer.h Source File (original) (raw)
29public:
31
32
33
34
38
39
40
41
42
43
44
48
52 BaseLayer(BaseLayer), RSManager(RM), ReOptFunc(identity),
54
56 this->ReOptFunc = std::move(ReOptFunc);
57 }
58
60 this->ProfilerFunc = std::move(ProfilerFunc);
61 }
62
63
64
65
66 Error reigsterRuntimeFunctions(JITDylib &PlatformJD);
67
68
69
70 void emit(std::unique_ptr R,
72
74
75
76
79 unsigned CurVersion,
81
87
88
91
95
96private:
97 class ReOptMaterializationUnitState {
98 public:
99 ReOptMaterializationUnitState() = default;
100 ReOptMaterializationUnitState(ReOptMaterializationUnitID ID,
103 ReOptMaterializationUnitState(ReOptMaterializationUnitState &&Other)
106 CurVersion(Other.CurVersion) {}
107
108 ReOptMaterializationUnitID getID() { return ID; }
109
110 const ThreadSafeModule &getThreadSafeModule() { return TSM; }
111
113 std::unique_lockstd::mutex Lock(Mutex);
114 return RT;
115 }
116
117 void setResourceTracker(ResourceTrackerSP RT) {
118 std::unique_lockstd::mutex Lock(Mutex);
119 this->RT = RT;
120 }
121
122 uint32_t getCurVersion() {
123 std::unique_lockstd::mutex Lock(Mutex);
124 return CurVersion;
125 }
126
127 LLVM_ABI bool tryStartReoptimize();
128 LLVM_ABI void reoptimizeSucceeded();
129 LLVM_ABI void reoptimizeFailed();
130
131 private:
132 std::mutex Mutex;
133 ReOptMaterializationUnitID ID;
134 ThreadSafeModule TSM;
136 bool Reoptimizing = false;
137 uint32_t CurVersion = 0;
138 };
139
140 using SPSReoptimizeArgList =
141 shared::SPSArgList<ReOptMaterializationUnitID, uint32_t>;
142 using SendErrorFn = unique_function<void(Error)>;
143
144 Expected emitMUImplSymbols(ReOptMaterializationUnitState &MUState,
145 uint32_t Version, JITDylib &JD,
146 ThreadSafeModule TSM);
147
148 void rt_reoptimize(SendErrorFn SendResult, ReOptMaterializationUnitID MUID,
149 uint32_t CurVersion);
150
151 static Expected<Constant *>
152 createReoptimizeArgBuffer(Module &M, ReOptMaterializationUnitID MUID,
153 uint32_t CurVersion);
154
155 ReOptMaterializationUnitState &
156 createMaterializationUnitState(const ThreadSafeModule &TSM);
157
158 void
159 registerMaterializationUnitResource(ResourceKey Key,
160 ReOptMaterializationUnitState &State);
161
162 ReOptMaterializationUnitState &
163 getMaterializationUnitState(ReOptMaterializationUnitID MUID);
164
165 ExecutionSession &ES;
166 MangleAndInterner Mangle;
167 IRLayer &BaseLayer;
168 RedirectableSymbolManager &RSManager;
169
170 ReOptimizeFunc ReOptFunc;
171 AddProfilerFunc ProfilerFunc;
172
173 std::mutex Mutex;
174 std::map<ReOptMaterializationUnitID, ReOptMaterializationUnitState> MUStates;
175 DenseMap<ResourceKey, DenseSet> MUResources;
176 ReOptMaterializationUnitID NextID = 1;
177};