// for miscompilation.
//
enum OutputType {
- AutoPick, RunLLI, RunJIT, RunLLC, RunCBE, CBE_bug
+ AutoPick, RunLLI, RunJIT, RunLLC, RunCBE, CBE_bug, LLC_Safe
};
cl::opt<double>
clEnumValN(RunLLC, "run-llc", "Compile with LLC"),
clEnumValN(RunCBE, "run-cbe", "Compile with CBE"),
clEnumValN(CBE_bug,"cbe-bug", "Find CBE bugs"),
+ clEnumValN(LLC_Safe, "llc-safe", "Use LLC for all"),
clEnumValEnd),
cl::init(AutoPick));
cl::desc("Assume nonzero exit code is failure (default on)"),
cl::init(true));
+ cl::opt<bool>
+ AppendProgramExitCode("append-exit-code",
+ cl::desc("Append the exit code to the output so it gets diff'd too"),
+ cl::init(false));
+
cl::opt<std::string>
InputFile("input", cl::init("/dev/null"),
cl::desc("Filename to pipe in as stdin (default: /dev/null)"));
Interpreter = AbstractInterpreter::createJIT(getToolName(), Message,
&ToolArgv);
break;
+ case LLC_Safe:
+ Interpreter = AbstractInterpreter::createLLC(getToolName(), Message,
+ &ToolArgv);
+ break;
case RunCBE:
case CBE_bug:
Interpreter = AbstractInterpreter::createCBE(getToolName(), Message,
if (InterpreterSel == RunCBE) {
// We already created a CBE, reuse it.
cbe = Interpreter;
- } else if (InterpreterSel == CBE_bug) {
- // We want to debug the CBE itself. Use LLC as the 'known-good' compiler.
+ } else if (InterpreterSel == CBE_bug || InterpreterSel == LLC_Safe) {
+ // We want to debug the CBE itself or LLC is known-good. Use LLC as the
+ // 'known-good' compiler.
std::vector<std::string> ToolArgs;
ToolArgs.push_back("--relocation-model=pic");
cbe = AbstractInterpreter::createLLC(getToolName(), Message, &ToolArgs);
InterpreterSel == CBE_bug)
RetVal = AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile,
OutputFile, AdditionalLinkerArgs, SharedObjs,
- Timeout);
+ Timeout, MemoryLimit);
else
RetVal = AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile,
OutputFile, std::vector<std::string>(),
- SharedObjs, Timeout);
+ SharedObjs, Timeout, MemoryLimit);
if (RetVal == -1) {
std::cerr << "<timeout>";
}
}
+ if (AppendProgramExitCode) {
+ std::ofstream outFile(OutputFile.c_str(), std::ios_base::app);
+ outFile << "exit " << RetVal << '\n';
+ outFile.close();
+ }
+
if (ProgramExitedNonzero != 0)
*ProgramExitedNonzero = (RetVal != 0);