Line data Source code
1 : //===-- llvm/IR/Mangler.h - Self-contained name mangler ---------*- C++ -*-===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : //
10 : // Unified name mangler for various backends.
11 : //
12 : //===----------------------------------------------------------------------===//
13 :
14 : #ifndef LLVM_IR_MANGLER_H
15 : #define LLVM_IR_MANGLER_H
16 :
17 : #include "llvm/ADT/DenseMap.h"
18 : #include "llvm/IR/GlobalValue.h"
19 :
20 : namespace llvm {
21 :
22 : class DataLayout;
23 : template <typename T> class SmallVectorImpl;
24 : class Triple;
25 : class Twine;
26 : class raw_ostream;
27 :
28 53490 : class Mangler {
29 : /// We need to give global values the same name every time they are mangled.
30 : /// This keeps track of the number we give to anonymous ones.
31 : mutable DenseMap<const GlobalValue*, unsigned> AnonGlobalIDs;
32 :
33 : public:
34 : /// Print the appropriate prefix and the specified global variable's name.
35 : /// If the global variable doesn't have a name, this fills in a unique name
36 : /// for the global.
37 : void getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV,
38 : bool CannotUsePrivateLabel) const;
39 : void getNameWithPrefix(SmallVectorImpl<char> &OutName, const GlobalValue *GV,
40 : bool CannotUsePrivateLabel) const;
41 :
42 : /// Print the appropriate prefix and the specified name as the global variable
43 : /// name. GVName must not be empty.
44 : static void getNameWithPrefix(raw_ostream &OS, const Twine &GVName,
45 : const DataLayout &DL);
46 : static void getNameWithPrefix(SmallVectorImpl<char> &OutName,
47 : const Twine &GVName, const DataLayout &DL);
48 : };
49 :
50 : void emitLinkerFlagsForGlobalCOFF(raw_ostream &OS, const GlobalValue *GV,
51 : const Triple &TT, Mangler &Mangler);
52 :
53 : void emitLinkerFlagsForUsedCOFF(raw_ostream &OS, const GlobalValue *GV,
54 : const Triple &T, Mangler &M);
55 :
56 : } // End llvm namespace
57 :
58 : #endif
|