summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/tools/lli/OrcLazyJIT.cpp8
-rw-r--r--llvm/tools/lli/OrcLazyJIT.h3
-rw-r--r--llvm/tools/lli/lli.cpp14
3 files changed, 19 insertions, 6 deletions
diff --git a/llvm/tools/lli/OrcLazyJIT.cpp b/llvm/tools/lli/OrcLazyJIT.cpp
index 552f5791a10..a36d5731599 100644
--- a/llvm/tools/lli/OrcLazyJIT.cpp
+++ b/llvm/tools/lli/OrcLazyJIT.cpp
@@ -105,7 +105,8 @@ static PtrTy fromTargetAddress(JITTargetAddress Addr) {
return reinterpret_cast<PtrTy>(static_cast<uintptr_t>(Addr));
}
-int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) {
+int llvm::runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int ArgC,
+ char* ArgV[]) {
// Add the program's symbols into the JIT's search space.
if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr)) {
errs() << "Error loading program symbols.\n";
@@ -143,8 +144,9 @@ int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) {
OrcInlineStubs);
// Add the module, look up main and run it.
- auto MainHandle = J.addModule(std::move(M));
- auto MainSym = J.findSymbolIn(MainHandle, "main");
+ for (auto &M : Ms)
+ J.addModule(std::move(M));
+ auto MainSym = J.findSymbol("main");
if (!MainSym) {
errs() << "Could not find main function.\n";
diff --git a/llvm/tools/lli/OrcLazyJIT.h b/llvm/tools/lli/OrcLazyJIT.h
index 72f35ad6ab6..26be63de53e 100644
--- a/llvm/tools/lli/OrcLazyJIT.h
+++ b/llvm/tools/lli/OrcLazyJIT.h
@@ -156,7 +156,8 @@ private:
std::vector<orc::CtorDtorRunner<CODLayerT>> IRStaticDestructorRunners;
};
-int runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]);
+int runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int ArgC,
+ char* ArgV[]);
} // end namespace llvm
diff --git a/llvm/tools/lli/lli.cpp b/llvm/tools/lli/lli.cpp
index be22cc927c2..31979097b93 100644
--- a/llvm/tools/lli/lli.cpp
+++ b/llvm/tools/lli/lli.cpp
@@ -397,8 +397,18 @@ int main(int argc, char **argv, char * const *envp) {
return 1;
}
- if (UseJITKind == JITKind::OrcLazy)
- return runOrcLazyJIT(std::move(Owner), argc, argv);
+ if (UseJITKind == JITKind::OrcLazy) {
+ std::vector<std::unique_ptr<Module>> Ms;
+ Ms.push_back(std::move(Owner));
+ for (auto &ExtraMod : ExtraModules) {
+ Ms.push_back(parseIRFile(ExtraMod, Err, Context));
+ if (!Ms.back()) {
+ Err.print(argv[0], errs());
+ return 1;
+ }
+ }
+ return runOrcLazyJIT(std::move(Ms), argc, argv);
+ }
if (EnableCacheManager) {
std::string CacheName("file:");
OpenPOWER on IntegriCloud