diff options
| author | Easwaran Raman <eraman@google.com> | 2016-03-18 21:29:30 +0000 |
|---|---|---|
| committer | Easwaran Raman <eraman@google.com> | 2016-03-18 21:29:30 +0000 |
| commit | 26628d3015028ad2f4d07acea0acc7168db0e107 (patch) | |
| tree | 5bd6075a8e4d945026f20584e29b96c1ce2851c2 /llvm | |
| parent | c5269c0a4b8ebebc64e58b1bdb921f8f0f1d3164 (diff) | |
| download | bcm5719-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.h | 8 | ||||
| -rw-r--r-- | llvm/lib/IR/Module.cpp | 8 | ||||
| -rw-r--r-- | llvm/unittests/ProfileData/InstrProfTest.cpp | 14 | ||||
| -rw-r--r-- | llvm/unittests/ProfileData/SampleProfTest.cpp | 13 |
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; } }; |

