summaryrefslogtreecommitdiff
path: root/src/ToolBox/superpmi/superpmi/superpmi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ToolBox/superpmi/superpmi/superpmi.cpp')
-rw-r--r--src/ToolBox/superpmi/superpmi/superpmi.cpp37
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(&param.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];