summaryrefslogtreecommitdiff
path: root/src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp
diff options
context:
space:
mode:
authorSergey Andreenko <seandree@microsoft.com>2017-09-28 10:37:15 -0700
committerGitHub <noreply@github.com>2017-09-28 10:37:15 -0700
commit212a6baa708f40e25860581557b3dda717b709d9 (patch)
tree83d3ea7e65d2c9541b48ae3843da10ff8d12143d /src/ToolBox/superpmi/superpmi/parallelsuperpmi.cpp
parent0a17ae10d45db4731071e9a450178933b6d9d1f5 (diff)
downloadcoreclr-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.cpp47
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);