diff options
author | Chris Lattner <sabre@nondot.org> | 2001-11-09 05:27:10 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2001-11-09 05:27:10 +0000 |
commit | f26e28711bcc10536036e0c10c931a8ca28b778c (patch) | |
tree | 85e15ddeee5c806ac95cd596709438e5ddc9e18b /include/llvm | |
parent | 04aec9fbb45dd049ed6aebebfb2f04c1edbddbae (diff) | |
download | external_llvm-f26e28711bcc10536036e0c10c931a8ca28b778c.zip external_llvm-f26e28711bcc10536036e0c10c931a8ca28b778c.tar.gz external_llvm-f26e28711bcc10536036e0c10c931a8ca28b778c.tar.bz2 |
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')
-rw-r--r-- | include/llvm/Analysis/FindUsedTypes.h | 58 |
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 0000000..3e30f73 --- /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 |