diff options
author | Sergey Andreenko <seandree@microsoft.com> | 2017-09-28 10:37:15 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-28 10:37:15 -0700 |
commit | 212a6baa708f40e25860581557b3dda717b709d9 (patch) | |
tree | 83d3ea7e65d2c9541b48ae3843da10ff8d12143d /src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp | |
parent | 0a17ae10d45db4731071e9a450178933b6d9d1f5 (diff) | |
download | coreclr-212a6baa708f40e25860581557b3dda717b709d9.tar.gz coreclr-212a6baa708f40e25860581557b3dda717b709d9.tar.bz2 coreclr-212a6baa708f40e25860581557b3dda717b709d9.zip |
Add the capability to force JIT options on the SPMI command line. (#14209)
expand the grammar for jit{,2}option to -jitoption [force] key=value
Diffstat (limited to 'src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp')
-rw-r--r-- | src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp b/src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp index 41b27deebc..f4c305d0d1 100644 --- a/src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp +++ b/src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp @@ -323,8 +323,31 @@ void MergeWorkerMCLs(char* mclFilename, char** arrWorkerMCLPath, int workerCount LogError("Unable to write to MCL file %s.", mclFilename); } -// From the arguments that we parsed, construct the arguments to pass to the child processes. #define MAX_CMDLINE_SIZE 0x1000 // 4 KB + +//------------------------------------------------------------- +// addJitOptionArgument: Writes jitOption arguments to the argument string for a child spmi process. +// +// Arguments: +// jitOptions - map with options +// bytesWritten - size of the argument string in bytes +// spmiArgs - pointer to the argument string +// optionName - the jitOption name, can include [force] flag. +// +void addJitOptionArgument(LightWeightMap<DWORD, DWORD>* jitOptions, int &bytesWritten, char * spmiArgs, const char* optionName) +{ + if (jitOptions != nullptr) + { + for (unsigned i = 0; i < jitOptions->GetCount(); i++) + { + wchar_t* key = (wchar_t*)jitOptions->GetBuffer(jitOptions->GetKey(i)); + wchar_t* value = (wchar_t*)jitOptions->GetBuffer(jitOptions->GetItem(i)); + bytesWritten += sprintf_s(spmiArgs + bytesWritten, MAX_CMDLINE_SIZE - bytesWritten, " -%s %S=%S", optionName, key, value); + } + } +} + +// From the arguments that we parsed, construct the arguments to pass to the child processes. char* ConstructChildProcessArgs(const CommandLine::Options& o) { int bytesWritten = 0; @@ -361,25 +384,11 @@ char* ConstructChildProcessArgs(const CommandLine::Options& o) ADDARG_STRING(o.targetArchitecture, "-target"); ADDARG_STRING(o.compileList, "-compile"); - if (o.jitOptions != nullptr) - { - for (unsigned i = 0; i < o.jitOptions->GetCount(); i++) - { - wchar_t* key = (wchar_t*)o.jitOptions->GetBuffer(o.jitOptions->GetKey(i)); - wchar_t* value = (wchar_t*)o.jitOptions->GetBuffer(o.jitOptions->GetItem(i)); - bytesWritten += sprintf_s(spmiArgs + bytesWritten, MAX_CMDLINE_SIZE - bytesWritten, " -jitoption %S=%S", key, value); - } - } + addJitOptionArgument(o.forceJitOptions, bytesWritten, spmiArgs, "jitoption force"); + addJitOptionArgument(o.forceJit2Options, bytesWritten, spmiArgs, "jit2option force"); - if (o.jit2Options != nullptr) - { - for (unsigned i = 0; i < o.jit2Options->GetCount(); i++) - { - wchar_t* key = (wchar_t*)o.jit2Options->GetBuffer(o.jit2Options->GetKey(i)); - wchar_t* value = (wchar_t*)o.jit2Options->GetBuffer(o.jit2Options->GetItem(i)); - bytesWritten += sprintf_s(spmiArgs + bytesWritten, MAX_CMDLINE_SIZE - bytesWritten, " -jit2option %S=%S", key, value); - } - } + addJitOptionArgument(o.jitOptions, bytesWritten, spmiArgs, "jitoption"); + addJitOptionArgument(o.jit2Options, bytesWritten, spmiArgs, "jit2option"); ADDSTRING(o.nameOfJit); ADDSTRING(o.nameOfJit2); |