Make ModRefBehavior a lattice. Use this to clean up AliasAnalysis
[oota-llvm.git] / include / llvm / Assembly / Writer.h
index c9f73eed9100f0360a5d646ef8cbab69412453c1..c5b239079a0d0853026628eced64807d4cc717a8 100644 (file)
@@ -17,7 +17,7 @@
 #ifndef LLVM_ASSEMBLY_WRITER_H
 #define LLVM_ASSEMBLY_WRITER_H
 
-#include <iosfwd>
+#include <string>
 
 namespace llvm {
 
@@ -29,21 +29,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 = 0);
+  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
@@ -58,8 +70,6 @@ void WriteTypeSymbolic(raw_ostream &, const Type *, const Module *M);
 // then even constants get pretty-printed; for example, the type of a null
 // pointer is printed symbolically.
 //
-void WriteAsOperand(std::ostream &, const Value *, bool PrintTy = true,
-                    const Module *Context = 0);
 void WriteAsOperand(raw_ostream &, const Value *, bool PrintTy = true,
                     const Module *Context = 0);