diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2018-02-14 21:44:34 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2018-02-14 21:44:34 +0000 |
commit | f6074ed9f60f23ee721f14e9482816af6aceb931 (patch) | |
tree | fc6b96c68f9677aa5a03d9fcfe28884071f3e205 /llvm/tools/bugpoint/BugDriver.cpp | |
parent | d702241c98315bd0271b21108a49b56b5b25cbe5 (diff) | |
download | bcm5719-llvm-f6074ed9f60f23ee721f14e9482816af6aceb931.tar.gz bcm5719-llvm-f6074ed9f60f23ee721f14e9482816af6aceb931.zip |
Change the BugDriver to store the current module with std::unique_ptr.
While there, change a bunch of helper functions to take references to
avoid adding calls to get().
This should conclude the bugpoint yak shaving.
llvm-svn: 325177
Diffstat (limited to 'llvm/tools/bugpoint/BugDriver.cpp')
-rw-r--r-- | llvm/tools/bugpoint/BugDriver.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/llvm/tools/bugpoint/BugDriver.cpp b/llvm/tools/bugpoint/BugDriver.cpp index 37bdb7bc96b..3832e075a69 100644 --- a/llvm/tools/bugpoint/BugDriver.cpp +++ b/llvm/tools/bugpoint/BugDriver.cpp @@ -55,12 +55,11 @@ cl::opt<std::string> OutputFile("output", "(for miscompilation detection)")); } -/// setNewProgram - If we reduce or update the program somehow, call this method -/// to update bugdriver with it. This deletes the old module and sets the -/// specified one as the current program. -void BugDriver::setNewProgram(Module *M) { - delete Program; - Program = M; +/// If we reduce or update the program somehow, call this method to update +/// bugdriver with it. This deletes the old module and sets the specified one +/// as the current program. +void BugDriver::setNewProgram(std::unique_ptr<Module> M) { + Program = std::move(M); } /// getPassesString - Turn a list of passes into a string which indicates the @@ -85,7 +84,6 @@ BugDriver::BugDriver(const char *toolname, bool find_bugs, unsigned timeout, MemoryLimit(memlimit), UseValgrind(use_valgrind) {} BugDriver::~BugDriver() { - delete Program; if (Interpreter != SafeInterpreter) delete Interpreter; delete SafeInterpreter; @@ -121,6 +119,12 @@ std::unique_ptr<Module> llvm::parseInputFile(StringRef Filename, return Result; } +std::unique_ptr<Module> BugDriver::swapProgramIn(std::unique_ptr<Module> M) { + std::unique_ptr<Module> OldProgram = std::move(Program); + Program = std::move(M); + return OldProgram; +} + // This method takes the specified list of LLVM input files, attempts to load // them, either as assembly or bitcode, then link them together. It returns // true on failure (if, for example, an input bitcode file could not be @@ -131,7 +135,7 @@ bool BugDriver::addSources(const std::vector<std::string> &Filenames) { assert(!Filenames.empty() && "Must specify at least on input filename!"); // Load the first input file. - Program = parseInputFile(Filenames[0], Context).release(); + Program = parseInputFile(Filenames[0], Context); if (!Program) return true; @@ -172,7 +176,7 @@ Error BugDriver::run() { // miscompilation. if (!PassesToRun.empty()) { outs() << "Running selected passes on program to test for crash: "; - if (runPasses(Program, PassesToRun)) + if (runPasses(*Program, PassesToRun)) return debugOptimizerCrash(); } @@ -182,7 +186,7 @@ Error BugDriver::run() { // Test to see if we have a code generator crash. outs() << "Running the code generator to test for a crash: "; - if (Error E = compileProgram(Program)) { + if (Error E = compileProgram(*Program)) { outs() << toString(std::move(E)); return debugCodeGeneratorCrash(); } @@ -195,7 +199,7 @@ Error BugDriver::run() { bool CreatedOutput = false; if (ReferenceOutputFile.empty()) { outs() << "Generating reference output from raw program: "; - if (Error E = createReferenceFile(Program)) { + if (Error E = createReferenceFile(*Program)) { errs() << toString(std::move(E)); return debugCodeGeneratorCrash(); } @@ -211,7 +215,7 @@ Error BugDriver::run() { // matches, then we assume there is a miscompilation bug and try to // diagnose it. outs() << "*** Checking the code generator...\n"; - Expected<bool> Diff = diffProgram(Program, "", "", false); + Expected<bool> Diff = diffProgram(*Program, "", "", false); if (Error E = Diff.takeError()) { errs() << toString(std::move(E)); return debugCodeGeneratorCrash(); |