[llvm] r266619 - Revert "Replace the use of MaxFunctionCount module flag"

Eric Liu via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 18 08:31:13 PDT 2016


Author: ioeric
Date: Mon Apr 18 10:31:11 2016
New Revision: 266619

URL: http://llvm.org/viewvc/llvm-project?rev=266619&view=rev
Log:
Revert "Replace the use of MaxFunctionCount module flag"

This reverts commit r266477.

This commit introduces cyclic dependency. This commit has "Analysis" depend on "ProfileData",
while "ProfileData" depends on "Object", which depends on "BitCode", which
depends on "Analysis".

Removed:
    llvm/trunk/unittests/ProfileData/ProfileSummaryTest.cpp
Modified:
    llvm/trunk/include/llvm/ProfileData/ProfileCommon.h
    llvm/trunk/lib/Analysis/InlineCost.cpp
    llvm/trunk/lib/ProfileData/ProfileSummary.cpp
    llvm/trunk/test/Transforms/Inline/inline-cold-callee.ll
    llvm/trunk/test/Transforms/Inline/inline-hot-callee.ll
    llvm/trunk/unittests/ProfileData/CMakeLists.txt

Modified: llvm/trunk/include/llvm/ProfileData/ProfileCommon.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/ProfileCommon.h?rev=266619&r1=266618&r2=266619&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ProfileData/ProfileCommon.h (original)
+++ llvm/trunk/include/llvm/ProfileData/ProfileCommon.h Mon Apr 18 10:31:11 2016
@@ -21,8 +21,6 @@
 #include <vector>
 
 #include "llvm/Support/Casting.h"
-#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Support/Mutex.h"
 
 namespace llvm {
 class Function;
@@ -37,7 +35,6 @@ class LLVMContext;
 class Metadata;
 class MDTuple;
 class MDNode;
-class Module;
 
 inline const char *getHotSectionPrefix() { return ".hot"; }
 inline const char *getUnlikelySectionPrefix() { return ".unlikely"; }
@@ -70,14 +67,6 @@ private:
   // appears in the profile. The map is kept sorted in the descending order of
   // counts.
   std::map<uint64_t, uint32_t, std::greater<uint64_t>> CountFrequencies;
-  // Compute profile summary for a module.
-  static ProfileSummary *computeProfileSummary(Module *M);
-  // Cache of last seen module and its profile summary.
-  static ManagedStatic<std::pair<Module *, std::unique_ptr<ProfileSummary>>>
-      CachedSummary;
-  // Mutex to access summary cache
-  static ManagedStatic<sys::SmartMutex<true>> CacheMutex;
-
 protected:
   SummaryEntryVector DetailedSummary;
   std::vector<uint32_t> DetailedSummaryCutoffs;
@@ -96,12 +85,14 @@ protected:
       : PSK(K), DetailedSummary(DetailedSummary), TotalCount(TotalCount),
         MaxCount(MaxCount), MaxFunctionCount(MaxFunctionCount),
         NumCounts(NumCounts), NumFunctions(NumFunctions) {}
+  ~ProfileSummary() = default;
   inline void addCount(uint64_t Count);
   /// \brief Return metadata specific to the profile format.
   /// Derived classes implement this method to return a vector of Metadata.
   virtual std::vector<Metadata *> getFormatSpecificMD(LLVMContext &Context) = 0;
   /// \brief Return detailed summary as metadata.
   Metadata *getDetailedSummaryMD(LLVMContext &Context);
+
 public:
   static const int Scale = 1000000;
   Kind getKind() const { return PSK; }
@@ -120,10 +111,6 @@ public:
   static ProfileSummary *getFromMD(Metadata *MD);
   uint32_t getNumFunctions() { return NumFunctions; }
   uint64_t getMaxFunctionCount() { return MaxFunctionCount; }
-  /// \brief Get profile summary associated with module \p M
-  static inline ProfileSummary *getProfileSummary(Module *M);
-  virtual ~ProfileSummary() = default;
-  virtual bool operator==(ProfileSummary &Other);
 };
 
 class InstrProfSummary final : public ProfileSummary {
@@ -153,7 +140,6 @@ public:
   uint64_t getTotalCount() { return TotalCount; }
   uint64_t getMaxBlockCount() { return MaxCount; }
   uint64_t getMaxInternalBlockCount() { return MaxInternalBlockCount; }
-  bool operator==(ProfileSummary &Other) override;
 };
 
 class SampleProfileSummary final : public ProfileSummary {
@@ -194,24 +180,5 @@ SummaryEntryVector &ProfileSummary::getD
   return DetailedSummary;
 }
 
-ProfileSummary *ProfileSummary::getProfileSummary(Module *M) {
-  if (!M)
-    return nullptr;
-  sys::SmartScopedLock<true> Lock(*CacheMutex);
-  // Computing profile summary for a module involves parsing a fairly large
-  // metadata and could be expensive. We use a simple cache of the last seen
-  // module and its profile summary.
-  if (CachedSummary->first != M) {
-    auto *Summary = computeProfileSummary(M);
-    // Do not cache if the summary is empty. This is because a later pass
-    // (sample profile loader, for example) could attach the summary metadata on
-    // the module.
-    if (!Summary)
-      return nullptr;
-    CachedSummary->first = M;
-    CachedSummary->second.reset(Summary);
-  }
-  return CachedSummary->second.get();
-}
 } // end namespace llvm
 #endif

Modified: llvm/trunk/lib/Analysis/InlineCost.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/InlineCost.cpp?rev=266619&r1=266618&r2=266619&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/InlineCost.cpp (original)
+++ llvm/trunk/lib/Analysis/InlineCost.cpp Mon Apr 18 10:31:11 2016
@@ -30,7 +30,6 @@
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/IntrinsicInst.h"
 #include "llvm/IR/Operator.h"
-#include "llvm/ProfileData/ProfileCommon.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
 
@@ -627,11 +626,10 @@ void CallAnalyzer::updateThreshold(CallS
   // a well-tuned heuristic based on *callsite* hotness and not callee hotness.
   uint64_t FunctionCount = 0, MaxFunctionCount = 0;
   bool HasPGOCounts = false;
-  ProfileSummary *PS = ProfileSummary::getProfileSummary(Callee.getParent());
-  if (Callee.getEntryCount() && PS) {
+  if (Callee.getEntryCount() && Callee.getParent()->getMaximumFunctionCount()) {
     HasPGOCounts = true;
     FunctionCount = Callee.getEntryCount().getValue();
-    MaxFunctionCount = PS->getMaxFunctionCount();
+    MaxFunctionCount = Callee.getParent()->getMaximumFunctionCount().getValue();
   }
 
   // Listen to the inlinehint attribute or profile based hotness information

Modified: llvm/trunk/lib/ProfileData/ProfileSummary.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/ProfileSummary.cpp?rev=266619&r1=266618&r2=266619&view=diff
==============================================================================
--- llvm/trunk/lib/ProfileData/ProfileSummary.cpp (original)
+++ llvm/trunk/lib/ProfileData/ProfileSummary.cpp Mon Apr 18 10:31:11 2016
@@ -15,7 +15,6 @@
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/Function.h"
 #include "llvm/IR/Metadata.h"
-#include "llvm/IR/Module.h"
 #include "llvm/IR/Type.h"
 #include "llvm/ProfileData/InstrProf.h"
 #include "llvm/ProfileData/ProfileCommon.h"
@@ -33,10 +32,6 @@ const std::vector<uint32_t> ProfileSumma
      900000, 950000, 990000, 999000, 999900, 999990, 999999});
 const char *ProfileSummary::KindStr[2] = {"InstrProf", "SampleProfile"};
 
-ManagedStatic<std::pair<Module *, std::unique_ptr<ProfileSummary>>>
-    ProfileSummary::CachedSummary;
-ManagedStatic<sys::SmartMutex<true>> ProfileSummary::CacheMutex;
-
 void InstrProfSummary::addRecord(const InstrProfRecord &R) {
   addEntryCount(R.Counts[0]);
   for (size_t I = 1, E = R.Counts.size(); I < E; ++I)
@@ -87,39 +82,6 @@ void ProfileSummary::computeDetailedSumm
   }
 }
 
-bool ProfileSummary::operator==(ProfileSummary &Other) {
-  if (getKind() != Other.getKind())
-    return false;
-  if (TotalCount != Other.TotalCount)
-    return false;
-  if (MaxCount != Other.MaxCount)
-    return false;
-  if (MaxFunctionCount != Other.MaxFunctionCount)
-    return false;
-  if (NumFunctions != Other.NumFunctions)
-    return false;
-  if (NumCounts != Other.NumCounts)
-    return false;
-  std::vector<ProfileSummaryEntry> DS1 = getDetailedSummary();
-  std::vector<ProfileSummaryEntry> DS2 = Other.getDetailedSummary();
-  auto CompareSummaryEntry = [](ProfileSummaryEntry &E1,
-                                ProfileSummaryEntry &E2) {
-    return E1.Cutoff == E2.Cutoff && E1.MinCount == E2.MinCount &&
-           E1.NumCounts == E2.NumCounts;
-  };
-  if (!std::equal(DS1.begin(), DS1.end(), DS2.begin(), CompareSummaryEntry))
-    return false;
-  return true;
-}
-
-bool InstrProfSummary::operator==(ProfileSummary &Other) {
-  InstrProfSummary *OtherIPS = dyn_cast<InstrProfSummary>(&Other);
-  if (!OtherIPS)
-    return false;
-  return MaxInternalBlockCount == OtherIPS->MaxInternalBlockCount &&
-         ProfileSummary::operator==(Other);
-}
-
 // Returns true if the function is a hot function.
 bool ProfileSummary::isFunctionHot(const Function *F) {
   // FIXME: update when summary data is stored in module's metadata.
@@ -400,9 +362,3 @@ ProfileSummary *ProfileSummary::getFromM
   else
     return nullptr;
 }
-
-ProfileSummary *ProfileSummary::computeProfileSummary(Module *M) {
-  if (Metadata *MD = M->getProfileSummary())
-    return getFromMD(MD);
-  return nullptr;
-}

Modified: llvm/trunk/test/Transforms/Inline/inline-cold-callee.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline-cold-callee.ll?rev=266619&r1=266618&r2=266619&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/Inline/inline-cold-callee.ll (original)
+++ llvm/trunk/test/Transforms/Inline/inline-cold-callee.ll Mon Apr 18 10:31:11 2016
@@ -5,7 +5,7 @@
 ; A callee with identical body does gets inlined because cost fits within the
 ; inline-threshold
 
-define i32 @callee1(i32 %x) !prof !21 {
+define i32 @callee1(i32 %x) !prof !1 {
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
   %x3 = add i32 %x2, 1
@@ -13,7 +13,7 @@ define i32 @callee1(i32 %x) !prof !21 {
   ret i32 %x3
 }
 
-define i32 @callee2(i32 %x) !prof !22 {
+define i32 @callee2(i32 %x) !prof !2 {
 ; CHECK-LABEL: @callee2(
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
@@ -22,7 +22,7 @@ define i32 @callee2(i32 %x) !prof !22 {
   ret i32 %x3
 }
 
-define i32 @caller2(i32 %y1) !prof !22 {
+define i32 @caller2(i32 %y1) !prof !2 {
 ; CHECK-LABEL: @caller2(
 ; CHECK: call i32 @callee2
 ; CHECK-NOT: call i32 @callee1
@@ -32,19 +32,8 @@ define i32 @caller2(i32 %y1) !prof !22 {
   ret i32 %y3
 }
 
-!llvm.module.flags = !{!1}
-!21 = !{!"function_entry_count", i64 100}
-!22 = !{!"function_entry_count", i64 1}
-
-!1 = !{i32 1, !"ProfileSummary", !2}
-!2 = !{!3, !4, !5, !6, !7, !8, !9, !10}
-!3 = !{!"ProfileFormat", !"InstrProf"}
-!4 = !{!"TotalCount", i64 10000}
-!5 = !{!"MaxBlockCount", i64 1000}
-!6 = !{!"MaxInternalBlockCount", i64 1}
-!7 = !{!"MaxFunctionCount", i64 1000}
-!8 = !{!"NumBlocks", i64 3}
-!9 = !{!"NumFunctions", i64 3}
-!10 = !{!"DetailedSummary", !11}
-!11 = !{!12}
-!12 = !{i32 10000, i64 0, i32 0}
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"MaxFunctionCount", i32 1000}
+!1 = !{!"function_entry_count", i64 100}
+!2 = !{!"function_entry_count", i64 1}
+

Modified: llvm/trunk/test/Transforms/Inline/inline-hot-callee.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline-hot-callee.ll?rev=266619&r1=266618&r2=266619&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/Inline/inline-hot-callee.ll (original)
+++ llvm/trunk/test/Transforms/Inline/inline-hot-callee.ll Mon Apr 18 10:31:11 2016
@@ -5,7 +5,7 @@
 ; A cold callee with identical body does not get inlined because cost exceeds the
 ; inline-threshold
 
-define i32 @callee1(i32 %x) !prof !20 {
+define i32 @callee1(i32 %x) !prof !1 {
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
   %x3 = add i32 %x2, 1
@@ -13,7 +13,7 @@ define i32 @callee1(i32 %x) !prof !20 {
   ret i32 %x3
 }
 
-define i32 @callee2(i32 %x) !prof !21 {
+define i32 @callee2(i32 %x) !prof !2 {
 ; CHECK-LABEL: @callee2(
   %x1 = add i32 %x, 1
   %x2 = add i32 %x1, 1
@@ -22,7 +22,7 @@ define i32 @callee2(i32 %x) !prof !21 {
   ret i32 %x3
 }
 
-define i32 @caller2(i32 %y1) !prof !21 {
+define i32 @caller2(i32 %y1) !prof !2 {
 ; CHECK-LABEL: @caller2(
 ; CHECK: call i32 @callee2
 ; CHECK-NOT: call i32 @callee1
@@ -32,19 +32,8 @@ define i32 @caller2(i32 %y1) !prof !21 {
   ret i32 %y3
 }
 
-!llvm.module.flags = !{!1}
-!20 = !{!"function_entry_count", i64 10}
-!21 = !{!"function_entry_count", i64 1}
-
-!1 = !{i32 1, !"ProfileSummary", !2}
-!2 = !{!3, !4, !5, !6, !7, !8, !9, !10}
-!3 = !{!"ProfileFormat", !"InstrProf"}
-!4 = !{!"TotalCount", i64 10000}
-!5 = !{!"MaxBlockCount", i64 10}
-!6 = !{!"MaxInternalBlockCount", i64 1}
-!7 = !{!"MaxFunctionCount", i64 10}
-!8 = !{!"NumBlocks", i64 3}
-!9 = !{!"NumFunctions", i64 3}
-!10 = !{!"DetailedSummary", !11}
-!11 = !{!12}
-!12 = !{i32 10000, i64 0, i32 0}
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"MaxFunctionCount", i32 10}
+!1 = !{!"function_entry_count", i64 10}
+!2 = !{!"function_entry_count", i64 1}
+

Modified: llvm/trunk/unittests/ProfileData/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ProfileData/CMakeLists.txt?rev=266619&r1=266618&r2=266619&view=diff
==============================================================================
--- llvm/trunk/unittests/ProfileData/CMakeLists.txt (original)
+++ llvm/trunk/unittests/ProfileData/CMakeLists.txt Mon Apr 18 10:31:11 2016
@@ -7,6 +7,5 @@ set(LLVM_LINK_COMPONENTS
 add_llvm_unittest(ProfileDataTests
   CoverageMappingTest.cpp
   InstrProfTest.cpp
-  ProfileSummaryTest.cpp
   SampleProfTest.cpp
   )

Removed: llvm/trunk/unittests/ProfileData/ProfileSummaryTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ProfileData/ProfileSummaryTest.cpp?rev=266618&view=auto
==============================================================================
--- llvm/trunk/unittests/ProfileData/ProfileSummaryTest.cpp (original)
+++ llvm/trunk/unittests/ProfileData/ProfileSummaryTest.cpp (removed)
@@ -1,66 +0,0 @@
-//===- unittest/ProfileData/ProfileSummaryTest.cpp --------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/IR/Module.h"
-#include "llvm/ProfileData/InstrProf.h"
-#include "llvm/ProfileData/ProfileCommon.h"
-#include "llvm/ProfileData/SampleProf.h"
-#include "gtest/gtest.h"
-
-using namespace llvm;
-using namespace sampleprof;
-
-struct ProfileSummaryTest : ::testing::Test {
-  InstrProfSummary IPS;
-  SampleProfileSummary SPS;
-
-  ProfileSummaryTest()
-      : IPS({100000, 900000, 999999}), SPS({100000, 900000, 999999}) {}
-  void SetUp() {
-    InstrProfRecord Record1("func1", 0x1234, {97531, 5, 99999});
-    InstrProfRecord Record2("func2", 0x1234, {57341, 10000, 10, 1});
-    IPS.addRecord(Record1);
-    IPS.addRecord(Record2);
-
-    IPS.computeDetailedSummary();
-
-    FunctionSamples FooSamples;
-    FooSamples.addTotalSamples(7711);
-    FooSamples.addHeadSamples(610);
-    FooSamples.addBodySamples(1, 0, 610);
-    FooSamples.addBodySamples(2, 0, 600);
-    FooSamples.addBodySamples(4, 0, 60000);
-    FooSamples.addBodySamples(8, 0, 60351);
-    FooSamples.addBodySamples(10, 0, 605);
-
-    FunctionSamples BarSamples;
-    BarSamples.addTotalSamples(20301);
-    BarSamples.addHeadSamples(1437);
-    BarSamples.addBodySamples(1, 0, 1437);
-
-    SPS.addRecord(FooSamples);
-    SPS.addRecord(BarSamples);
-
-    SPS.computeDetailedSummary();
-  }
-
-};
-
-TEST_F(ProfileSummaryTest, summary_from_module) {
-  LLVMContext Context;
-  Module M1("M1", Context);
-  EXPECT_FALSE(ProfileSummary::getProfileSummary(&M1));
-  M1.setProfileSummary(IPS.getMD(Context));
-  EXPECT_TRUE(IPS == *ProfileSummary::getProfileSummary(&M1));
-
-  Module M2("M2", Context);
-  EXPECT_FALSE(ProfileSummary::getProfileSummary(&M2));
-  M2.setProfileSummary(SPS.getMD(Context));
-  EXPECT_TRUE(SPS == *ProfileSummary::getProfileSummary(&M2));
-}




More information about the llvm-commits mailing list