diff options
Diffstat (limited to 'src/ToolBox/superpmi/superpmi/superpmi.cpp')
-rw-r--r-- | src/ToolBox/superpmi/superpmi/superpmi.cpp | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/src/ToolBox/superpmi/superpmi/superpmi.cpp b/src/ToolBox/superpmi/superpmi/superpmi.cpp index c1225e419e..a8363a608d 100644 --- a/src/ToolBox/superpmi/superpmi/superpmi.cpp +++ b/src/ToolBox/superpmi/superpmi/superpmi.cpp @@ -9,6 +9,7 @@ #include "coredistools.h" #endif // USE_COREDISTOOLS +#include "lightweightmap.h" #include "commandline.h" #include "superpmi.h" #include "jitinstance.h" @@ -106,8 +107,8 @@ void InvokeNearDiffer(NearDiffer* nearDiffer, { SpmiException e(¶m.exceptionPointers); - LogError("main method %d of size %d failed to load and compile correctly. EnvCnt=%d", - (*reader)->GetMethodContextIndex(), (*mc)->methodSize, (*mc)->repEnvironmentGetCount()); + LogError("main method %d of size %d failed to load and compile correctly.", + (*reader)->GetMethodContextIndex(), (*mc)->methodSize); e.ShowAndDeleteMessage(); if ((*o).mclFilename != nullptr) (*failingMCL).AddMethodToMCL((*reader)->GetMethodContextIndex()); @@ -240,7 +241,10 @@ int __cdecl main(int argc, char* argv[]) if (o.applyDiff) { - nearDiffer.InitAsmDiff(); + if (!nearDiffer.InitAsmDiff()) + { + return -1; + } } while (true) @@ -283,7 +287,7 @@ int __cdecl main(int argc, char* argv[]) { SimpleTimer st4; - jit = JitInstance::InitJit(o.nameOfJit, o.breakOnAssert, &st4, mc); + jit = JitInstance::InitJit(o.nameOfJit, o.breakOnAssert, &st4, mc, o.jitOptions); if (jit == nullptr) { // InitJit already printed a failure message @@ -292,7 +296,7 @@ int __cdecl main(int argc, char* argv[]) if (o.nameOfJit2 != nullptr) { - jit2 = JitInstance::InitJit(o.nameOfJit2, o.breakOnAssert, &st4, mc); + jit2 = JitInstance::InitJit(o.nameOfJit2, o.breakOnAssert, &st4, mc, o.jit2Options); if (jit2 == nullptr) { // InitJit already printed a failure message @@ -310,6 +314,21 @@ int __cdecl main(int argc, char* argv[]) mc->cr = new CompileResult(); mc->originalCR = crl; + if (mc->wasEnviromentChanged()) + { + if (!jit->resetConfig(mc)) + { + LogError("JIT can't reset enviroment"); + } + if (o.nameOfJit2 != nullptr) + { + if (!jit2->resetConfig(mc)) + { + LogError("JIT2 can't reset enviroment"); + } + } + } + jittedCount++; st3.Start(); res = jit->CompileMethod(mc, reader->GetMethodContextIndex(), collectThroughput); @@ -342,8 +361,8 @@ int __cdecl main(int argc, char* argv[]) if (res2 == JitInstance::RESULT_ERROR) { - LogError("JIT2 main method %d of size %d failed to load and compile correctly. EnvCnt=%d", - reader->GetMethodContextIndex(), mc->methodSize, mc->repEnvironmentGetCount()); + LogError("JIT2 main method %d of size %d failed to load and compile correctly.", + reader->GetMethodContextIndex(), mc->methodSize); } // Methods that don't compile due to missing JIT-EE information @@ -485,8 +504,8 @@ int __cdecl main(int argc, char* argv[]) // to, for instance, failures caused by missing JIT-EE details). if (res == JitInstance::RESULT_ERROR) { - LogError("main method %d of size %d failed to load and compile correctly. EnvCnt=%d", - reader->GetMethodContextIndex(), mc->methodSize, mc->repEnvironmentGetCount()); + LogError("main method %d of size %d failed to load and compile correctly.", + reader->GetMethodContextIndex(), mc->methodSize); if ((o.reproName != nullptr) && (o.indexCount == -1)) { char buff[500]; |