diff options
Diffstat (limited to 'tools/bugpoint/OptimizerDriver.cpp')
-rw-r--r-- | tools/bugpoint/OptimizerDriver.cpp | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/tools/bugpoint/OptimizerDriver.cpp b/tools/bugpoint/OptimizerDriver.cpp index 8f5ab72..e8c1ab5 100644 --- a/tools/bugpoint/OptimizerDriver.cpp +++ b/tools/bugpoint/OptimizerDriver.cpp @@ -15,10 +15,6 @@ // //===----------------------------------------------------------------------===// -// Note: as a short term hack, the old Unix-specific code and platform- -// independent code co-exist via conditional compilation until it is verified -// that the new code works correctly on Unix. - #include "BugDriver.h" #include "llvm/Module.h" #include "llvm/PassManager.h" @@ -29,7 +25,7 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/SystemUtils.h" #include "llvm/Support/Debug.h" -#include "llvm/Support/raw_ostream.h" +#include "llvm/Support/ToolOutputFile.h" #include "llvm/System/Path.h" #include "llvm/System/Program.h" @@ -58,14 +54,14 @@ bool BugDriver::writeProgramToFile(const std::string &Filename, tool_output_file Out(Filename.c_str(), ErrInfo, raw_fd_ostream::F_Binary); if (ErrInfo.empty()) { - WriteBitcodeToFile(M, Out); - Out.close(); - if (!Out.has_error()) { + WriteBitcodeToFile(M, Out.os()); + Out.os().close(); + if (!Out.os().has_error()) { Out.keep(); return false; } } - Out.clear_error(); + Out.os().clear_error(); return true; } @@ -130,28 +126,36 @@ bool BugDriver::runPasses(Module *Program, << ErrMsg << "\n"; return(1); } - + std::string ErrInfo; tool_output_file InFile(inputFilename.c_str(), ErrInfo, raw_fd_ostream::F_Binary); - - + + if (!ErrInfo.empty()) { errs() << "Error opening bitcode file: " << inputFilename.str() << "\n"; return 1; } - WriteBitcodeToFile(Program, InFile); - InFile.close(); - if (InFile.has_error()) { + WriteBitcodeToFile(Program, InFile.os()); + InFile.os().close(); + if (InFile.os().has_error()) { errs() << "Error writing bitcode file: " << inputFilename.str() << "\n"; - InFile.clear_error(); + InFile.os().clear_error(); return 1; } + + sys::Path tool = PrependMainExecutablePath("opt", getToolName(), + (void*)"opt"); + if (tool.empty()) { + errs() << "Cannot find `opt' in executable directory!\n"; + return 1; + } + + // Ok, everything that could go wrong before running opt is done. InFile.keep(); // setup the child process' arguments SmallVector<const char*, 8> Args; - sys::Path tool = FindExecutable("opt", getToolName(), (void*)"opt"); std::string Opt = tool.str(); if (UseValgrind) { Args.push_back("valgrind"); @@ -192,7 +196,7 @@ bool BugDriver::runPasses(Module *Program, prog = sys::Program::FindProgramByName("valgrind"); else prog = tool; - + // Redirect stdout and stderr to nowhere if SilencePasses is given sys::Path Nowhere; const sys::Path *Redirects[3] = {0, &Nowhere, &Nowhere}; |