9#ifndef FORTRAN_OPTIMIZER_SUPPORT_INTERNALNAMES_H 
   10#define FORTRAN_OPTIMIZER_SUPPORT_INTERNALNAMES_H 
   12#include "llvm/ADT/ArrayRef.h" 
   13#include "llvm/ADT/StringRef.h" 
   19static constexpr llvm::StringRef kNameSeparator = 
".";
 
   20static constexpr llvm::StringRef kBoundsSeparator = 
".b.";
 
   21static constexpr llvm::StringRef kComponentSeparator = 
".c.";
 
   22static constexpr llvm::StringRef kComponentInitSeparator = 
".di.";
 
   23static constexpr llvm::StringRef kDataPtrInitSeparator = 
".dp.";
 
   24static constexpr llvm::StringRef kTypeDescriptorSeparator = 
".dt.";
 
   25static constexpr llvm::StringRef kKindParameterSeparator = 
".kp.";
 
   26static constexpr llvm::StringRef kLenKindSeparator = 
".lpk.";
 
   27static constexpr llvm::StringRef kLenParameterSeparator = 
".lv.";
 
   28static constexpr llvm::StringRef kNameStringSeparator = 
".n.";
 
   29static constexpr llvm::StringRef kProcPtrSeparator = 
".p.";
 
   30static constexpr llvm::StringRef kSpecialBindingSeparator = 
".s.";
 
   31static constexpr llvm::StringRef kBindingTableSeparator = 
".v.";
 
   32static constexpr llvm::StringRef boxprocSuffix = 
"UnboxProc";
 
   33static constexpr llvm::StringRef kDerivedTypeInitSuffix = 
"DerivedInit";
 
   46  enum class IntrinsicType { CHARACTER, COMPLEX, INTEGER, LOGICAL, REAL };
 
   65  struct DeconstructedName {
 
   66    DeconstructedName(llvm::StringRef name) : name{name} {}
 
   70        : modules{modules}, procs{procs}, blockId{blockId}, name{name},
 
 
   86                                std::int64_t block, llvm::StringRef name);
 
   91                                     std::int64_t block, llvm::StringRef name,
 
   95  static std::string 
doGenerated(llvm::StringRef name);
 
   99                                 std::int64_t blockId, llvm::StringRef name);
 
  105                            std::int64_t block, IntrinsicType type,
 
  111                                 llvm::StringRef name);
 
  116                            std::int64_t block, llvm::StringRef name,
 
  122                                      std::int64_t block, llvm::StringRef name,
 
  126                                      std::int64_t block, llvm::StringRef name,
 
  133                                std::int64_t block, llvm::StringRef name);
 
  138                                     llvm::StringRef name);
 
  145  static std::pair<NameKind, DeconstructedName>
 
  150      const std::pair<NameKind, DeconstructedName> &deconstructResult);
 
  157                              llvm::StringRef moduleName);
 
  165  getTypeDescriptorAssemblyName(llvm::StringRef mangledTypeName);
 
  176                                          llvm::StringRef componentName);
 
  183  static llvm::StringRef
 
  186  static std::string replaceSpecialSymbols(
const std::string &name);
 
  193  static std::string intAsString(std::int64_t i);
 
  194  static std::string doKind(std::int64_t kind);
 
  196  static std::string toLower(llvm::StringRef name);
 
  198  NameUniquer() = 
delete;
 
  199  NameUniquer(
const NameUniquer &) = 
delete;
 
  200  NameUniquer(NameUniquer &&) = 
delete;
 
  201  NameUniquer &operator=(
const NameUniquer &) = 
delete;
 
 
Definition AbstractConverter.h:34
 
static llvm::StringRef dropTypeConversionMarkers(llvm::StringRef mangledTypeName)
Definition InternalNames.cpp:405
 
static bool needExternalNameMangling(llvm::StringRef uniquedName)
Check whether the name should be re-mangle with external ABI convention.
Definition InternalNames.cpp:337
 
static std::string doCommonBlock(llvm::StringRef name)
Unique a common block name.
Definition InternalNames.cpp:107
 
static std::string doVariable(llvm::ArrayRef< llvm::StringRef > modules, llvm::ArrayRef< llvm::StringRef > procs, std::int64_t block, llvm::StringRef name)
Definition InternalNames.cpp:221
 
static std::pair< NameKind, DeconstructedName > deconstruct(llvm::StringRef uniquedName)
Decompose uniquedName into the parse name, symbol type, and scope info.
Definition InternalNames.cpp:247
 
static std::string doIntrinsicTypeDescriptor(llvm::ArrayRef< llvm::StringRef > modules, llvm::ArrayRef< llvm::StringRef > procs, std::int64_t block, IntrinsicType type, std::int64_t kind)
Unique an intrinsic type descriptor.
Definition InternalNames.cpp:147
 
static std::string getTypeDescriptorBindingTableName(llvm::StringRef mangledTypeName)
Definition InternalNames.cpp:390
 
static llvm::StringRef doProgramEntry()
Definition InternalNames.cpp:240
 
static std::string doConstant(llvm::ArrayRef< llvm::StringRef > modules, llvm::ArrayRef< llvm::StringRef > procs, std::int64_t block, llvm::StringRef name)
Unique a (global) constant name.
Definition InternalNames.cpp:112
 
static bool isExternalFacingUniquedName(const std::pair< NameKind, DeconstructedName > &deconstructResult)
Check if the name is an external facing name.
Definition InternalNames.cpp:328
 
static std::string getComponentInitName(llvm::StringRef mangledTypeName, llvm::StringRef componentName)
Definition InternalNames.cpp:396
 
static std::string doProcedure(llvm::ArrayRef< llvm::StringRef > modules, llvm::ArrayRef< llvm::StringRef > procs, llvm::StringRef name)
Unique a procedure name.
Definition InternalNames.cpp:178
 
static std::string doTypeDescriptor(llvm::ArrayRef< llvm::StringRef > modules, llvm::ArrayRef< llvm::StringRef > procs, std::int64_t block, llvm::StringRef name, llvm::ArrayRef< std::int64_t > kinds)
Unique a (derived) type descriptor name.
Definition InternalNames.cpp:199
 
static std::string doGenerated(llvm::StringRef name)
Unique a compiler generated name without scope context.
Definition InternalNames.cpp:133
 
static bool belongsToModule(llvm::StringRef uniquedName, llvm::StringRef moduleName)
Does uniquedName belong to module moduleName?
Definition InternalNames.cpp:343
 
static std::string doDispatchTable(llvm::ArrayRef< llvm::StringRef > modules, llvm::ArrayRef< llvm::StringRef > procs, std::int64_t block, llvm::StringRef name, llvm::ArrayRef< std::int64_t > kinds)
Unique a dispatch table name.
Definition InternalNames.cpp:122
 
static bool isSpecialSymbol(llvm::StringRef name)
Definition InternalNames.cpp:415
 
static std::string doNamelistGroup(llvm::ArrayRef< llvm::StringRef > modules, llvm::ArrayRef< llvm::StringRef > procs, llvm::StringRef name)
Unique a namelist group name.
Definition InternalNames.cpp:231
 
NameKind
The sort of the unique name.
Definition InternalNames.h:49
 
static std::string getTypeDescriptorName(llvm::StringRef mangledTypeName)
Definition InternalNames.cpp:380
 
static std::string doType(llvm::ArrayRef< llvm::StringRef > modules, llvm::ArrayRef< llvm::StringRef > procs, std::int64_t block, llvm::StringRef name, llvm::ArrayRef< std::int64_t > kinds)
Unique a derived type name.
Definition InternalNames.cpp:187