New pass to figure out what types are in use by a program
authorChris Lattner <sabre@nondot.org>
Fri, 9 Nov 2001 05:27:10 +0000 (05:27 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 9 Nov 2001 05:27:10 +0000 (05:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1231 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/FindUsedTypes.h [new file with mode: 0644]

diff --git a/include/llvm/Analysis/FindUsedTypes.h b/include/llvm/Analysis/FindUsedTypes.h
new file mode 100644 (file)
index 0000000..3e30f73
--- /dev/null
@@ -0,0 +1,58 @@
+//===- llvm/Analysis/FindUsedTypes.h - Find all Types in use -----*- C++ -*--=//
+//
+// This pass is used to seek out all of the types in use by the program.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ANALYSIS_FINDUSEDTYPES_H
+#define LLVM_ANALYSIS_FINDUSEDTYPES_H
+
+#include "llvm/Pass.h"
+#include <set>
+class SymbolTable;
+
+class FindUsedTypes : public Pass {
+  set<const Type *> UsedTypes;
+
+  bool IncludeSymbolTables;
+public:
+
+  // FindUsedTypes ctor - This pass can optionally include types that are
+  // referenced only in symbol tables, but the default is not to.
+  //
+  FindUsedTypes(bool IST = false) : IncludeSymbolTables(IST) {}
+
+  // getTypes - After the pass has been run, return the set containing all of
+  // the types used in the module.
+  //
+  inline const set<const Type *> &getTypes() const { return UsedTypes; }
+
+  // Print the types found in the module.  If the optional Module parameter is
+  // passed in, then the types are printed symbolically if possible, using the
+  // symbol table from the module.
+  //
+  void printTypes(ostream &o, const Module *M = 0) const;
+
+private:
+  // IncorporateType - Incorporate one type and all of its subtypes into the
+  // collection of used types.
+  //
+  void IncorporateType(const Type *Ty);
+
+  // IncorporateSymbolTable - Add all types referenced by the specified symtab
+  // into the collection of used types.
+  //
+  void IncorporateSymbolTable(const SymbolTable *ST);
+
+protected:
+  // doPassInitialization - This loops over global constants defined in the
+  // module, converting them to their new type.
+  //
+  bool doPassInitialization(Module *M);
+
+  // doPerMethodWork - This incorporates all types used by the specified method
+  //
+  bool doPerMethodWork(Method *M);
+};
+
+#endif