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 | 1a5c540c27ddcc8351aefacea90fada7be9c2be3 (patch) | |
tree | 32d945e0e68e2587ec3660e86a969b7a8e70e3c6 /llvm/tools/bugpoint/OptimizerDriver.cpp | |
parent | fd72bed301ed3336f58144c1377d48d97064a65a (diff) | |
download | bcm5719-llvm-1a5c540c27ddcc8351aefacea90fada7be9c2be3.tar.gz bcm5719-llvm-1a5c540c27ddcc8351aefacea90fada7be9c2be3.zip |
Add new method
llvm-svn: 12394
Diffstat (limited to 'llvm/tools/bugpoint/OptimizerDriver.cpp')
-rw-r--r-- | llvm/tools/bugpoint/OptimizerDriver.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/tools/bugpoint/OptimizerDriver.cpp b/llvm/tools/bugpoint/OptimizerDriver.cpp index d21b5b59521..d741265606a 100644 --- a/llvm/tools/bugpoint/OptimizerDriver.cpp +++ b/llvm/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; +} |