* Standardize how analysis results/passes as printed with the print() virtual
[oota-llvm.git] / include / llvm / Analysis / FindUsedTypes.h
1 //===- llvm/Analysis/FindUsedTypes.h - Find all Types in use -----*- C++ -*--=//
2 //
3 // This pass is used to seek out all of the types in use by the program.
4 //
5 //===----------------------------------------------------------------------===//
6
7 #ifndef LLVM_ANALYSIS_FINDUSEDTYPES_H
8 #define LLVM_ANALYSIS_FINDUSEDTYPES_H
9
10 #include "llvm/Pass.h"
11 #include <set>
12 class SymbolTable;
13 class Type;
14
15 class FindUsedTypes : public Pass {
16   std::set<const Type *> UsedTypes;
17 public:
18   // FindUsedTypes ctor - This pass can optionally include types that are
19   // referenced only in symbol tables, but the default is not to.
20   //
21   static AnalysisID ID;
22
23   // getTypes - After the pass has been run, return the set containing all of
24   // the types used in the module.
25   //
26   const std::set<const Type *> &getTypes() const { return UsedTypes; }
27
28   // Print the types found in the module.  If the optional Module parameter is
29   // passed in, then the types are printed symbolically if possible, using the
30   // symbol table from the module.
31   //
32   void print(std::ostream &o, const Module *M) const;
33
34 private:
35   // IncorporateType - Incorporate one type and all of its subtypes into the
36   // collection of used types.
37   //
38   void IncorporateType(const Type *Ty);
39
40 public:
41   // run - This incorporates all types used by the specified module
42   //
43   bool run(Module &M);
44
45   // getAnalysisUsage - Of course, we provide ourself...
46   //
47   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
48     AU.setPreservesAll();
49     AU.addProvided(ID);
50   }
51 };
52
53 #endif