diff options
author | Teresa Johnson <tejohnson@google.com> | 2016-03-15 02:13:19 +0000 |
---|---|---|
committer | Teresa Johnson <tejohnson@google.com> | 2016-03-15 02:13:19 +0000 |
commit | b43027d1e0ebc57f6efb8961f3eb4df1b0828ba1 (patch) | |
tree | f1b708d3e09b4614bde408def28fa7d0306e3745 /llvm/lib/IR/Globals.cpp | |
parent | ee88b615007d848e3a37bf3b341fc05ea1282b49 (diff) | |
download | bcm5719-llvm-b43027d1e0ebc57f6efb8961f3eb4df1b0828ba1.tar.gz bcm5719-llvm-b43027d1e0ebc57f6efb8961f3eb4df1b0828ba1.zip |
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
Diffstat (limited to 'llvm/lib/IR/Globals.cpp')
-rw-r--r-- | llvm/lib/IR/Globals.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp index 7f4b6234b0b..b0d00a42fb5 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, "<unknown>:"); + else + NewName = NewName.insert(0, FileName.str() + ":"); + } + return NewName; +} + const char *GlobalValue::getSection() const { if (auto *GA = dyn_cast<GlobalAlias>(this)) { // In general we cannot compute this at the IR level, but we try. |