X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=tools%2Flli%2Flli.cpp;h=f9d86d75b1a70a3f67a65bde62ddcb8abb934ceb;hb=10b4fc552f984dc978298d50c09c97c0764962fc;hp=40b858e9d1a63758875eed944ed52ab1f8855918;hpb=fd15beefeedcb8108913e75e7c736dfcc17b433a;p=oota-llvm.git diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp index 40b858e9d1a..f9d86d75b1a 100644 --- a/tools/lli/lli.cpp +++ b/tools/lli/lli.cpp @@ -94,8 +94,13 @@ int main(int argc, char **argv, char * const *envp) { sys::PrintStackTraceOnErrorSignal(); PrettyStackTraceProgram X(argc, argv); - LLVMContext Context; + LLVMContext &Context = getGlobalContext(); atexit(do_shutdown); // Call llvm_shutdown() on exit. + + // If we have a native target, initialize it to ensure it is linked in and + // usable by the JIT. + InitializeNativeTarget(); + cl::ParseCommandLineOptions(argc, argv, "llvm interpreter & dynamic compiler\n"); @@ -112,8 +117,8 @@ int main(int argc, char **argv, char * const *envp) { } if (!MP) { - std::cerr << argv[0] << ": error loading program '" << InputFile << "': " - << ErrorMsg << "\n"; + errs() << argv[0] << ": error loading program '" << InputFile << "': " + << ErrorMsg << "\n"; exit(1); } @@ -121,11 +126,17 @@ int main(int argc, char **argv, char * const *envp) { Module *Mod = NoLazyCompilation ? MP->materializeModule(&ErrorMsg) : MP->getModule(); if (!Mod) { - std::cerr << argv[0] << ": bitcode didn't read correctly.\n"; - std::cerr << "Reason: " << ErrorMsg << "\n"; + errs() << argv[0] << ": bitcode didn't read correctly.\n"; + errs() << "Reason: " << ErrorMsg << "\n"; exit(1); } + EngineBuilder builder(MP); + builder.setErrorStr(&ErrorMsg); + builder.setEngineKind(ForceInterpreter + ? EngineKind::Interpreter + : EngineKind::JIT); + // If we are supposed to override the target triple, do so now. if (!TargetTriple.empty()) Mod->setTargetTriple(TargetTriple); @@ -133,7 +144,7 @@ int main(int argc, char **argv, char * const *envp) { CodeGenOpt::Level OLvl = CodeGenOpt::Default; switch (OptLevel) { default: - std::cerr << argv[0] << ": invalid optimization level.\n"; + errs() << argv[0] << ": invalid optimization level.\n"; return 1; case ' ': break; case '0': OLvl = CodeGenOpt::None; break; @@ -141,21 +152,19 @@ int main(int argc, char **argv, char * const *envp) { case '2': OLvl = CodeGenOpt::Default; break; case '3': OLvl = CodeGenOpt::Aggressive; break; } - - // If we have a native target, initialize it to ensure it is linked in and - // usable by the JIT. - InitializeNativeTarget(); + builder.setOptLevel(OLvl); - EE = ExecutionEngine::create(MP, ForceInterpreter, &ErrorMsg, OLvl); + EE = builder.create(); if (!EE) { if (!ErrorMsg.empty()) - std::cerr << argv[0] << ": error creating EE: " << ErrorMsg << "\n"; + errs() << argv[0] << ": error creating EE: " << ErrorMsg << "\n"; else - std::cerr << argv[0] << ": unknown error creating EE!\n"; + errs() << argv[0] << ": unknown error creating EE!\n"; exit(1); } EE->RegisterJITEventListener(createMacOSJITEventListener()); + EE->RegisterJITEventListener(createOProfileJITEventListener()); if (NoLazyCompilation) EE->DisableLazyCompilation(); @@ -181,7 +190,7 @@ int main(int argc, char **argv, char * const *envp) { // Function *EntryFn = Mod->getFunction(EntryFunc); if (!EntryFn) { - std::cerr << '\'' << EntryFunc << "\' function not found in module.\n"; + errs() << '\'' << EntryFunc << "\' function not found in module.\n"; return -1; } @@ -218,10 +227,10 @@ int main(int argc, char **argv, char * const *envp) { ResultGV.IntVal = APInt(32, Result); Args.push_back(ResultGV); EE->runFunction(ExitF, Args); - std::cerr << "ERROR: exit(" << Result << ") returned!\n"; + errs() << "ERROR: exit(" << Result << ") returned!\n"; abort(); } else { - std::cerr << "ERROR: exit defined with wrong prototype!\n"; + errs() << "ERROR: exit defined with wrong prototype!\n"; abort(); } }