diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2006-09-14 03:49:54 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2006-09-14 03:49:54 +0000 |
commit | 7faef23f02b4566640994f42831377521d7e21f1 (patch) | |
tree | 71cdf000ae0ad78d50ed8a522d1c0884c3984006 | |
parent | e480d2a2d75f862f937a2b4f5ece47899bffa6ff (diff) | |
download | bcm5719-llvm-7faef23f02b4566640994f42831377521d7e21f1.tar.gz bcm5719-llvm-7faef23f02b4566640994f42831377521d7e21f1.zip |
Add --enable-valgrind option to run optimizations through valgrind to
pick up on memory errors.
llvm-svn: 30311
-rw-r--r-- | llvm/tools/bugpoint/OptimizerDriver.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/llvm/tools/bugpoint/OptimizerDriver.cpp b/llvm/tools/bugpoint/OptimizerDriver.cpp index 43d973eb4b0..8087ddb26a7 100644 --- a/llvm/tools/bugpoint/OptimizerDriver.cpp +++ b/llvm/tools/bugpoint/OptimizerDriver.cpp @@ -41,6 +41,8 @@ namespace { // ChildOutput - This option captures the name of the child output file that // is set up by the parent bugpoint process cl::opt<std::string> ChildOutput("child-output", cl::ReallyHidden); + cl::opt<bool> UseValgrind("enable-valgrind", + cl::desc("Run optimizations through valgrind")); } /// writeProgramToFile - This writes the current "Program" to the named bytecode @@ -124,7 +126,7 @@ int BugDriver::runPassesAsChild(const std::vector<const PassInfo*> &Passes) { /// bool BugDriver::runPasses(const std::vector<const PassInfo*> &Passes, std::string &OutputFilename, bool DeleteOutput, - bool Quiet) const{ + bool Quiet) const { // setup the output file name std::cout << std::flush; sys::Path uniqueFilename("bugpoint-output.bc"); @@ -158,7 +160,14 @@ bool BugDriver::runPasses(const std::vector<const PassInfo*> &Passes, alloca(sizeof(const char*) * (Passes.size()+10+2*PluginLoader::getNumPlugins())); int n = 0; - args[n++] = ToolName.c_str(); + if (UseValgrind) { + args[n++] = "valgrind"; + args[n++] = "--error-exitcode=1"; + args[n++] = "-q"; + args[n++] = sys::Program::FindProgramByName(ToolName).c_str(); + } else + args[n++] = ToolName.c_str(); + args[n++] = "-as-child"; args[n++] = "-child-output"; args[n++] = OutputFilename.c_str(); @@ -176,7 +185,11 @@ bool BugDriver::runPasses(const std::vector<const PassInfo*> &Passes, args[n++] = inputFilename.c_str(); args[n++] = 0; - sys::Path prog(sys::Program::FindProgramByName(ToolName)); + sys::Path prog; + if (UseValgrind) + prog = sys::Program::FindProgramByName("valgrind"); + else + prog = sys::Program::FindProgramByName(ToolName); int result = sys::Program::ExecuteAndWait(prog,args,0,0,Timeout,&ErrMsg); // If we are supposed to delete the bytecode file or if the passes crashed, |