[llvm-branch-commits] [llvm] 92885bb - Revert "[llvm-profdata] Enabled functionality to write split-layout profile (…"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Aug 28 18:33:26 PDT 2024


Author: William Junda Huang
Date: 2024-08-28T21:33:24-04:00
New Revision: 92885bbeab632875929827a09841237cd59405fb

URL: https://github.com/llvm/llvm-project/commit/92885bbeab632875929827a09841237cd59405fb
DIFF: https://github.com/llvm/llvm-project/commit/92885bbeab632875929827a09841237cd59405fb.diff

LOG: Revert "[llvm-profdata] Enabled functionality to write split-layout profile (…"

This reverts commit 75e9d191f52b047ea839f75ab2a7a7d9f8c6becd.

Added: 
    

Modified: 
    llvm/docs/CommandGuide/llvm-profdata.rst
    llvm/include/llvm/ProfileData/SampleProfReader.h
    llvm/include/llvm/ProfileData/SampleProfWriter.h
    llvm/lib/ProfileData/SampleProfReader.cpp
    llvm/lib/ProfileData/SampleProfWriter.cpp
    llvm/tools/llvm-profdata/llvm-profdata.cpp

Removed: 
    llvm/test/tools/llvm-profdata/Inputs/split-layout.profdata
    llvm/test/tools/llvm-profdata/sample-split-layout.test


################################################################################
diff  --git a/llvm/docs/CommandGuide/llvm-profdata.rst b/llvm/docs/CommandGuide/llvm-profdata.rst
index af840f3994b3d6..acf016a6dbcd70 100644
--- a/llvm/docs/CommandGuide/llvm-profdata.rst
+++ b/llvm/docs/CommandGuide/llvm-profdata.rst
@@ -162,12 +162,6 @@ OPTIONS
  coverage for the optimized target. This option can only be used with
  sample-based profile in extbinary format.
 
-.. option:: --split-layout=[true|false]
-
- Split the profile data section to two with one containing sample profiles with
- inlined functions and the other not. This option can only be used with
- sample-based profile in extbinary format.
-
 .. option:: --convert-sample-profile-layout=[nest|flat]
 
  Convert the merged profile into a profile with a new layout. Supported

diff  --git a/llvm/include/llvm/ProfileData/SampleProfReader.h b/llvm/include/llvm/ProfileData/SampleProfReader.h
index 0fd86600de21f0..f053946a5db0a9 100644
--- a/llvm/include/llvm/ProfileData/SampleProfReader.h
+++ b/llvm/include/llvm/ProfileData/SampleProfReader.h
@@ -495,9 +495,9 @@ class SampleProfileReader {
   /// are present.
   virtual void setProfileUseMD5() { ProfileIsMD5 = true; }
 
-  /// Don't read profile without context if the flag is set.
-  void setSkipFlatProf(bool Skip) { SkipFlatProf = Skip; }
-
+  /// Don't read profile without context if the flag is set. This is only meaningful
+  /// for ExtBinary format.
+  virtual void setSkipFlatProf(bool Skip) {}
   /// Return whether any name in the profile contains ".__uniq." suffix.
   virtual bool hasUniqSuffix() { return false; }
 
@@ -581,10 +581,6 @@ class SampleProfileReader {
   /// Whether the profile uses MD5 for Sample Contexts and function names. This
   /// can be one-way overriden by the user to force use MD5.
   bool ProfileIsMD5 = false;
-
-  /// If SkipFlatProf is true, skip functions marked with !Flat in text mode or
-  /// sections with SecFlagFlat flag in ExtBinary mode.
-  bool SkipFlatProf = false;
 };
 
 class SampleProfileReaderText : public SampleProfileReader {
@@ -793,6 +789,10 @@ class SampleProfileReaderExtBinaryBase : public SampleProfileReaderBinary {
   /// The set containing the functions to use when compiling a module.
   DenseSet<StringRef> FuncsToUse;
 
+  /// If SkipFlatProf is true, skip the sections with
+  /// SecFlagFlat flag.
+  bool SkipFlatProf = false;
+
 public:
   SampleProfileReaderExtBinaryBase(std::unique_ptr<MemoryBuffer> B,
                                    LLVMContext &C, SampleProfileFormat Format)
@@ -815,6 +815,8 @@ class SampleProfileReaderExtBinaryBase : public SampleProfileReaderBinary {
     return std::move(ProfSymList);
   };
 
+  void setSkipFlatProf(bool Skip) override { SkipFlatProf = Skip; }
+
 private:
   /// Read the profiles on-demand for the given functions. This is used after
   /// stale call graph matching finds new functions whose profiles aren't loaded

diff  --git a/llvm/include/llvm/ProfileData/SampleProfWriter.h b/llvm/include/llvm/ProfileData/SampleProfWriter.h
index 4b659eaf950b3e..5398a44f13ba36 100644
--- a/llvm/include/llvm/ProfileData/SampleProfWriter.h
+++ b/llvm/include/llvm/ProfileData/SampleProfWriter.h
@@ -28,9 +28,9 @@ namespace sampleprof {
 
 enum SectionLayout {
   DefaultLayout,
-  // The layout splits profile with inlined functions from profile without
-  // inlined functions. When Thinlto is enabled, ThinLTO postlink phase only
-  // has to load profile with inlined functions and can skip the other part.
+  // The layout splits profile with context information from profile without
+  // context information. When Thinlto is enabled, ThinLTO postlink phase only
+  // has to load profile with context information and can skip the other part.
   CtxSplitLayout,
   NumOfLayout,
 };
@@ -128,7 +128,7 @@ class SampleProfileWriter {
   virtual void setToCompressAllSections() {}
   virtual void setUseMD5() {}
   virtual void setPartialProfile() {}
-  virtual void setUseCtxSplitLayout() {}
+  virtual void resetSecLayout(SectionLayout SL) {}
 
 protected:
   SampleProfileWriter(std::unique_ptr<raw_ostream> &OS)
@@ -176,22 +176,12 @@ class SampleProfileWriterText : public SampleProfileWriter {
     return sampleprof_error::success;
   }
 
-  void setUseCtxSplitLayout() override {
-    MarkFlatProfiles = true;
-  }
-
 private:
   /// Indent level to use when writing.
   ///
   /// This is used when printing inlined callees.
   unsigned Indent = 0;
 
-  /// If set, writes metadata "!Flat" to functions without inlined functions.
-  /// This flag is for manual inspection only, it has no effect for the profile
-  /// reader because a text sample profile is read sequentially and functions
-  /// cannot be skipped.
-  bool MarkFlatProfiles = false;
-
   friend ErrorOr<std::unique_ptr<SampleProfileWriter>>
   SampleProfileWriter::create(std::unique_ptr<raw_ostream> &OS,
                               SampleProfileFormat Format);
@@ -252,11 +242,11 @@ const std::array<SmallVector<SecHdrTableEntry, 8>, NumOfLayout>
         // CtxSplitLayout
         SmallVector<SecHdrTableEntry, 8>({{SecProfSummary, 0, 0, 0, 0},
                                           {SecNameTable, 0, 0, 0, 0},
-                                          // profile with inlined functions
+                                          // profile with context
                                           // for next two sections
                                           {SecFuncOffsetTable, 0, 0, 0, 0},
                                           {SecLBRProfile, 0, 0, 0, 0},
-                                          // profile without inlined functions
+                                          // profile without context
                                           // for next two sections
                                           {SecFuncOffsetTable, 0, 0, 0, 0},
                                           {SecLBRProfile, 0, 0, 0, 0},
@@ -293,11 +283,7 @@ class SampleProfileWriterExtBinaryBase : public SampleProfileWriterBinary {
     ProfSymList = PSL;
   };
 
-  void setUseCtxSplitLayout() override {
-    resetSecLayout(SectionLayout::CtxSplitLayout);
-  }
-
-  void resetSecLayout(SectionLayout SL) {
+  void resetSecLayout(SectionLayout SL) override {
     verifySecLayout(SL);
 #ifndef NDEBUG
     // Make sure resetSecLayout is called before any flag setting.

diff  --git a/llvm/lib/ProfileData/SampleProfReader.cpp b/llvm/lib/ProfileData/SampleProfReader.cpp
index 98c78443785275..71464e8dae65ce 100644
--- a/llvm/lib/ProfileData/SampleProfReader.cpp
+++ b/llvm/lib/ProfileData/SampleProfReader.cpp
@@ -215,8 +215,7 @@ static bool ParseLine(const StringRef &Input, LineType &LineTy, uint32_t &Depth,
                       uint64_t &NumSamples, uint32_t &LineOffset,
                       uint32_t &Discriminator, StringRef &CalleeName,
                       DenseMap<StringRef, uint64_t> &TargetCountMap,
-                      uint64_t &FunctionHash, uint32_t &Attributes,
-                      bool &IsFlat) {
+                      uint64_t &FunctionHash, uint32_t &Attributes) {
   for (Depth = 0; Input[Depth] == ' '; Depth++)
     ;
   if (Depth == 0)
@@ -224,13 +223,6 @@ static bool ParseLine(const StringRef &Input, LineType &LineTy, uint32_t &Depth,
 
   if (Input[Depth] == '!') {
     LineTy = LineType::Metadata;
-    // This metadata is only for manual inspection only. We already created a
-    // FunctionSamples and put it in the profile map, so there is no point
-    // to skip profiles even they have no use for ThinLTO.
-    if (Input == StringRef(" !Flat")) {
-      IsFlat = true;
-      return true;
-    }
     return parseMetadata(Input.substr(Depth), FunctionHash, Attributes);
   }
 
@@ -333,8 +325,6 @@ std::error_code SampleProfileReaderText::readImpl() {
   // top-level or nested function profile.
   uint32_t DepthMetadata = 0;
 
-  std::vector<SampleContext *> FlatSamples;
-
   ProfileIsFS = ProfileIsFSDisciminator;
   FunctionSamples::ProfileIsFS = ProfileIsFS;
   for (; !LineIt.is_at_eof(); ++LineIt) {
@@ -378,10 +368,9 @@ std::error_code SampleProfileReaderText::readImpl() {
       LineType LineTy;
       uint64_t FunctionHash = 0;
       uint32_t Attributes = 0;
-      bool IsFlat = false;
       if (!ParseLine(*LineIt, LineTy, Depth, NumSamples, LineOffset,
                      Discriminator, FName, TargetCountMap, FunctionHash,
-                     Attributes, IsFlat)) {
+                     Attributes)) {
         reportError(LineIt.line_number(),
                     "Expected 'NUM[.NUM]: NUM[ mangled_name:NUM]*', found " +
                         *LineIt);
@@ -437,26 +426,12 @@ std::error_code SampleProfileReaderText::readImpl() {
         if (Attributes & (uint32_t)ContextShouldBeInlined)
           ProfileIsPreInlined = true;
         DepthMetadata = Depth;
-        if (IsFlat) {
-          if (Depth == 1)
-            FlatSamples.push_back(&FProfile.getContext());
-          else
-            Ctx.diagnose(DiagnosticInfoSampleProfile(
-                Buffer->getBufferIdentifier(), LineIt.line_number(),
-                "!Flat may only be used at top level function.", DS_Warning));
-        }
         break;
       }
       }
     }
   }
 
-  // Honor the option to skip flat functions. Since they are already added to
-  // the profile map, remove them all here.
-  if (SkipFlatProf)
-    for (SampleContext *FlatSample : FlatSamples)
-      Profiles.erase(*FlatSample);
-
   assert((CSProfileCount == 0 || CSProfileCount == Profiles.size()) &&
          "Cannot have both context-sensitive and regular profile");
   ProfileIsCS = (CSProfileCount > 0);
@@ -1051,7 +1026,7 @@ std::error_code SampleProfileReaderExtBinaryBase::readImpl() {
     if (!Entry.Size)
       continue;
 
-    // Skip sections without inlined functions when SkipFlatProf is true.
+    // Skip sections without context when SkipFlatProf is true.
     if (SkipFlatProf && hasSecFlag(Entry, SecCommonFlags::SecFlagFlat))
       continue;
 

diff  --git a/llvm/lib/ProfileData/SampleProfWriter.cpp b/llvm/lib/ProfileData/SampleProfWriter.cpp
index 8ded44fdc073b8..1630fefb4fcfba 100644
--- a/llvm/lib/ProfileData/SampleProfWriter.cpp
+++ b/llvm/lib/ProfileData/SampleProfWriter.cpp
@@ -624,9 +624,6 @@ std::error_code SampleProfileWriterText::writeSample(const FunctionSamples &S) {
     LineCount++;
   }
 
-  if (Indent == 0 && MarkFlatProfiles && S.getCallsiteSamples().size() == 0)
-    OS << " !Flat\n";
-
   return sampleprof_error::success;
 }
 

diff  --git a/llvm/test/tools/llvm-profdata/Inputs/split-layout.profdata b/llvm/test/tools/llvm-profdata/Inputs/split-layout.profdata
deleted file mode 100644
index bc473ae76558f1..00000000000000
Binary files a/llvm/test/tools/llvm-profdata/Inputs/split-layout.profdata and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-profdata/sample-split-layout.test b/llvm/test/tools/llvm-profdata/sample-split-layout.test
deleted file mode 100644
index a1927c80b2e29b..00000000000000
--- a/llvm/test/tools/llvm-profdata/sample-split-layout.test
+++ /dev/null
@@ -1,22 +0,0 @@
-RUN: llvm-profdata merge --sample --extbinary --split-layout %p/Inputs/sample-profile.proftext -o %t-output
-RUN: 
diff  %t-output %p/Inputs/split-layout.profdata
-
-RUN: llvm-profdata merge --sample --text --split-layout %t-output | FileCheck %s
-CHECK: main:184019:0
-CHECK-NEXT:  4: 534
-CHECK-NEXT:  4.2: 534
-CHECK-NEXT:  5: 1075
-CHECK-NEXT:  5.1: 1075
-CHECK-NEXT:  6: 2080
-CHECK-NEXT:  7: 534
-CHECK-NEXT:  9: 2064 _Z3bari:1471 _Z3fooi:631
-CHECK-NEXT:  10: inline1:1000
-CHECK-NEXT:   1: 1000
-CHECK-NEXT:  10: inline2:2000
-CHECK-NEXT:   1: 2000
-CHECK-NEXT: _Z3bari:20301:1437
-CHECK-NEXT:  1: 1437
-CHECK-NEXT:  !Flat
-CHECK-NEXT: _Z3fooi:7711:610
-CHECK-NEXT:  1: 610
-CHECK-NEXT:  !Flat

diff  --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp
index 3b775de11e0405..1f6c4c604d57b5 100644
--- a/llvm/tools/llvm-profdata/llvm-profdata.cpp
+++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp
@@ -207,12 +207,6 @@ cl::opt<bool> GenPartialProfile(
     "gen-partial-profile", cl::init(false), cl::Hidden,
     cl::sub(MergeSubcommand),
     cl::desc("Generate a partial profile (only meaningful for -extbinary)"));
-cl::opt<bool> SplitLayout(
-    "split-layout", cl::init(false), cl::Hidden,
-    cl::sub(MergeSubcommand),
-    cl::desc("Split the profile to two sections with one containing sample "
-             "profiles with inlined functions and the other without (only "
-             "meaningful for -extbinary)"));
 cl::opt<std::string> SupplInstrWithSample(
     "supplement-instr-with-sample", cl::init(""), cl::Hidden,
     cl::sub(MergeSubcommand),
@@ -1473,13 +1467,6 @@ static void handleExtBinaryWriter(sampleprof::SampleProfileWriter &Writer,
                                   sampleprof::ProfileSymbolList &WriterList,
                                   bool CompressAllSections, bool UseMD5,
                                   bool GenPartialProfile) {
-  if (SplitLayout) {
-    if (OutputFormat == PF_Binary)
-      warn("-split-layout is ignored. Specify -extbinary to enable it");
-    else
-      Writer.setUseCtxSplitLayout();
-  }
-
   populateProfileSymbolList(Buffer, WriterList);
   if (WriterList.size() > 0 && OutputFormat != PF_Ext_Binary)
     warn("Profile Symbol list is not empty but the output format is not "


        


More information about the llvm-branch-commits mailing list