Tighten up the AnalysisUsage of lots of passes, primarily to correctly indicate wheth...
authorChris Lattner <sabre@nondot.org>
Sun, 28 Apr 2002 21:27:06 +0000 (21:27 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 28 Apr 2002 21:27:06 +0000 (21:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2386 91177308-0d34-0410-b5e6-96231b3b80d8

15 files changed:
lib/Target/SparcV9/SparcV9AsmPrinter.cpp
lib/Transforms/HoistPHIConstants.cpp
lib/Transforms/IPO/ConstantMerge.cpp
lib/Transforms/Instrumentation/TraceValues.cpp
lib/Transforms/LevelRaise.cpp
lib/Transforms/Scalar/ConstantProp.cpp
lib/Transforms/Scalar/DecomposeMultiDimRefs.cpp
lib/Transforms/Scalar/GCSE.cpp
lib/Transforms/Scalar/IndVarSimplify.cpp
lib/Transforms/Scalar/InstructionCombining.cpp
lib/Transforms/Scalar/SCCP.cpp
lib/Transforms/Scalar/SymbolStripping.cpp
lib/Transforms/Utils/PromoteMemoryToRegister.cpp
lib/VMCore/Verifier.cpp
tools/analyze/analyze.cpp

index fa2aeaa3b1176b0b7850dad507ae7e934d5712aa..f4ca22f9da90c9e186e31880080edc0fec3b2334 100644 (file)
@@ -209,6 +209,10 @@ struct SparcFunctionAsmPrinter : public FunctionPass, public AsmPrinter {
     return false;
   }
 
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.setPreservesAll();
+  }
+
   void emitFunction(const Function *F);
 private :
   void emitBasicBlock(const BasicBlock *BB);
@@ -427,6 +431,11 @@ public:
     return false;
   }
 
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.setPreservesAll();
+  }
+
+private:
   void emitGlobalsAndConstants(const Module *M);
 
   void printGlobalVariable(const GlobalVariable *GV);
@@ -436,7 +445,6 @@ public:
 
   static void FoldConstants(const Module *M,
                             std::hash_set<const Constant*> &moduleConstants);
-
 };
 
 
index f6e6109ea5faa5f9f8d4450f76071a995ee7e25a..e969ac24b3ac5ec8cbb2470b1a3c1648426441e1 100644 (file)
@@ -76,6 +76,10 @@ static bool doHoistPHIConstants(Function *M) {
 namespace {
   struct HoistPHIConstants : public FunctionPass {
     virtual bool runOnFunction(Function *F) { return doHoistPHIConstants(F); }
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.preservesCFG();
+    }
   };
 }
 
index ee28b13a2cd001569d13918ea8fc9b29e9db9037..a635b8d21bed9982cbbc69fca5fe179a743b62c8 100644 (file)
@@ -82,6 +82,10 @@ namespace {
       Constants.clear();
       return false;
     }
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.setPreservesAll();
+    }
   };
   
   struct DynamicConstantMerge : public ConstantMerge {
index 7b263c76ad8b76ddb69e30d131d952d5e494b432..384516283ca4525eab3297f91ca66eab1394b175 100644 (file)
@@ -49,6 +49,10 @@ namespace {
     bool runOnFunction(Function *F) {
       return doit(F, TraceBasicBlockExits, TraceFunctionExits, PrintfFunc);
     }
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.preservesCFG();
+    }
   };
 } // end anonymous namespace
 
index 77d06a0946cde6f38651603d1442cde4782cf070..07981d0aa361759cfff328c8b1efe471ebae2571 100644 (file)
@@ -472,6 +472,10 @@ static bool doRPR(Function *F) {
 namespace {
   struct RaisePointerReferences : public FunctionPass {
     virtual bool runOnFunction(Function *F) { return doRPR(F); }
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.preservesCFG();
+    }
   };
 }
 
index 0f1d0aea323afc24ee71503ff95175f5a67404de..a8dbe3ff9551ae3eae9ae8b9fe62732da63e3881 100644 (file)
@@ -219,6 +219,12 @@ namespace {
       
       return Modified;
     }
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      // FIXME: This pass does not preserve the CFG because it folds terminator
+      // instructions!
+      //AU.preservesCFG();
+    }
   };
 }
 
index 78dcfd50dd64dfcd82ebb4e743459f67966c8d3e..f901a29015d507477203f28100d5632d49e3d88e 100644 (file)
@@ -175,6 +175,10 @@ namespace {
     virtual bool runOnFunction(Function *F) {
       return doDecomposeMultiDimRefs(F);
     }
+
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.preservesCFG();
+    }
   };
 }
 
index 8bdbad522b9079a788a127d147da2b798c72d8b4..b864760e688f83acedb465b5ee4bc554aca118b7 100644 (file)
@@ -51,7 +51,7 @@ namespace {
 
     // This transformation requires dominator and immediate dominator info
     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-      //preservesCFG(AU);
+      AU.preservesCFG();
       AU.addRequired(DominatorSet::ID);
       AU.addRequired(ImmediateDominators::ID); 
     }
index a115e050d17f2aa77251f21f117ef36cadaf00c4..003419bb84fb40b06a2b368dceea00be232cf1a2 100644 (file)
@@ -203,6 +203,7 @@ namespace {
     
     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
       AU.addRequired(LoopInfo::ID);
+      AU.preservesCFG();
     }
   };
 }
index dea024442dedd268d0c76fd4c53a7875b7d08c09..626c1301141b872fe7b129cf541cd78502f371f4 100644 (file)
@@ -42,10 +42,12 @@ namespace {
     }
 
   public:
-
-
     virtual bool runOnFunction(Function *F);
 
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.preservesCFG();
+    }
+
     // Visitation implementation - Implement instruction combining for different
     // instruction types.  The semantics are as follows:
     // Return Value:
index c68004d24550e0c3abc70e27572791bce8fec175..12d518b3c8cf86140c893cd56ae4c3b1d6d26112 100644 (file)
@@ -470,6 +470,10 @@ namespace {
       SCCP S(F);
       return S.doSCCP();
     }
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      // FIXME: SCCP does not preserve the CFG because it folds terminators!
+      //AU.preservesCFG();
+    }
   };
 }
 
index 36b465ebb658dd8bd1218674105b35354322aebe..f99684faaf671b549304a2876f58b5a2e8e10407 100644 (file)
@@ -64,6 +64,9 @@ namespace {
     virtual bool runOnFunction(Function *F) {
       return doSymbolStripping(F);
     }
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.setPreservesAll();
+    }
   };
 
   struct FullSymbolStripping : public SymbolStripping {
index ab94550077731653a307261e477c126a905ecffe..e0d2c2475fcc5b322f73376a4ab9b42db56abde3 100644 (file)
@@ -53,6 +53,7 @@ namespace {
     //
     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
       AU.addRequired(DominanceFrontier::ID);
+      AU.preservesCFG();
     }
 
   private:
index de439b7792b71621f2460db9f0b8578487804bea..8621ea78813b8e92b106336c5cbb8c7b1f36e22d 100644 (file)
@@ -81,6 +81,10 @@ namespace {  // Anonymous namespace for class
       return false;
     }
 
+    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+      AU.setPreservesAll();
+    }
+
     // Verification methods...
     void verifySymbolTable(SymbolTable *ST);
     void visitFunction(Function *F);
index 85d6ae4d64b76ed39d93618d336778aa82ec837e..8a1d86caf177c1466c77f88e487a568f987fb5e2 100644 (file)
@@ -110,6 +110,7 @@ public:
 
   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
     AU.addRequired(ID);
+    AU.setPreservesAll();
   }
 };
 
@@ -137,6 +138,10 @@ struct InstForest : public FunctionPass {
   void doit(Function *F) {
     std::cout << analysis::InstForest<char>(F);
   }
+
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.setPreservesAll();
+  }
 };
 
 struct IndVars : public FunctionPass {
@@ -152,6 +157,7 @@ struct IndVars : public FunctionPass {
 
   void getAnalysisUsage(AnalysisUsage &AU) const {
     AU.addRequired(LoopInfo::ID);
+    AU.setPreservesAll();
   }
 };
 
@@ -183,6 +189,9 @@ struct Exprs : public FunctionPass {
       std::cout << "\n\n";
     }
   }
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.setPreservesAll();
+  }
 };