diff options
author | Chris Lattner <sabre@nondot.org> | 2004-03-14 21:17:03 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-03-14 21:17:03 +0000 |
commit | 3b6441e1050a9a2a55c79f58513191b3195fdaf7 (patch) | |
tree | cc0e85a78ee3f83f2b4b348cfbdf5c6a630f82f0 /tools | |
parent | efdc0b505712d1ca4460def27e51c430f033d58d (diff) | |
download | external_llvm-3b6441e1050a9a2a55c79f58513191b3195fdaf7.zip external_llvm-3b6441e1050a9a2a55c79f58513191b3195fdaf7.tar.gz external_llvm-3b6441e1050a9a2a55c79f58513191b3195fdaf7.tar.bz2 |
Add new method
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12394 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/bugpoint/BugDriver.h | 5 | ||||
-rw-r--r-- | tools/bugpoint/OptimizerDriver.cpp | 23 |
2 files changed, 28 insertions, 0 deletions
diff --git a/tools/bugpoint/BugDriver.h b/tools/bugpoint/BugDriver.h index a4428cf..b1cc3e8 100644 --- a/tools/bugpoint/BugDriver.h +++ b/tools/bugpoint/BugDriver.h @@ -190,6 +190,11 @@ public: /// program or if the loop extractor crashes. Module *ExtractLoop(Module *M); + /// runPassesOn - Carefully run the specified set of pass on the specified + /// module, returning the transformed module on success, or a null pointer on + /// failure. + Module *runPassesOn(Module *M, const std::vector<const PassInfo*> &Passes); + /// runPasses - Run the specified passes on Program, outputting a bytecode /// file and writting the filename into OutputFile if successful. If the /// optimizations fail for some reason (optimizer crashes), return true, diff --git a/tools/bugpoint/OptimizerDriver.cpp b/tools/bugpoint/OptimizerDriver.cpp index d21b5b5..d741265 100644 --- a/tools/bugpoint/OptimizerDriver.cpp +++ b/tools/bugpoint/OptimizerDriver.cpp @@ -161,3 +161,26 @@ bool BugDriver::runPasses(const std::vector<const PassInfo*> &Passes, return !ExitedOK; } + +/// runPassesOn - Carefully run the specified set of pass on the specified +/// module, returning the transformed module on success, or a null pointer on +/// failure. +Module *BugDriver::runPassesOn(Module *M, + const std::vector<const PassInfo*> &Passes) { + Module *OldProgram = swapProgramIn(M); + std::string BytecodeResult; + if (runPasses(Passes, BytecodeResult, false/*delete*/, true/*quiet*/)) + return 0; + + // Restore the current program. + swapProgramIn(OldProgram); + + Module *Ret = ParseInputFile(BytecodeResult); + if (Ret == 0) { + std::cerr << getToolName() << ": Error reading bytecode file '" + << BytecodeResult << "'!\n"; + exit(1); + } + removeFile(BytecodeResult); // No longer need the file on disk + return Ret; +} |