From b43027d1e0ebc57f6efb8961f3eb4df1b0828ba1 Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Tue, 15 Mar 2016 02:13:19 +0000 Subject: [PATCH] Move global ID computation from Function to GlobalValue (NFC) Since the static getGlobalIdentifier and getGUID methods are now called for global values other than functions, reflect that by moving these methods to the GlobalValue class. llvm-svn: 263524 --- llvm/include/llvm/IR/Function.h | 15 --------------- llvm/include/llvm/IR/GlobalValue.h | 24 +++++++++++++++++++----- llvm/include/llvm/IR/ModuleSummaryIndex.h | 6 +++--- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 13 +++++++------ llvm/lib/IR/Function.cpp | 24 ------------------------ llvm/lib/IR/Globals.cpp | 24 ++++++++++++++++++++++++ llvm/lib/ProfileData/InstrProf.cpp | 2 +- llvm/lib/Transforms/IPO/FunctionImport.cpp | 2 +- 8 files changed, 55 insertions(+), 55 deletions(-) diff --git a/llvm/include/llvm/IR/Function.h b/llvm/include/llvm/IR/Function.h index 2b8c8dbf..70eb29f 100644 --- a/llvm/include/llvm/IR/Function.h +++ b/llvm/include/llvm/IR/Function.h @@ -27,7 +27,6 @@ #include "llvm/IR/GlobalObject.h" #include "llvm/IR/OperandTraits.h" #include "llvm/Support/Compiler.h" -#include "llvm/Support/MD5.h" namespace llvm { @@ -646,20 +645,6 @@ public: /// to \a DISubprogram. DISubprogram *getSubprogram() const; - /// Return the modified name for a function suitable to be - /// used as the key for a global lookup (e.g. profile or ThinLTO). - /// The function's original name is \c FuncName and has linkage of type - /// \c Linkage. The function is defined in module \c FileName. - static std::string getGlobalIdentifier(StringRef FuncName, - GlobalValue::LinkageTypes Linkage, - StringRef FileName); - - /// Return a 64-bit global unique ID constructed from global function name - /// (i.e. returned by getGlobalIdentifier). - static uint64_t getGUID(StringRef GlobalFuncName) { - return MD5Hash(GlobalFuncName); - } - private: void allocHungoffUselist(); template void setHungoffOperand(Constant *C); diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h index 03abf9a..9d578d4 100644 --- a/llvm/include/llvm/IR/GlobalValue.h +++ b/llvm/include/llvm/IR/GlobalValue.h @@ -20,6 +20,7 @@ #include "llvm/IR/Constant.h" #include "llvm/IR/DerivedTypes.h" +#include "llvm/Support/MD5.h" #include namespace llvm { @@ -307,11 +308,24 @@ public: return Name; } -/// @name Materialization -/// Materialization is used to construct functions only as they're needed. This -/// is useful to reduce memory usage in LLVM or parsing work done by the -/// BitcodeReader to load the Module. -/// @{ + /// Return the modified name for a global value suitable to be + /// used as the key for a global lookup (e.g. profile or ThinLTO). + /// The value's original name is \c Name and has linkage of type + /// \c Linkage. The value is defined in module \c FileName. + static std::string getGlobalIdentifier(StringRef Name, + GlobalValue::LinkageTypes Linkage, + StringRef FileName); + + /// Return a 64-bit global unique ID constructed from global value name + /// (i.e. returned by getGlobalIdentifier). + static uint64_t getGUID(StringRef GlobalName) { return MD5Hash(GlobalName); } + + /// @name Materialization + /// Materialization is used to construct functions only as they're needed. + /// This + /// is useful to reduce memory usage in LLVM or parsing work done by the + /// BitcodeReader to load the Module. + /// @{ /// If this function's Module is being lazily streamed in functions from disk /// or some other source, this method can be used to check to see if the diff --git a/llvm/include/llvm/IR/ModuleSummaryIndex.h b/llvm/include/llvm/IR/ModuleSummaryIndex.h index 2ecdd7d..d84eb24 100644 --- a/llvm/include/llvm/IR/ModuleSummaryIndex.h +++ b/llvm/include/llvm/IR/ModuleSummaryIndex.h @@ -277,13 +277,13 @@ public: /// Get the list of global value info objects for a given value name. const GlobalValueInfoList &getGlobalValueInfoList(StringRef ValueName) { - return GlobalValueMap[Function::getGUID(ValueName)]; + return GlobalValueMap[GlobalValue::getGUID(ValueName)]; } /// Get the list of global value info objects for a given value name. const const_globalvalueinfo_iterator findGlobalValueInfoList(StringRef ValueName) const { - return GlobalValueMap.find(Function::getGUID(ValueName)); + return GlobalValueMap.find(GlobalValue::getGUID(ValueName)); } /// Get the list of global value info objects for a given value GUID. @@ -295,7 +295,7 @@ public: /// Add a global value info for a value of the given name. void addGlobalValueInfo(StringRef ValueName, std::unique_ptr Info) { - GlobalValueMap[Function::getGUID(ValueName)].push_back(std::move(Info)); + GlobalValueMap[GlobalValue::getGUID(ValueName)].push_back(std::move(Info)); } /// Add a global value info for a value of the given GUID. diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 69fb4ec..8d749c2 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5506,10 +5506,10 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseValueSymbolTable( auto VLI = ValueIdToLinkageMap.find(ValueID); assert(VLI != ValueIdToLinkageMap.end() && "No linkage found for VST entry?"); - std::string GlobalId = - Function::getGlobalIdentifier(ValueName, VLI->second, SourceFileName); + std::string GlobalId = GlobalValue::getGlobalIdentifier( + ValueName, VLI->second, SourceFileName); TheIndex->addGlobalValueInfo(GlobalId, std::move(GlobalValInfo)); - ValueIdToCallGraphGUIDMap[ValueID] = Function::getGUID(GlobalId); + ValueIdToCallGraphGUIDMap[ValueID] = GlobalValue::getGUID(GlobalId); ValueName.clear(); break; } @@ -5526,10 +5526,11 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseValueSymbolTable( auto VLI = ValueIdToLinkageMap.find(ValueID); assert(VLI != ValueIdToLinkageMap.end() && "No linkage found for VST entry?"); - std::string FunctionGlobalId = - Function::getGlobalIdentifier(ValueName, VLI->second, SourceFileName); + std::string FunctionGlobalId = GlobalValue::getGlobalIdentifier( + ValueName, VLI->second, SourceFileName); TheIndex->addGlobalValueInfo(FunctionGlobalId, std::move(FuncInfo)); - ValueIdToCallGraphGUIDMap[ValueID] = Function::getGUID(FunctionGlobalId); + ValueIdToCallGraphGUIDMap[ValueID] = + GlobalValue::getGUID(FunctionGlobalId); ValueName.clear(); break; diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp index 427efbb..3ecf386 100644 --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -1005,27 +1005,3 @@ Optional Function::getEntryCount() const { } return None; } - -std::string Function::getGlobalIdentifier(StringRef FuncName, - GlobalValue::LinkageTypes Linkage, - StringRef FileName) { - - // Function names may be prefixed with a binary '1' to indicate - // that the backend should not modify the symbols due to any platform - // naming convention. Do not include that '1' in the PGO profile name. - if (FuncName[0] == '\1') - FuncName = FuncName.substr(1); - - std::string NewFuncName = FuncName; - if (llvm::GlobalValue::isLocalLinkage(Linkage)) { - // For local symbols, prepend the main file name to distinguish them. - // Do not include the full path in the file name since there's no guarantee - // that it will stay the same, e.g., if the files are checked out from - // version control in different locations. - if (FileName.empty()) - NewFuncName = NewFuncName.insert(0, ":"); - else - NewFuncName = NewFuncName.insert(0, FileName.str() + ":"); - } - return NewFuncName; -} diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp index 7f4b623..b0d00a4 100644 --- a/llvm/lib/IR/Globals.cpp +++ b/llvm/lib/IR/Globals.cpp @@ -99,6 +99,30 @@ void GlobalObject::copyAttributesFrom(const GlobalValue *Src) { } } +std::string GlobalValue::getGlobalIdentifier(StringRef Name, + GlobalValue::LinkageTypes Linkage, + StringRef FileName) { + + // Value names may be prefixed with a binary '1' to indicate + // that the backend should not modify the symbols due to any platform + // naming convention. Do not include that '1' in the PGO profile name. + if (Name[0] == '\1') + Name = Name.substr(1); + + std::string NewName = Name; + if (llvm::GlobalValue::isLocalLinkage(Linkage)) { + // For local symbols, prepend the main file name to distinguish them. + // Do not include the full path in the file name since there's no guarantee + // that it will stay the same, e.g., if the files are checked out from + // version control in different locations. + if (FileName.empty()) + NewName = NewName.insert(0, ":"); + else + NewName = NewName.insert(0, FileName.str() + ":"); + } + return NewName; +} + const char *GlobalValue::getSection() const { if (auto *GA = dyn_cast(this)) { // In general we cannot compute this at the IR level, but we try. diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp index e7e6753..66ac037 100644 --- a/llvm/lib/ProfileData/InstrProf.cpp +++ b/llvm/lib/ProfileData/InstrProf.cpp @@ -80,7 +80,7 @@ std::string getPGOFuncName(StringRef RawFuncName, GlobalValue::LinkageTypes Linkage, StringRef FileName, uint64_t Version LLVM_ATTRIBUTE_UNUSED) { - return Function::getGlobalIdentifier(RawFuncName, Linkage, FileName); + return GlobalValue::getGlobalIdentifier(RawFuncName, Linkage, FileName); } std::string getPGOFuncName(const Function &F, uint64_t Version) { diff --git a/llvm/lib/Transforms/IPO/FunctionImport.cpp b/llvm/lib/Transforms/IPO/FunctionImport.cpp index 90b36aa..5de0577 100644 --- a/llvm/lib/Transforms/IPO/FunctionImport.cpp +++ b/llvm/lib/Transforms/IPO/FunctionImport.cpp @@ -142,7 +142,7 @@ static void findExternalCalls( ImportedName = Renamed; } // Compute the global identifier used in the summary index. - auto CalledFunctionGlobalID = Function::getGlobalIdentifier( + auto CalledFunctionGlobalID = GlobalValue::getGlobalIdentifier( CalledFunction->getName(), CalledFunction->getLinkage(), CalledFunction->getParent()->getSourceFileName()); -- 2.7.4