Make functions that preserve the CFG not invalidate analyses that only depend
authorChris Lattner <sabre@nondot.org>
Mon, 6 May 2002 19:31:52 +0000 (19:31 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 6 May 2002 19:31:52 +0000 (19:31 +0000)
on the CFG of a function

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2506 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Pass.cpp

index 48e608e90a41b77b7dc25238d34fa17d682548d0..b4f837d0d8ab741e8943752fd1371e44d7ecfb36 100644 (file)
 #include <sys/time.h>
 #include <stdio.h>
 
+//===----------------------------------------------------------------------===//
+//   AnalysisID Class Implementation
+//
+
+static std::vector<AnalysisID> CFGOnlyAnalyses;
+
 // Source of unique analysis ID #'s.
 unsigned AnalysisID::NextID = 0;
 
+AnalysisID::AnalysisID(const AnalysisID &AID, bool DependsOnlyOnCFG) {
+  ID = AID.ID;                    // Implement the copy ctor part...
+  Constructor = AID.Constructor;
+  
+  // If this analysis only depends on the CFG of the function, add it to the CFG
+  // only list...
+  if (DependsOnlyOnCFG)
+    CFGOnlyAnalyses.push_back(AID);
+}
+
+//===----------------------------------------------------------------------===//
+//   AnalysisResolver Class Implementation
+//
+
 void AnalysisResolver::setAnalysisResolver(Pass *P, AnalysisResolver *AR) {
   assert(P->Resolver == 0 && "Pass already in a PassManager!");
   P->Resolver = AR;
 }
 
+//===----------------------------------------------------------------------===//
+//   AnalysisUsage Class Implementation
+//
 
 // preservesCFG - This function should be called to by the pass, iff they do
 // not:
@@ -37,7 +60,11 @@ void AnalysisResolver::setAnalysisResolver(Pass *P, AnalysisResolver *AR) {
 // that only depend on the CFG are preserved by this pass.
 //
 void AnalysisUsage::preservesCFG() {
-  // FIXME: implement preservesCFG
+  // Since this transformation doesn't modify the CFG, it preserves all analyses
+  // that only depend on the CFG (like dominators, loop info, etc...)
+  //
+  Preserved.insert(Preserved.end(),
+                   CFGOnlyAnalyses.begin(), CFGOnlyAnalyses.end());
 }