Add support for shifts
[oota-llvm.git] / include / llvm / Support / Mangler.h
index 15ec2f49fc48355c4d5befecb7017a0cff573bec..14d68b59d3292c6e09d479afbb4b6909b06049c4 100644 (file)
@@ -1,18 +1,29 @@
-//===-- Mangler.h - Self-contained c/asm llvm name mangler -*- C++ -*- ----===//
+//===-- llvm/Support/Mangler.h - Self-contained name mangler ----*- C++ -*-===//
+// 
+//                     The LLVM Compiler Infrastructure
 //
-// Unified name mangler for CWriter and assembly backends.
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
+//
+// Unified name mangler for various backends.
 //
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_SUPPORT_MANGLER_H
 #define LLVM_SUPPORT_MANGLER_H
 
-class Value;
-class Module;
 #include <map>
 #include <set>
 #include <string>
 
+namespace llvm {
+class Value;
+class Type;
+class Module;
+class GlobalValue;
+
 class Mangler {
   /// This keeps track of which global values have had their names
   /// mangled in the current module.
@@ -20,17 +31,26 @@ class Mangler {
   std::set<const Value *> MangledGlobals;
 
   Module &M;
-  bool AddUnderscorePrefix;
+  const char *Prefix;
+
+  unsigned TypeCounter;
+  std::map<const Type*, unsigned> TypeMap;
 
   typedef std::map<const Value *, std::string> ValueMap;
   ValueMap Memo;
 
   unsigned Count;
+
+  void InsertName(GlobalValue *GV, std::map<std::string, GlobalValue*> &Names);
 public:
 
-  // Mangler ctor - if AddUnderscorePrefix is true, then all public global
-  // symbols will be prefixed with an underscore.
-  Mangler(Module &M, bool AddUnderscorePrefix = false);
+  // Mangler ctor - if a prefix is specified, it will be prepended onto all
+  // symbols.
+  Mangler(Module &M, const char *Prefix = "");
+
+  /// getTypeID - Return a unique ID for the specified LLVM type.
+  ///
+  unsigned getTypeID(const Type *Ty);
 
   /// getValueName - Returns the mangled name of V, an LLVM Value,
   /// in the current module.
@@ -47,4 +67,6 @@ public:
   static std::string makeNameProper(const std::string &x);
 };
 
+} // End llvm namespace
+
 #endif // LLVM_SUPPORT_MANGLER_H