This increases the maximum for MVT::LAST_VALUETYPE
[oota-llvm.git] / include / llvm / Assembly / Writer.h
index c9f8edb352431c538dda8c85e9afa96f7a9a9b43..5e5fe1560585da65c631baf6e45ebfcc4c1dcdcb 100644 (file)
@@ -18,6 +18,7 @@
 #define LLVM_ASSEMBLY_WRITER_H
 
 #include <iosfwd>
+#include <string>
 
 namespace llvm {
 
@@ -25,12 +26,43 @@ class Type;
 class Module;
 class Value;
 class raw_ostream;
+template <typename T> class SmallVectorImpl;
+  
+/// TypePrinting - Type printing machinery.
+class TypePrinting {
+  void *TypeNames;  // A map to remember type names.
+  TypePrinting(const TypePrinting &);   // DO NOT IMPLEMENT
+  void operator=(const TypePrinting&);  // DO NOT IMPLEMENT
+public:
+  TypePrinting();
+  ~TypePrinting();
+  
+  void clear();
+  
+  void print(const Type *Ty, raw_ostream &OS, bool IgnoreTopLevelName = false);
+  
+  void printAtLeastOneLevel(const Type *Ty, raw_ostream &OS) {
+    print(Ty, OS, true);
+  }
+  
+  /// hasTypeName - Return true if the type has a name in TypeNames, false
+  /// otherwise.
+  bool hasTypeName(const Type *Ty) const;
+  
+  /// addTypeName - Add a name for the specified type if it doesn't already have
+  /// one.  This name will be printed instead of the structural version of the
+  /// type in order to make the output more concise.
+  void addTypeName(const Type *Ty, const std::string &N);
+  
+private:
+  void CalcTypeName(const Type *Ty, SmallVectorImpl<const Type *> &TypeStack,
+                    raw_ostream &OS, bool IgnoreTopLevelName = false);
+};
 
 // WriteTypeSymbolic - This attempts to write the specified type as a symbolic
-// type, iff there is an entry in the Module's symbol table for the specified
-// type or one of its component types.  This is slower than a simple x << Type;
+// type, if there is an entry in the Module's symbol table for the specified
+// type or one of its component types.
 //
-void WriteTypeSymbolic(std::ostream &, const Type *, const Module *M);
 void WriteTypeSymbolic(raw_ostream &, const Type *, const Module *M);
 
 // WriteAsOperand - Write the name of the specified value out to the specified