From 989305bb239abd4e2617af935e40afd80a122c22 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 18 Oct 2001 01:32:17 +0000 Subject: [PATCH] Pass's return true if they make a modification, not if they fail git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@872 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Transforms/Pass.h | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/include/llvm/Transforms/Pass.h b/include/llvm/Transforms/Pass.h index f7cc17cca83..2fab0f17ccb 100644 --- a/include/llvm/Transforms/Pass.h +++ b/include/llvm/Transforms/Pass.h @@ -46,14 +46,15 @@ struct Pass { // runAllPasses - Run a bunch of passes on the specified module, efficiently. static bool runAllPasses(Module *M, vector &Passes) { + bool MadeChanges = false; for (unsigned i = 0; i < Passes.size(); ++i) - if (Passes[i]->doPassInitializationVirt(M)) return true; + MadeChanges |= Passes[i]->doPassInitializationVirt(M); // Loop over all of the methods, applying all of the passes to them for (Module::iterator I = M->begin(); I != M->end(); ++I) for (unsigned i = 0; i < Passes.size(); ++i) - if (Passes[i]->doPerMethodWorkVirt(*I)) return true; - return false; + MadeChanges |= Passes[i]->doPerMethodWorkVirt(*I); + return MadeChanges; } // runAllPassesAndFree - Run a bunch of passes on the specified module, @@ -61,12 +62,12 @@ struct Pass { // static bool runAllPassesAndFree(Module *M, vector &Passes) { // First run all of the passes - bool Result = runAllPasses(M, Passes); + bool MadeChanges = runAllPasses(M, Passes); // Free all of the passes. for (unsigned i = 0; i < Passes.size(); ++i) delete Passes[i]; - return Result; + return MadeChanges; } @@ -74,22 +75,21 @@ struct Pass { // within it. Returns false on success. // bool run(Module *M) { - if (doPassInitializationVirt(M)) return true; + bool MadeChanges = doPassInitializationVirt(M); // Loop over methods in the module. doPerMethodWork could add a method to // the Module, so we have to keep checking for end of method list condition. // for (Module::iterator I = M->begin(); I != M->end(); ++I) - if (doPerMethodWorkVirt(*I)) return true; - return false; + MadeChanges = doPerMethodWorkVirt(*I); + return MadeChanges; } // run(Method*) - Run this pass on a module and one specific method. Returns // false on success. // bool run(Method *M) { - if (doPassInitializationVirt(M->getParent())) return true; - return doPerMethodWorkVirt(M); + return doPassInitializationVirt(M->getParent()) | doPerMethodWorkVirt(M); } @@ -151,22 +151,21 @@ struct StatelessPass : public ConcretePass { // within it. Returns false on success. // static bool run(Module *M) { - if (doPassInitialization(M->getParent())) return true; + bool MadeChange = doPassInitialization(M->getParent()); // Loop over methods in the module. doPerMethodWork could add a method to // the Module, so we have to keep checking for end of method list condition. // for (Module::iterator I = M->begin(); I != M->end(); ++I) - if (doPerMethodWork(*I)) return true; - return false; + MadeChange |= doPerMethodWork(*I); + return MadeChange; } // run(Method*) - Run this pass on a module and one specific method. Returns // false on success. // static bool run(Method *M) { - if (doPassInitialization(M->getParent())) return true; - return doPerMethodWork(M); + return doPassInitialization(M->getParent()) | doPerMethodWork(M); } //===--------------------------------------------------------------------===// -- 2.34.1