summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/IR/GlobalValue.h10
-rw-r--r--llvm/lib/IR/Globals.cpp5
2 files changed, 14 insertions, 1 deletions
diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h
index 9d578d4769d..c6a88e4d167 100644
--- a/llvm/include/llvm/IR/GlobalValue.h
+++ b/llvm/include/llvm/IR/GlobalValue.h
@@ -316,10 +316,18 @@ public:
GlobalValue::LinkageTypes Linkage,
StringRef FileName);
+ /// Return the modified name for this global value suitable to be
+ /// used as the key for a global lookup (e.g. profile or ThinLTO).
+ std::string getGlobalIdentifier();
+
/// Return a 64-bit global unique ID constructed from global value name
- /// (i.e. returned by getGlobalIdentifier).
+ /// (i.e. returned by getGlobalIdentifier()).
static uint64_t getGUID(StringRef GlobalName) { return MD5Hash(GlobalName); }
+ /// Return a 64-bit global unique ID constructed from global value name
+ /// (i.e. returned by getGlobalIdentifier()).
+ uint64_t getGUID() { return getGUID(getGlobalIdentifier()); }
+
/// @name Materialization
/// Materialization is used to construct functions only as they're needed.
/// This
diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp
index b0d00a42fb5..c96cc6733af 100644
--- a/llvm/lib/IR/Globals.cpp
+++ b/llvm/lib/IR/Globals.cpp
@@ -123,6 +123,11 @@ std::string GlobalValue::getGlobalIdentifier(StringRef Name,
return NewName;
}
+std::string GlobalValue::getGlobalIdentifier() {
+ return getGlobalIdentifier(getName(), getLinkage(),
+ getParent()->getSourceFileName());
+}
+
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.
OpenPOWER on IntegriCloud