LLVM support for vector quad bit permute and gather instructions through builtins
[oota-llvm.git] / include / llvm / IR / Mangler.h
index 865582ac318b8a9f61880dba9f575d89e97726e5..1e6b5b1dca0062f5b7f8e7e26e1bc9db0369357f 100644 (file)
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_TARGET_MANGLER_H
-#define LLVM_TARGET_MANGLER_H
+#ifndef LLVM_IR_MANGLER_H
+#define LLVM_IR_MANGLER_H
 
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/Support/raw_ostream.h"
 
 namespace llvm {
 
 class DataLayout;
 class GlobalValue;
-class MCContext;
 template <typename T> class SmallVectorImpl;
 class Twine;
 
@@ -39,27 +39,31 @@ private:
   /// they are mangled.  This keeps track of the number we give to anonymous
   /// ones.
   ///
-  DenseMap<const GlobalValue*, unsigned> AnonGlobalIDs;
+  mutable DenseMap<const GlobalValue*, unsigned> AnonGlobalIDs;
 
   /// NextAnonGlobalID - This simple counter is used to unique value names.
   ///
-  unsigned NextAnonGlobalID;
+  mutable unsigned NextAnonGlobalID;
 
 public:
   Mangler(const DataLayout *DL) : DL(DL), NextAnonGlobalID(1) {}
 
-  /// getNameWithPrefix - Fill OutName with the name of the appropriate prefix
-  /// and the specified global variable's name.  If the global variable doesn't
-  /// have a name, this fills in a unique name for the global.
-  void getNameWithPrefix(SmallVectorImpl<char> &OutName, const GlobalValue *GV);
+  /// Print the appropriate prefix and the specified global variable's name.
+  /// If the global variable doesn't have a name, this fills in a unique name
+  /// for the global.
+  void getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV,
+                         bool CannotUsePrivateLabel) const;
+  void getNameWithPrefix(SmallVectorImpl<char> &OutName, const GlobalValue *GV,
+                         bool CannotUsePrivateLabel) const;
 
-  /// getNameWithPrefix - Fill OutName with the name of the appropriate prefix
-  /// and the specified name as the global variable name.  GVName must not be
-  /// empty.
+  /// Print the appropriate prefix and the specified name as the global variable
+  /// name. GVName must not be empty.
+  void getNameWithPrefix(raw_ostream &OS, const Twine &GVName,
+                         ManglerPrefixTy PrefixTy = Mangler::Default) const;
   void getNameWithPrefix(SmallVectorImpl<char> &OutName, const Twine &GVName,
-                         ManglerPrefixTy PrefixTy = Mangler::Default);
+                         ManglerPrefixTy PrefixTy = Mangler::Default) const;
 };
 
 } // End llvm namespace
 
-#endif // LLVM_TARGET_MANGLER_H
+#endif