From f26e28711bcc10536036e0c10c931a8ca28b778c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 9 Nov 2001 05:27:10 +0000 Subject: [PATCH] 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 --- include/llvm/Analysis/FindUsedTypes.h | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 include/llvm/Analysis/FindUsedTypes.h diff --git a/include/llvm/Analysis/FindUsedTypes.h b/include/llvm/Analysis/FindUsedTypes.h new file mode 100644 index 00000000000..3e30f73e157 --- /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 +class SymbolTable; + +class FindUsedTypes : public Pass { + set 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 &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 -- 2.34.1