1 //===-- llvm/IR/Mangler.h - Self-contained name mangler ---------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // Unified name mangler for various backends.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_IR_MANGLER_H
14 #define LLVM_IR_MANGLER_H
16 #include "llvm/ADT/DenseMap.h"
17 #include "llvm/IR/GlobalValue.h"
22 template <typename T
> class SmallVectorImpl
;
28 /// We need to give global values the same name every time they are mangled.
29 /// This keeps track of the number we give to anonymous ones.
30 mutable DenseMap
<const GlobalValue
*, unsigned> AnonGlobalIDs
;
33 /// Print the appropriate prefix and the specified global variable's name.
34 /// If the global variable doesn't have a name, this fills in a unique name
36 void getNameWithPrefix(raw_ostream
&OS
, const GlobalValue
*GV
,
37 bool CannotUsePrivateLabel
) const;
38 void getNameWithPrefix(SmallVectorImpl
<char> &OutName
, const GlobalValue
*GV
,
39 bool CannotUsePrivateLabel
) const;
41 /// Print the appropriate prefix and the specified name as the global variable
42 /// name. GVName must not be empty.
43 static void getNameWithPrefix(raw_ostream
&OS
, const Twine
&GVName
,
44 const DataLayout
&DL
);
45 static void getNameWithPrefix(SmallVectorImpl
<char> &OutName
,
46 const Twine
&GVName
, const DataLayout
&DL
);
49 void emitLinkerFlagsForGlobalCOFF(raw_ostream
&OS
, const GlobalValue
*GV
,
50 const Triple
&TT
, Mangler
&Mangler
);
52 void emitLinkerFlagsForUsedCOFF(raw_ostream
&OS
, const GlobalValue
*GV
,
53 const Triple
&T
, Mangler
&M
);
55 } // End llvm namespace