-//===-- 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.
+// Unified name mangler for various backends.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_SUPPORT_MANGLER_H
#define LLVM_SUPPORT_MANGLER_H
-namespace llvm {
-
-class Value;
-class Module;
-
-} // End llvm namespace
-
#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
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.