- //===-- llvm/IR/Mangler.h - Self-contained name mangler ---------*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // Unified name mangler for various backends. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_IR_MANGLER_H 
- #define LLVM_IR_MANGLER_H 
-   
- #include "llvm/ADT/DenseMap.h" 
-   
- namespace llvm { 
-   
- class DataLayout; 
- class GlobalValue; 
- template <typename T> class SmallVectorImpl; 
- class Triple; 
- class Twine; 
- class raw_ostream; 
-   
- class Mangler { 
-   /// We need to give global values the same name every time they are mangled. 
-   /// This keeps track of the number we give to anonymous ones. 
-   mutable DenseMap<const GlobalValue*, unsigned> AnonGlobalIDs; 
-   
- public: 
-   /// Print the appropriate prefix and the specified global variable's name. 
-   /// If the global variable doesn't have a name, this fills in a unique name 
-   /// for the global. 
-   void getNameWithPrefix(raw_ostream &OS, const GlobalValue *GV, 
-                          bool CannotUsePrivateLabel) const; 
-   void getNameWithPrefix(SmallVectorImpl<char> &OutName, const GlobalValue *GV, 
-                          bool CannotUsePrivateLabel) const; 
-   
-   /// Print the appropriate prefix and the specified name as the global variable 
-   /// name. GVName must not be empty. 
-   static void getNameWithPrefix(raw_ostream &OS, const Twine &GVName, 
-                                 const DataLayout &DL); 
-   static void getNameWithPrefix(SmallVectorImpl<char> &OutName, 
-                                 const Twine &GVName, const DataLayout &DL); 
- }; 
-   
- void emitLinkerFlagsForGlobalCOFF(raw_ostream &OS, const GlobalValue *GV, 
-                                   const Triple &TT, Mangler &Mangler); 
-   
- void emitLinkerFlagsForUsedCOFF(raw_ostream &OS, const GlobalValue *GV, 
-                                 const Triple &T, Mangler &M); 
-   
- } // End llvm namespace 
-   
- #endif 
-