summaryrefslogtreecommitdiff
path: root/include/llvm/Analysis/FindUsedTypes.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2001-11-09 05:27:10 +0000
committerChris Lattner <sabre@nondot.org>2001-11-09 05:27:10 +0000
commitf26e28711bcc10536036e0c10c931a8ca28b778c (patch)
tree85e15ddeee5c806ac95cd596709438e5ddc9e18b /include/llvm/Analysis/FindUsedTypes.h
parent04aec9fbb45dd049ed6aebebfb2f04c1edbddbae (diff)
downloadllvm-f26e28711bcc10536036e0c10c931a8ca28b778c.tar.gz
llvm-f26e28711bcc10536036e0c10c931a8ca28b778c.tar.bz2
llvm-f26e28711bcc10536036e0c10c931a8ca28b778c.tar.xz
New pass to figure out what types are in use by a program
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1231 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Analysis/FindUsedTypes.h')
-rw-r--r--include/llvm/Analysis/FindUsedTypes.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/include/llvm/Analysis/FindUsedTypes.h b/include/llvm/Analysis/FindUsedTypes.h
new file mode 100644
index 0000000000..3e30f73e15
--- /dev/null
+++ b/include/llvm/Analysis/FindUsedTypes.h
@@ -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