[llvm-commits] CVS: llvm/include/llvm/CallGraphSCCPass.h
Chris Lattner
lattner at cs.uiuc.edu
Sat Aug 30 20:56:03 PDT 2003
Changes in directory llvm/include/llvm:
CallGraphSCCPass.h added (r1.1)
---
Log message:
Initial checkin of the CallGraphSCCPass class
---
Diffs of the changes:
Index: llvm/include/llvm/CallGraphSCCPass.h
diff -c /dev/null llvm/include/llvm/CallGraphSCCPass.h:1.1
*** /dev/null Sat Aug 30 20:55:09 2003
--- llvm/include/llvm/CallGraphSCCPass.h Sat Aug 30 20:54:59 2003
***************
*** 0 ****
--- 1,42 ----
+ //===- CallGraphSCCPass.h - Pass that operates BU on call graph -*- C++ -*-===//
+ //
+ // This file defines the CallGraphSCCPass class, which is used for passes which
+ // are implemented as bottom-up traversals on the call graph. Because there may
+ // be cycles in the call graph, passes of this type operate on the call-graph in
+ // SCC order: that is, they process function bottom-up, except for recursive
+ // functions, which they process all at once.
+ //
+ // These passes are inherently interprocedural, and are required to keep the
+ // call graph up-to-date if they do anything which could modify it.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef LLVM_CALL_GRAPH_SCC_PASS_H
+ #define LLVM_CALL_GRAPH_SCC_PASS_H
+
+ #include "llvm/Pass.h"
+
+ class CallGraphNode;
+
+ struct CallGraphSCCPass : public Pass {
+
+ /// runOnSCC - This method should be implemented by the subclass to perform
+ /// whatever action is necessary for the specified SCC. Note that
+ /// non-recursive (or only self-recursive) functions will have an SCC size of
+ /// 1, where recursive portions of the call graph will have SCC size > 1.
+ ///
+ virtual bool runOnSCC(const std::vector<CallGraphNode *> &SCC) = 0;
+
+ /// run - Run this pass, returning true if a modification was made to the
+ /// module argument. This is implemented in terms of the runOnSCC method.
+ ///
+ virtual bool run(Module &M);
+
+
+ /// getAnalysisUsage - For this class, we declare that we require and preserve
+ /// the call graph. If the derived class implements this method, it should
+ /// always explicitly call the implementation here.
+ virtual void getAnalysisUsage(AnalysisUsage &Info) const;
+ };
+
+ #endif
More information about the llvm-commits
mailing list