class IRTransformLayer2 : public IRLayer {
public:
- using TransformFunction =
- std::function<Expected<ThreadSafeModule>(ThreadSafeModule)>;
+ using TransformFunction = std::function<Expected<ThreadSafeModule>(
+ ThreadSafeModule, const MaterializationResponsibility &R)>;
IRTransformLayer2(ExecutionSession &ES, IRLayer &BaseLayer,
TransformFunction Transform = identityTransform);
void emit(MaterializationResponsibility R, VModuleKey K,
ThreadSafeModule TSM) override;
- static ThreadSafeModule identityTransform(ThreadSafeModule TSM) {
+ static ThreadSafeModule
+ identityTransform(ThreadSafeModule TSM,
+ const MaterializationResponsibility &R) {
return TSM;
}
/// instance, or null if the instance was default constructed.
LLVMContext *getContext() { return S ? S->Ctx.get() : nullptr; }
+ /// Returns a pointer to the LLVMContext that was used to construct this
+ /// instance, or null if the instance was default constructed.
+ const LLVMContext *getContext() const { return S ? S->Ctx.get() : nullptr; }
+
Lock getLock() {
assert(S && "Can not lock an empty ThreadSafeContext");
return Lock(S);
static orc::IRTransformLayer2::TransformFunction createDebugDumper() {
switch (OrcDumpKind) {
case DumpKind::NoDump:
- return [](orc::ThreadSafeModule TSM) { return TSM; };
+ return [](orc::ThreadSafeModule TSM,
+ const orc::MaterializationResponsibility &R) { return TSM; };
case DumpKind::DumpFuncsToStdOut:
- return [](orc::ThreadSafeModule TSM) {
+ return [](orc::ThreadSafeModule TSM,
+ const orc::MaterializationResponsibility &R) {
printf("[ ");
for (const auto &F : *TSM.getModule()) {
};
case DumpKind::DumpModsToStdOut:
- return [](orc::ThreadSafeModule TSM) {
+ return [](orc::ThreadSafeModule TSM,
+ const orc::MaterializationResponsibility &R) {
outs() << "----- Module Start -----\n"
<< *TSM.getModule() << "----- Module End -----\n";
};
case DumpKind::DumpModsToDisk:
- return [](orc::ThreadSafeModule TSM) {
+ return [](orc::ThreadSafeModule TSM,
+ const orc::MaterializationResponsibility &R) {
std::error_code EC;
raw_fd_ostream Out(TSM.getModule()->getModuleIdentifier() + ".ll", EC,
sys::fs::F_Text);
auto Dump = createDebugDumper();
- J->setLazyCompileTransform([&](orc::ThreadSafeModule TSM) {
+ J->setLazyCompileTransform([&](orc::ThreadSafeModule TSM,
+ const orc::MaterializationResponsibility &R) {
if (verifyModule(*TSM.getModule(), &dbgs())) {
dbgs() << "Bad module: " << *TSM.getModule() << "\n";
exit(1);
}
- return Dump(std::move(TSM));
+ return Dump(std::move(TSM), R);
});
J->getMainJITDylib().setFallbackDefinitionGenerator(
orc::DynamicLibraryFallbackGenerator(