Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===-- llvm/IR/Mangler.h - Self-contained name mangler ---------*- C++ -*-===//
  2. //
  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
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // Unified name mangler for various backends.
  10. //
  11. //===----------------------------------------------------------------------===//
  12.  
  13. #ifndef LLVM_IR_MANGLER_H
  14. #define LLVM_IR_MANGLER_H
  15.  
  16. #include "llvm/ADT/DenseMap.h"
  17.  
  18. namespace llvm {
  19.  
  20. class DataLayout;
  21. class GlobalValue;
  22. template <typename T> class SmallVectorImpl;
  23. class Triple;
  24. class Twine;
  25. class raw_ostream;
  26.  
  27. class Mangler {
  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;
  31.  
  32. public:
  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
  35.   /// for the global.
  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;
  40.  
  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);
  47. };
  48.  
  49. void emitLinkerFlagsForGlobalCOFF(raw_ostream &OS, const GlobalValue *GV,
  50.                                   const Triple &TT, Mangler &Mangler);
  51.  
  52. void emitLinkerFlagsForUsedCOFF(raw_ostream &OS, const GlobalValue *GV,
  53.                                 const Triple &T, Mangler &M);
  54.  
  55. } // End llvm namespace
  56.  
  57. #endif
  58.