This increases the maximum for MVT::LAST_VALUETYPE
[oota-llvm.git] / include / llvm / Assembly / Writer.h
index 343539acef206a85a0290b4d08f6eccc1f00b143..5e5fe1560585da65c631baf6e45ebfcc4c1dcdcb 100644 (file)
@@ -18,6 +18,7 @@
 #define LLVM_ASSEMBLY_WRITER_H
 
 #include <iosfwd>
+#include <string>
 
 namespace llvm {
 
@@ -29,19 +30,33 @@ template <typename T> class SmallVectorImpl;
   
 /// TypePrinting - Type printing machinery.
 class TypePrinting {
-  void *TypeNames;
+  void *TypeNames;  // A map to remember type names.
+  TypePrinting(const TypePrinting &);   // DO NOT IMPLEMENT
+  void operator=(const TypePrinting&);  // DO NOT IMPLEMENT
 public:
-  TypePrinting(const Module *M);
+  TypePrinting();
   ~TypePrinting();
   
   void clear();
   
-  void print(const Type *Ty, raw_ostream &OS);
-  void printAtLeastOneLevel(const Type *Ty, raw_ostream &OS);
+  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);
+                    raw_ostream &OS, bool IgnoreTopLevelName = false);
 };
 
 // WriteTypeSymbolic - This attempts to write the specified type as a symbolic