4e5e0512561535e2aff86b2fcbea8ab82f123407
[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   FindUsedTypes() {}
24   virtual const char *getPassName() const { return "Find Used Types"; }
25
26   // getTypes - After the pass has been run, return the set containing all of
27   // the types used in the module.
28   //
29   inline const std::set<const Type *> &getTypes() const { return UsedTypes; }
30
31   // Print the types found in the module.  If the optional Module parameter is
32   // passed in, then the types are printed symbolically if possible, using the
33   // symbol table from the module.
34   //
35   void printTypes(std::ostream &o, const Module *M = 0) const;
36
37 private:
38   // IncorporateType - Incorporate one type and all of its subtypes into the
39   // collection of used types.
40   //
41   void IncorporateType(const Type *Ty);
42
43 public:
44   // run - This incorporates all types used by the specified module
45   //
46   bool run(Module &M);
47
48   // getAnalysisUsage - Of course, we provide ourself...
49   //
50   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
51     AU.setPreservesAll();
52     AU.addProvided(ID);
53   }
54 };
55
56 #endif