Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/examples/Kaleidoscope/BuildingAJIT/Chapter3/KaleidoscopeJIT.h
Show First 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | KaleidoscopeJIT() | ||||
Resolvers[K]}; | Resolvers[K]}; | ||||
}), | }), | ||||
CompileLayer(AcknowledgeORCv1Deprecation, ObjectLayer, | CompileLayer(AcknowledgeORCv1Deprecation, ObjectLayer, | ||||
SimpleCompiler(*TM)), | SimpleCompiler(*TM)), | ||||
OptimizeLayer(AcknowledgeORCv1Deprecation, CompileLayer, | OptimizeLayer(AcknowledgeORCv1Deprecation, CompileLayer, | ||||
[this](std::unique_ptr<Module> M) { | [this](std::unique_ptr<Module> M) { | ||||
return optimizeModule(std::move(M)); | return optimizeModule(std::move(M)); | ||||
}), | }), | ||||
CompileCallbackManager(cantFail(orc::createLocalCompileCallbackManager( | CompileCallbackManager(llvm_cantFail(orc::createLocalCompileCallbackManager( | ||||
TM->getTargetTriple(), ES, 0))), | TM->getTargetTriple(), ES, 0))), | ||||
CODLayer( | CODLayer( | ||||
AcknowledgeORCv1Deprecation, ES, OptimizeLayer, | AcknowledgeORCv1Deprecation, ES, OptimizeLayer, | ||||
[&](orc::VModuleKey K) { return Resolvers[K]; }, | [&](orc::VModuleKey K) { return Resolvers[K]; }, | ||||
[&](orc::VModuleKey K, std::shared_ptr<SymbolResolver> R) { | [&](orc::VModuleKey K, std::shared_ptr<SymbolResolver> R) { | ||||
Resolvers[K] = std::move(R); | Resolvers[K] = std::move(R); | ||||
}, | }, | ||||
[](Function &F) { return std::set<Function *>({&F}); }, | [](Function &F) { return std::set<Function *>({&F}); }, | ||||
Show All 17 Lines | Resolvers[K] = createLegacyLookupResolver( | ||||
return Sym; | return Sym; | ||||
else if (auto Err = Sym.takeError()) | else if (auto Err = Sym.takeError()) | ||||
return std::move(Err); | return std::move(Err); | ||||
if (auto SymAddr = | if (auto SymAddr = | ||||
RTDyldMemoryManager::getSymbolAddressInProcess(Name)) | RTDyldMemoryManager::getSymbolAddressInProcess(Name)) | ||||
return JITSymbol(SymAddr, JITSymbolFlags::Exported); | return JITSymbol(SymAddr, JITSymbolFlags::Exported); | ||||
return nullptr; | return nullptr; | ||||
}, | }, | ||||
[](Error Err) { cantFail(std::move(Err), "lookupFlags failed"); }); | [](Error Err) { llvm_cantFail(std::move(Err), "lookupFlags failed"); }); | ||||
// Add the module to the JIT with the new key. | // Add the module to the JIT with the new key. | ||||
cantFail(CODLayer.addModule(K, std::move(M))); | llvm_cantFail(CODLayer.addModule(K, std::move(M))); | ||||
return K; | return K; | ||||
} | } | ||||
JITSymbol findSymbol(const std::string Name) { | JITSymbol findSymbol(const std::string Name) { | ||||
std::string MangledName; | std::string MangledName; | ||||
raw_string_ostream MangledNameStream(MangledName); | raw_string_ostream MangledNameStream(MangledName); | ||||
Mangler::getNameWithPrefix(MangledNameStream, Name, DL); | Mangler::getNameWithPrefix(MangledNameStream, Name, DL); | ||||
return CODLayer.findSymbol(MangledNameStream.str(), true); | return CODLayer.findSymbol(MangledNameStream.str(), true); | ||||
} | } | ||||
void removeModule(VModuleKey K) { | void removeModule(VModuleKey K) { | ||||
cantFail(CODLayer.removeModule(K)); | llvm_cantFail(CODLayer.removeModule(K)); | ||||
} | } | ||||
private: | private: | ||||
std::unique_ptr<Module> optimizeModule(std::unique_ptr<Module> M) { | std::unique_ptr<Module> optimizeModule(std::unique_ptr<Module> M) { | ||||
// Create a function pass manager. | // Create a function pass manager. | ||||
auto FPM = std::make_unique<legacy::FunctionPassManager>(M.get()); | auto FPM = std::make_unique<legacy::FunctionPassManager>(M.get()); | ||||
// Add some optimizations. | // Add some optimizations. | ||||
Show All 19 Lines |