Changes in directory llvm/tools/bugpoint:
BugDriver.cpp updated: 1.45 -> 1.46 BugDriver.h updated: 1.42 -> 1.43 ExecutionDriver.cpp updated: 1.60 -> 1.61 OptimizerDriver.cpp updated: 1.38 -> 1.39 bugpoint.cpp updated: 1.30 -> 1.31 --- Log message: Teach bugpoint to kill optimization passes that run over the timeout limit, which allows it to debug optimizer infinite loops. This patch is contributed by Nick Lewycky, thanks! --- Diffs of the changes: (+14 -12) BugDriver.cpp | 5 +++-- BugDriver.h | 3 ++- ExecutionDriver.cpp | 9 ++------- OptimizerDriver.cpp | 2 +- bugpoint.cpp | 7 ++++++- 5 files changed, 14 insertions(+), 12 deletions(-) Index: llvm/tools/bugpoint/BugDriver.cpp diff -u llvm/tools/bugpoint/BugDriver.cpp:1.45 llvm/tools/bugpoint/BugDriver.cpp:1.46 --- llvm/tools/bugpoint/BugDriver.cpp:1.45 Tue Jun 6 17:30:59 2006 +++ llvm/tools/bugpoint/BugDriver.cpp Mon Jun 12 22:10:48 2006 @@ -62,9 +62,10 @@ return Result; } -BugDriver::BugDriver(const char *toolname, bool as_child) +BugDriver::BugDriver(const char *toolname, bool as_child, unsigned timeout) : ToolName(toolname), ReferenceOutputFile(OutputFile), - Program(0), Interpreter(0), cbe(0), gcc(0), run_as_child(as_child) {} + Program(0), Interpreter(0), cbe(0), gcc(0), run_as_child(as_child), + Timeout(timeout) {} /// ParseInputFile - Given a bytecode or assembly input filename, parse and Index: llvm/tools/bugpoint/BugDriver.h diff -u llvm/tools/bugpoint/BugDriver.h:1.42 llvm/tools/bugpoint/BugDriver.h:1.43 --- llvm/tools/bugpoint/BugDriver.h:1.42 Thu Dec 22 14:02:55 2005 +++ llvm/tools/bugpoint/BugDriver.h Mon Jun 12 22:10:48 2006 @@ -48,13 +48,14 @@ CBE *cbe; GCC *gcc; bool run_as_child; + unsigned Timeout; // FIXME: sort out public/private distinctions... friend class ReducePassList; friend class ReduceMisCodegenFunctions; public: - BugDriver(const char *toolname, bool as_child); + BugDriver(const char *toolname, bool as_child, unsigned timeout); const std::string &getToolName() const { return ToolName; } Index: llvm/tools/bugpoint/ExecutionDriver.cpp diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.60 llvm/tools/bugpoint/ExecutionDriver.cpp:1.61 --- llvm/tools/bugpoint/ExecutionDriver.cpp:1.60 Tue Jun 6 17:30:59 2006 +++ llvm/tools/bugpoint/ExecutionDriver.cpp Mon Jun 12 22:10:48 2006 @@ -63,11 +63,6 @@ cl::desc("Additional shared objects to load " "into executing programs")); - cl::opt<unsigned> - TimeoutValue("timeout", cl::init(300), cl::value_desc("seconds"), - cl::desc("Number of seconds program is allowed to run before it " - "is killed (default is 300s), 0 disables timeout")); - cl::list<std::string> AdditionalLinkerArgs("Xlinker", cl::desc("Additional arguments to pass to the linker")); @@ -231,11 +226,11 @@ if (InterpreterSel == RunLLC || InterpreterSel == RunCBE) RetVal = AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile, OutputFile, AdditionalLinkerArgs, SharedObjs, - TimeoutValue); + Timeout); else RetVal = AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile, OutputFile, std::vector<std::string>(), - SharedObjs, TimeoutValue); + SharedObjs, Timeout); if (RetVal == -1) { std::cerr << "<timeout>"; Index: llvm/tools/bugpoint/OptimizerDriver.cpp diff -u llvm/tools/bugpoint/OptimizerDriver.cpp:1.38 llvm/tools/bugpoint/OptimizerDriver.cpp:1.39 --- llvm/tools/bugpoint/OptimizerDriver.cpp:1.38 Sun May 14 14:11:40 2006 +++ llvm/tools/bugpoint/OptimizerDriver.cpp Mon Jun 12 22:10:48 2006 @@ -179,7 +179,7 @@ args[n++] = 0; sys::Path prog(sys::Program::FindProgramByName(ToolName)); - int result = sys::Program::ExecuteAndWait(prog,args); + int result = sys::Program::ExecuteAndWait(prog,args,0,0,Timeout); // If we are supposed to delete the bytecode file or if the passes crashed, // remove it now. This may fail if the file was never created, but that's ok. Index: llvm/tools/bugpoint/bugpoint.cpp diff -u llvm/tools/bugpoint/bugpoint.cpp:1.30 llvm/tools/bugpoint/bugpoint.cpp:1.31 --- llvm/tools/bugpoint/bugpoint.cpp:1.30 Wed Jun 7 18:06:50 2006 +++ llvm/tools/bugpoint/bugpoint.cpp Mon Jun 12 22:10:48 2006 @@ -36,6 +36,11 @@ InputFilenames(cl::Positional, cl::OneOrMore, cl::desc("<input llvm ll/bc files>")); +static cl::opt<unsigned> +TimeoutValue("timeout", cl::init(300), cl::value_desc("seconds"), + cl::desc("Number of seconds program is allowed to run before it " + "is killed (default is 300s), 0 disables timeout")); + // The AnalysesList is automatically populated with registered Passes by the // PassNameParser. // @@ -57,7 +62,7 @@ sys::PrintStackTraceOnErrorSignal(); sys::SetInterruptFunction(BugpointInterruptFunction); - BugDriver D(argv[0],AsChild); + BugDriver D(argv[0],AsChild,TimeoutValue); if (D.addSources(InputFilenames)) return 1; D.addPasses(PassList.begin(), PassList.end()); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits