-//===-- 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.
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.
static std::string makeNameProper(const std::string &x);
};
+} // End llvm namespace
+
#endif // LLVM_SUPPORT_MANGLER_H