summaryrefslogtreecommitdiffstats
path: root/llvm/tools/bugpoint/OptimizerDriver.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-03-14 21:17:03 +0000
committerChris Lattner <sabre@nondot.org>2004-03-14 21:17:03 +0000
commit1a5c540c27ddcc8351aefacea90fada7be9c2be3 (patch)
tree32d945e0e68e2587ec3660e86a969b7a8e70e3c6 /llvm/tools/bugpoint/OptimizerDriver.cpp
parentfd72bed301ed3336f58144c1377d48d97064a65a (diff)
downloadbcm5719-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.cpp23
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;
+}
OpenPOWER on IntegriCloud