summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorEaswaran Raman <eraman@google.com>2016-03-18 21:29:30 +0000
committerEaswaran Raman <eraman@google.com>2016-03-18 21:29:30 +0000
commit26628d3015028ad2f4d07acea0acc7168db0e107 (patch)
tree5bd6075a8e4d945026f20584e29b96c1ce2851c2 /llvm
parentc5269c0a4b8ebebc64e58b1bdb921f8f0f1d3164 (diff)
downloadbcm5719-llvm-26628d3015028ad2f4d07acea0acc7168db0e107.tar.gz
bcm5719-llvm-26628d3015028ad2f4d07acea0acc7168db0e107.zip
Interface to get/set profile summary metadata to module
Differential Revision: http://reviews.llvm.org/D17894 llvm-svn: 263835
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/IR/Module.h8
-rw-r--r--llvm/lib/IR/Module.cpp8
-rw-r--r--llvm/unittests/ProfileData/InstrProfTest.cpp14
-rw-r--r--llvm/unittests/ProfileData/SampleProfTest.cpp13
4 files changed, 42 insertions, 1 deletions
diff --git a/llvm/include/llvm/IR/Module.h b/llvm/include/llvm/IR/Module.h
index 33735286454..09cf5318aa4 100644
--- a/llvm/include/llvm/IR/Module.h
+++ b/llvm/include/llvm/IR/Module.h
@@ -637,7 +637,7 @@ public:
void setPICLevel(PICLevel::Level PL);
/// @}
- /// @name Utility functions for querying and setting PGO counts
+ /// @name Utility functions for querying and setting PGO summary
/// @{
/// \brief Set maximum function count in PGO mode
@@ -645,6 +645,12 @@ public:
/// \brief Returns maximum function count in PGO mode
Optional<uint64_t> getMaximumFunctionCount();
+
+ /// \brief Attach profile summary metadata to this module.
+ void setProfileSummary(Metadata *M);
+
+ /// \brief Returns profile summary metadata
+ Metadata *getProfileSummary();
/// @}
};
diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp
index fc3f9d073fc..a0bda0035f7 100644
--- a/llvm/lib/IR/Module.cpp
+++ b/llvm/lib/IR/Module.cpp
@@ -485,3 +485,11 @@ Optional<uint64_t> Module::getMaximumFunctionCount() {
return None;
return cast<ConstantInt>(Val->getValue())->getZExtValue();
}
+
+void Module::setProfileSummary(Metadata *M) {
+ addModuleFlag(ModFlagBehavior::Error, "ProfileSummary", M);
+}
+
+Metadata *Module::getProfileSummary() {
+ return getModuleFlag("ProfileSummary");
+}
diff --git a/llvm/unittests/ProfileData/InstrProfTest.cpp b/llvm/unittests/ProfileData/InstrProfTest.cpp
index 34bb1f295fe..f0710e77fce 100644
--- a/llvm/unittests/ProfileData/InstrProfTest.cpp
+++ b/llvm/unittests/ProfileData/InstrProfTest.cpp
@@ -180,6 +180,8 @@ TEST_F(InstrProfTest, get_profile_summary) {
};
InstrProfSummary &PS = Reader->getSummary();
VerifySummary(PS);
+
+ // Test that conversion of summary to and from Metadata works.
Metadata *MD = PS.getMD(getGlobalContext());
ASSERT_TRUE(MD);
ProfileSummary *PSFromMD = ProfileSummary::getFromMD(MD);
@@ -188,6 +190,18 @@ TEST_F(InstrProfTest, get_profile_summary) {
InstrProfSummary *IPS = cast<InstrProfSummary>(PSFromMD);
VerifySummary(*IPS);
delete IPS;
+
+ // Test that summary can be attached to and read back from module.
+ Module M("my_module", getGlobalContext());
+ M.setProfileSummary(MD);
+ MD = M.getProfileSummary();
+ ASSERT_TRUE(MD);
+ PSFromMD = ProfileSummary::getFromMD(MD);
+ ASSERT_TRUE(PSFromMD);
+ ASSERT_TRUE(isa<InstrProfSummary>(PSFromMD));
+ IPS = cast<InstrProfSummary>(PSFromMD);
+ VerifySummary(*IPS);
+ delete IPS;
}
TEST_P(MaybeSparseInstrProfTest, get_icall_data_read_write) {
diff --git a/llvm/unittests/ProfileData/SampleProfTest.cpp b/llvm/unittests/ProfileData/SampleProfTest.cpp
index 9738e9763ca..b2e05c3392b 100644
--- a/llvm/unittests/ProfileData/SampleProfTest.cpp
+++ b/llvm/unittests/ProfileData/SampleProfTest.cpp
@@ -126,6 +126,7 @@ struct SampleProfTest : ::testing::Test {
SampleProfileSummary &Summary = Reader->getSummary();
VerifySummary(Summary);
+ // Test that conversion of summary to and from Metadata works.
Metadata *MD = Summary.getMD(getGlobalContext());
ASSERT_TRUE(MD);
ProfileSummary *PS = ProfileSummary::getFromMD(MD);
@@ -134,6 +135,18 @@ struct SampleProfTest : ::testing::Test {
SampleProfileSummary *SPS = cast<SampleProfileSummary>(PS);
VerifySummary(*SPS);
delete SPS;
+
+ // Test that summary can be attached to and read back from module.
+ Module M("my_module", getGlobalContext());
+ M.setProfileSummary(MD);
+ MD = M.getProfileSummary();
+ ASSERT_TRUE(MD);
+ PS = ProfileSummary::getFromMD(MD);
+ ASSERT_TRUE(PS);
+ ASSERT_TRUE(isa<SampleProfileSummary>(PS));
+ SPS = cast<SampleProfileSummary>(PS);
+ VerifySummary(*SPS);
+ delete SPS;
}
};
OpenPOWER on IntegriCloud