[llvm-branch-commits] [llvm] ed2f4fb - Revert "[MemProf] Optionally save context size info on largest cold allocatio…"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jun 3 16:04:41 PDT 2025


Author: Teresa Johnson
Date: 2025-06-03T16:04:38-07:00
New Revision: ed2f4fb23451c01cc86c23f5ccc9fc2d0d1427ff

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

LOG: Revert "[MemProf] Optionally save context size info on largest cold allocatio…"

This reverts commit f2adae57808996313dfec41a180454857ebd60d1.

Added: 
    

Modified: 
    llvm/include/llvm/Analysis/MemoryProfileInfo.h
    llvm/lib/Analysis/MemoryProfileInfo.cpp
    llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
    llvm/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
    llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
    llvm/lib/Transforms/Instrumentation/MemProfiler.cpp

Removed: 
    llvm/test/ThinLTO/X86/memprof-report-hinted-partial.ll
    llvm/test/Transforms/PGOProfile/memprof_max_cold_threshold.test


################################################################################
diff  --git a/llvm/include/llvm/Analysis/MemoryProfileInfo.h b/llvm/include/llvm/Analysis/MemoryProfileInfo.h
index b042a717e4e49..8cbb8673b69f5 100644
--- a/llvm/include/llvm/Analysis/MemoryProfileInfo.h
+++ b/llvm/include/llvm/Analysis/MemoryProfileInfo.h
@@ -24,18 +24,6 @@ class OptimizationRemarkEmitter;
 
 namespace memprof {
 
-/// Whether the alloc memeprof metadata will include context size info for all
-/// MIBs.
-LLVM_ABI bool metadataIncludesAllContextSizeInfo();
-
-/// Whether the alloc memprof metadata may include context size info for some
-/// MIBs (but possibly not all).
-LLVM_ABI bool metadataMayIncludeContextSizeInfo();
-
-/// Whether we need to record the context size info in the alloc trie used to
-/// build metadata.
-LLVM_ABI bool recordContextSizeInfoForAnalysis();
-
 /// Build callstack metadata from the provided list of call stack ids. Returns
 /// the resulting metadata node.
 LLVM_ABI MDNode *buildCallstackMetadata(ArrayRef<uint64_t> CallStack,
@@ -99,9 +87,6 @@ class CallStackTrie {
   // allocations for which we apply non-context sensitive allocation hints.
   OptimizationRemarkEmitter *ORE;
 
-  // The maximum size of a cold allocation context, from the profile summary.
-  uint64_t MaxColdSize;
-
   void deleteTrieNode(CallStackTrieNode *Node) {
     if (!Node)
       return;
@@ -128,9 +113,7 @@ class CallStackTrie {
                      uint64_t &ColdBytes);
 
 public:
-  CallStackTrie(OptimizationRemarkEmitter *ORE = nullptr,
-                uint64_t MaxColdSize = 0)
-      : ORE(ORE), MaxColdSize(MaxColdSize) {}
+  CallStackTrie(OptimizationRemarkEmitter *ORE = nullptr) : ORE(ORE) {}
   ~CallStackTrie() { deleteTrieNode(Alloc); }
 
   bool empty() const { return Alloc == nullptr; }

diff  --git a/llvm/lib/Analysis/MemoryProfileInfo.cpp b/llvm/lib/Analysis/MemoryProfileInfo.cpp
index c08024a38ffc2..347377522101a 100644
--- a/llvm/lib/Analysis/MemoryProfileInfo.cpp
+++ b/llvm/lib/Analysis/MemoryProfileInfo.cpp
@@ -46,25 +46,6 @@ cl::opt<unsigned> MinCallsiteColdBytePercent(
     cl::desc("Min percent of cold bytes at a callsite to discard non-cold "
              "contexts"));
 
-// Enable saving context size information for largest cold contexts, which can
-// be used to flag contexts for more aggressive cloning and reporting.
-cl::opt<unsigned> MinPercentMaxColdSize(
-    "memprof-min-percent-max-cold-size", cl::init(100), cl::Hidden,
-    cl::desc("Min percent of max cold bytes for critical cold context"));
-
-bool llvm::memprof::metadataIncludesAllContextSizeInfo() {
-  return MemProfReportHintedSizes || MinClonedColdBytePercent < 100;
-}
-
-bool llvm::memprof::metadataMayIncludeContextSizeInfo() {
-  return metadataIncludesAllContextSizeInfo() || MinPercentMaxColdSize < 100;
-}
-
-bool llvm::memprof::recordContextSizeInfoForAnalysis() {
-  return metadataMayIncludeContextSizeInfo() ||
-         MinCallsiteColdBytePercent < 100;
-}
-
 MDNode *llvm::memprof::buildCallstackMetadata(ArrayRef<uint64_t> CallStack,
                                               LLVMContext &Ctx) {
   SmallVector<Metadata *, 8> StackVals;
@@ -187,8 +168,7 @@ void CallStackTrie::addCallStack(MDNode *MIB) {
 static MDNode *createMIBNode(LLVMContext &Ctx, ArrayRef<uint64_t> MIBCallStack,
                              AllocationType AllocType,
                              ArrayRef<ContextTotalSize> ContextSizeInfo,
-                             const uint64_t MaxColdSize, uint64_t &TotalBytes,
-                             uint64_t &ColdBytes) {
+                             uint64_t &TotalBytes, uint64_t &ColdBytes) {
   SmallVector<Metadata *> MIBPayload(
       {buildCallstackMetadata(MIBCallStack, Ctx)});
   MIBPayload.push_back(
@@ -204,21 +184,12 @@ static MDNode *createMIBNode(LLVMContext &Ctx, ArrayRef<uint64_t> MIBCallStack,
 
   for (const auto &[FullStackId, TotalSize] : ContextSizeInfo) {
     TotalBytes += TotalSize;
-    bool LargeColdContext = false;
-    if (AllocType == AllocationType::Cold) {
+    if (AllocType == AllocationType::Cold)
       ColdBytes += TotalSize;
-      // If we have the max cold context size from summary information and have
-      // requested identification of contexts above a percentage of the max, see
-      // if this context qualifies.
-      if (MaxColdSize > 0 && MinPercentMaxColdSize < 100 &&
-          TotalSize * 100 >= MaxColdSize * MinPercentMaxColdSize)
-        LargeColdContext = true;
-    }
     // Only add the context size info as metadata if we need it in the thin
-    // link (currently if reporting of hinted sizes is enabled, we have
-    // specified a threshold for marking allocations cold after cloning, or we
-    // have identified this as a large cold context of interest above).
-    if (metadataIncludesAllContextSizeInfo() || LargeColdContext) {
+    // link (currently if reporting of hinted sizes is enabled or we have
+    // specified a threshold for marking allocations cold after cloning).
+    if (MemProfReportHintedSizes || MinClonedColdBytePercent < 100) {
       auto *FullStackIdMD = ValueAsMetadata::get(
           ConstantInt::get(Type::getInt64Ty(Ctx), FullStackId));
       auto *TotalSizeMD = ValueAsMetadata::get(
@@ -386,9 +357,9 @@ bool CallStackTrie::buildMIBNodes(CallStackTrieNode *Node, LLVMContext &Ctx,
   if (hasSingleAllocType(Node->AllocTypes)) {
     std::vector<ContextTotalSize> ContextSizeInfo;
     collectContextSizeInfo(Node, ContextSizeInfo);
-    MIBNodes.push_back(
-        createMIBNode(Ctx, MIBCallStack, (AllocationType)Node->AllocTypes,
-                      ContextSizeInfo, MaxColdSize, TotalBytes, ColdBytes));
+    MIBNodes.push_back(createMIBNode(Ctx, MIBCallStack,
+                                     (AllocationType)Node->AllocTypes,
+                                     ContextSizeInfo, TotalBytes, ColdBytes));
     return true;
   }
 
@@ -442,8 +413,7 @@ bool CallStackTrie::buildMIBNodes(CallStackTrieNode *Node, LLVMContext &Ctx,
   std::vector<ContextTotalSize> ContextSizeInfo;
   collectContextSizeInfo(Node, ContextSizeInfo);
   MIBNodes.push_back(createMIBNode(Ctx, MIBCallStack, AllocationType::NotCold,
-                                   ContextSizeInfo, MaxColdSize, TotalBytes,
-                                   ColdBytes));
+                                   ContextSizeInfo, TotalBytes, ColdBytes));
   return true;
 }
 

diff  --git a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
index a317ac471a231..59fa1a4b03c37 100644
--- a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
+++ b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
@@ -525,7 +525,6 @@ static void computeFunctionSummary(
       if (MemProfMD) {
         std::vector<MIBInfo> MIBs;
         std::vector<std::vector<ContextTotalSize>> ContextSizeInfos;
-        bool HasNonZeroContextSizeInfos = false;
         for (auto &MDOp : MemProfMD->operands()) {
           auto *MIBMD = cast<const MDNode>(MDOp);
           MDNode *StackNode = getMIBStackNode(MIBMD);
@@ -545,8 +544,7 @@ static void computeFunctionSummary(
           }
           // If we have context size information, collect it for inclusion in
           // the summary.
-          assert(MIBMD->getNumOperands() > 2 ||
-                 !metadataIncludesAllContextSizeInfo());
+          assert(MIBMD->getNumOperands() > 2 || !MemProfReportHintedSizes);
           if (MIBMD->getNumOperands() > 2) {
             std::vector<ContextTotalSize> ContextSizes;
             for (unsigned I = 2; I < MIBMD->getNumOperands(); I++) {
@@ -560,31 +558,14 @@ static void computeFunctionSummary(
                                 ->getZExtValue();
               ContextSizes.push_back({FullStackId, TS});
             }
-            // Flag that we need to keep the ContextSizeInfos array for this
-            // alloc as it now contains non-zero context info sizes.
-            HasNonZeroContextSizeInfos = true;
             ContextSizeInfos.push_back(std::move(ContextSizes));
-          } else {
-            // The ContextSizeInfos must be in the same relative position as the
-            // associated MIB. In some cases we only include a ContextSizeInfo
-            // for a subset of MIBs in an allocation. To handle that, eagerly
-            // fill any MIB entries that don't have context size info metadata
-            // with a pair of 0s. Later on we will only use this array if it
-            // ends up containing any non-zero entries (see where we set
-            // HasNonZeroContextSizeInfos above).
-            ContextSizeInfos.push_back({{0, 0}});
           }
           MIBs.push_back(
               MIBInfo(getMIBAllocType(MIBMD), std::move(StackIdIndices)));
         }
         Allocs.push_back(AllocInfo(std::move(MIBs)));
-        assert(HasNonZeroContextSizeInfos ||
-               !metadataIncludesAllContextSizeInfo());
-        // We eagerly build the ContextSizeInfos array, but it will be filled
-        // with sub arrays of pairs of 0s if no MIBs on this alloc actually
-        // contained context size info metadata. Only save it if any MIBs had
-        // any such metadata.
-        if (HasNonZeroContextSizeInfos) {
+        assert(!ContextSizeInfos.empty() || !MemProfReportHintedSizes);
+        if (!ContextSizeInfos.empty()) {
           assert(Allocs.back().MIBs.size() == ContextSizeInfos.size());
           Allocs.back().ContextSizeInfos = std::move(ContextSizeInfos);
         }

diff  --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 105edb943eb7f..47388c232b1ad 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -8164,14 +8164,6 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
           ContextSizes.reserve(NumContextSizeInfoEntries);
           for (unsigned J = 0; J < NumContextSizeInfoEntries; J++) {
             assert(ContextIdIndex < PendingContextIds.size());
-            // Skip any 0 entries for MIBs without the context size info.
-            if (PendingContextIds[ContextIdIndex] == 0) {
-              // The size should also be 0 if the context was 0.
-              assert(!Record[I]);
-              ContextIdIndex++;
-              I++;
-              continue;
-            }
             // PendingContextIds read from the preceding FS_ALLOC_CONTEXT_IDS
             // should be in the same order as the total sizes.
             ContextSizes.push_back(

diff  --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index fad8ebfad9f9a..8789b3123cd60 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -23,7 +23,6 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Analysis/MemoryProfileInfo.h"
 #include "llvm/BinaryFormat/Dwarf.h"
 #include "llvm/Bitcode/BitcodeCommon.h"
 #include "llvm/Bitcode/BitcodeReader.h"
@@ -4586,23 +4585,14 @@ void ModuleBitcodeWriterBase::writePerModuleGlobalValueSummary() {
     Stream.EmitRecord(bitc::FS_STACK_IDS, Vals, StackIdAbbvId);
   }
 
-  unsigned ContextIdAbbvId = 0;
-  if (metadataMayIncludeContextSizeInfo()) {
-    // n x context id
-    auto ContextIdAbbv = std::make_shared<BitCodeAbbrev>();
-    ContextIdAbbv->Add(BitCodeAbbrevOp(bitc::FS_ALLOC_CONTEXT_IDS));
-    ContextIdAbbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
-    // The context ids are hashes that are close to 64 bits in size, so emitting
-    // as a pair of 32-bit fixed-width values is more efficient than a VBR if we
-    // are emitting them for all MIBs. Otherwise we use VBR to better compress 0
-    // values that are expected to more frequently occur in an alloc's memprof
-    // summary.
-    if (metadataIncludesAllContextSizeInfo())
-      ContextIdAbbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32));
-    else
-      ContextIdAbbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
-    ContextIdAbbvId = Stream.EmitAbbrev(std::move(ContextIdAbbv));
-  }
+  // n x context id
+  auto ContextIdAbbv = std::make_shared<BitCodeAbbrev>();
+  ContextIdAbbv->Add(BitCodeAbbrevOp(bitc::FS_ALLOC_CONTEXT_IDS));
+  ContextIdAbbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  // The context ids are hashes that are close to 64 bits in size, so emitting
+  // as a pair of 32-bit fixed-width values is more efficient than a VBR.
+  ContextIdAbbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32));
+  unsigned ContextIdAbbvId = Stream.EmitAbbrev(std::move(ContextIdAbbv));
 
   // Abbrev for FS_PERMODULE_PROFILE.
   Abbv = std::make_shared<BitCodeAbbrev>();

diff  --git a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
index cff38a8e68c6a..5b4350845b726 100644
--- a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
+++ b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
@@ -2232,8 +2232,9 @@ IndexCallsiteContextGraph::IndexCallsiteContextGraph(
           CallStack<MIBInfo, SmallVector<unsigned>::const_iterator>
               EmptyContext;
           unsigned I = 0;
-          assert(!metadataMayIncludeContextSizeInfo() ||
-                 AN.ContextSizeInfos.size() == AN.MIBs.size());
+          assert(
+              (!MemProfReportHintedSizes && MinClonedColdBytePercent >= 100) ||
+              AN.ContextSizeInfos.size() == AN.MIBs.size());
           // Now add all of the MIBs and their stack nodes.
           for (auto &MIB : AN.MIBs) {
             CallStack<MIBInfo, SmallVector<unsigned>::const_iterator>

diff  --git a/llvm/lib/Transforms/Instrumentation/MemProfiler.cpp b/llvm/lib/Transforms/Instrumentation/MemProfiler.cpp
index 3f277b1b84ac1..e06add7cf313b 100644
--- a/llvm/lib/Transforms/Instrumentation/MemProfiler.cpp
+++ b/llvm/lib/Transforms/Instrumentation/MemProfiler.cpp
@@ -184,6 +184,10 @@ static cl::opt<bool> ClMemProfAttachCalleeGuids(
         "Attach calleeguids as value profile metadata for indirect calls."),
     cl::init(true), cl::Hidden);
 
+extern cl::opt<bool> MemProfReportHintedSizes;
+extern cl::opt<unsigned> MinClonedColdBytePercent;
+extern cl::opt<unsigned> MinCallsiteColdBytePercent;
+
 static cl::opt<unsigned> MinMatchedColdBytePercent(
     "memprof-matching-cold-threshold", cl::init(100), cl::Hidden,
     cl::desc("Min percent of cold bytes matched to hint allocation cold"));
@@ -295,6 +299,13 @@ class ModuleMemProfiler {
   Function *MemProfCtorFunction = nullptr;
 };
 
+// Options under which we need to record the context size info in the alloc trie
+// used to build metadata.
+bool recordContextSizeInfo() {
+  return MemProfReportHintedSizes || MinClonedColdBytePercent < 100 ||
+         MinCallsiteColdBytePercent < 100;
+}
+
 } // end anonymous namespace
 
 MemProfilerPass::MemProfilerPass() = default;
@@ -747,7 +758,7 @@ static AllocationType addCallStack(CallStackTrie &AllocTrie,
                                 AllocInfo->Info.getAllocCount(),
                                 AllocInfo->Info.getTotalLifetime());
   std::vector<ContextTotalSize> ContextSizeInfo;
-  if (recordContextSizeInfoForAnalysis()) {
+  if (recordContextSizeInfo()) {
     auto TotalSize = AllocInfo->Info.getTotalSize();
     assert(TotalSize);
     assert(FullStackId != 0);
@@ -992,7 +1003,7 @@ static void readMemprof(Module &M, Function &F,
                             &FullStackIdToAllocMatchInfo,
                         std::set<std::vector<uint64_t>> &MatchedCallSites,
                         DenseMap<uint64_t, LocToLocMap> &UndriftMaps,
-                        OptimizationRemarkEmitter &ORE, uint64_t MaxColdSize) {
+                        OptimizationRemarkEmitter &ORE) {
   auto &Ctx = M.getContext();
   // Previously we used getIRPGOFuncName() here. If F is local linkage,
   // getIRPGOFuncName() returns FuncName with prefix 'FileName;'. But
@@ -1181,7 +1192,7 @@ static void readMemprof(Module &M, Function &F,
         // We may match this instruction's location list to multiple MIB
         // contexts. Add them to a Trie specialized for trimming the contexts to
         // the minimal needed to disambiguate contexts with unique behavior.
-        CallStackTrie AllocTrie(&ORE, MaxColdSize);
+        CallStackTrie AllocTrie(&ORE);
         uint64_t TotalSize = 0;
         uint64_t TotalColdSize = 0;
         for (auto *AllocInfo : AllocInfoIter->second) {
@@ -1192,7 +1203,7 @@ static void readMemprof(Module &M, Function &F,
                                                  InlinedCallStack)) {
             NumOfMemProfMatchedAllocContexts++;
             uint64_t FullStackId = 0;
-            if (ClPrintMemProfMatchInfo || recordContextSizeInfoForAnalysis())
+            if (ClPrintMemProfMatchInfo || recordContextSizeInfo())
               FullStackId = computeFullStackId(AllocInfo->CallStack);
             auto AllocType = addCallStack(AllocTrie, AllocInfo, FullStackId);
             TotalSize += AllocInfo->Info.getTotalSize();
@@ -1329,10 +1340,6 @@ PreservedAnalyses MemProfUsePass::run(Module &M, ModuleAnalysisManager &AM) {
   // call stack.
   std::set<std::vector<uint64_t>> MatchedCallSites;
 
-  uint64_t MaxColdSize = 0;
-  if (auto *MemProfSum = MemProfReader->getMemProfSummary())
-    MaxColdSize = MemProfSum->getMaxColdTotalSize();
-
   for (auto &F : M) {
     if (F.isDeclaration())
       continue;
@@ -1340,7 +1347,7 @@ PreservedAnalyses MemProfUsePass::run(Module &M, ModuleAnalysisManager &AM) {
     const TargetLibraryInfo &TLI = FAM.getResult<TargetLibraryAnalysis>(F);
     auto &ORE = FAM.getResult<OptimizationRemarkEmitterAnalysis>(F);
     readMemprof(M, F, MemProfReader.get(), TLI, FullStackIdToAllocMatchInfo,
-                MatchedCallSites, UndriftMaps, ORE, MaxColdSize);
+                MatchedCallSites, UndriftMaps, ORE);
   }
 
   if (ClPrintMemProfMatchInfo) {

diff  --git a/llvm/test/ThinLTO/X86/memprof-report-hinted-partial.ll b/llvm/test/ThinLTO/X86/memprof-report-hinted-partial.ll
deleted file mode 100644
index d4a3f9bca2cab..0000000000000
--- a/llvm/test/ThinLTO/X86/memprof-report-hinted-partial.ll
+++ /dev/null
@@ -1,73 +0,0 @@
-;; Test that we get hinted size reporting for just the subset of MIBs that
-;; contain context size info in the metadata.
-
-;; Generate the bitcode including ThinLTO summary. Specify
-;; -memprof-min-percent-max-cold-size (value doesn't matter) to indicate to
-;; the bitcode writer that it should expect and optimize for partial context
-;; size info.
-; RUN: opt -thinlto-bc -memprof-min-percent-max-cold-size=50 %s >%t.o
-
-; RUN: llvm-lto2 run %t.o -enable-memprof-context-disambiguation \
-; RUN:	-supports-hot-cold-new \
-; RUN:	-r=%t.o,main,plx \
-; RUN:	-r=%t.o,_Znam, \
-; RUN:	-memprof-report-hinted-sizes \
-; RUN:	-o %t.out 2>&1 | FileCheck %s --check-prefix=SIZES
-
-;; We should only get these two messages from -memprof-report-hinted-sizes
-;; as they are the only MIBs with recorded context size info.
-; SIZES-NOT: full allocation context
-; SIZES: Cold full allocation context 456 with total size 200 is Cold after cloning (context id 2)
-; SIZES: Cold full allocation context 789 with total size 300 is Cold after cloning (context id 2)
-; SIZES-NOT: full allocation context
-
-source_filename = "memprof-report-hinted-partial.ll"
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-define i32 @main() #0 {
-entry:
-  %call = call ptr @_Z3foov(), !callsite !0
-  %call1 = call ptr @_Z3foov(), !callsite !1
-  ret i32 0
-}
-
-define internal ptr @_Z3barv() #0 {
-entry:
-  %call = call ptr @_Znam(i64 0), !memprof !2, !callsite !7
-  ret ptr null
-}
-
-declare ptr @_Znam(i64)
-
-define internal ptr @_Z3bazv() #0 {
-entry:
-  %call = call ptr @_Z3barv(), !callsite !8
-  ret ptr null
-}
-
-define internal ptr @_Z3foov() #0 {
-entry:
-  %call = call ptr @_Z3bazv(), !callsite !9
-  ret ptr null
-}
-
-; uselistorder directives
-uselistorder ptr @_Z3foov, { 1, 0 }
-
-attributes #0 = { noinline optnone }
-
-!0 = !{i64 8632435727821051414}
-!1 = !{i64 -3421689549917153178}
-!2 = !{!3, !5, !13}
-!3 = !{!4, !"notcold"}
-!4 = !{i64 9086428284934609951, i64 -5964873800580613432, i64 2732490490862098848, i64 8632435727821051414}
-!5 = !{!6, !"cold", !11, !12}
-!6 = !{i64 9086428284934609951, i64 -5964873800580613432, i64 2732490490862098848, i64 -3421689549917153178}
-!7 = !{i64 9086428284934609951}
-!8 = !{i64 -5964873800580613432}
-!9 = !{i64 2732490490862098848}
-!11 = !{i64 456, i64 200}
-!12 = !{i64 789, i64 300}
-!13 = !{!14, !"cold"}
-!14 = !{i64 9086428284934609951, i64 12345}

diff  --git a/llvm/test/Transforms/PGOProfile/memprof_max_cold_threshold.test b/llvm/test/Transforms/PGOProfile/memprof_max_cold_threshold.test
deleted file mode 100644
index 8ccaa170b0ed9..0000000000000
--- a/llvm/test/Transforms/PGOProfile/memprof_max_cold_threshold.test
+++ /dev/null
@@ -1,163 +0,0 @@
-;; Test the -memprof-min-percent-max-cold-size flag for annotating only the
-;; largest contexts with size info.
-
-; RUN: split-file %s %t
-
-;; Specify version 4 so that a summary is generated.
-; RUN: llvm-profdata merge --memprof-version=4 %t/memprof_max_cold_threshold.yaml -o %t/memprof_max_cold_threshold.memprofdata
-
-; RUN: llvm-profdata show --memory %t/memprof_max_cold_threshold.memprofdata | FileCheck %s --check-prefixes=SUMMARY
-; SUMMARY: # MemProfSummary:
-; SUMMARY: #   Total contexts: 5
-; SUMMARY: #   Total cold contexts: 4
-; SUMMARY: #   Total hot contexts: 0
-; SUMMARY: #   Maximum cold context total size: 400
-; SUMMARY: #   Maximum warm context total size: 500
-; SUMMARY: #   Maximum hot context total size: 0
-
-;; Test with various thresholds, starting with the baseline of no context size
-;; info.
-; RUN: opt < %t/memprof_max_cold_threshold.ll -passes='memprof-use<profile-filename=%t/memprof_max_cold_threshold.memprofdata>' -S | FileCheck %s --check-prefixes=ALL,NONE
-; RUN: opt < %t/memprof_max_cold_threshold.ll -memprof-min-percent-max-cold-size=99 -passes='memprof-use<profile-filename=%t/memprof_max_cold_threshold.memprofdata>' -S | FileCheck %s --check-prefixes=ALL,THRESH99
-; RUN: opt < %t/memprof_max_cold_threshold.ll -memprof-min-percent-max-cold-size=75 -passes='memprof-use<profile-filename=%t/memprof_max_cold_threshold.memprofdata>' -S | FileCheck %s --check-prefixes=ALL,THRESH75
-; RUN: opt < %t/memprof_max_cold_threshold.ll -memprof-min-percent-max-cold-size=50 -passes='memprof-use<profile-filename=%t/memprof_max_cold_threshold.memprofdata>' -S | FileCheck %s --check-prefixes=ALL,THRESH50
-
-;; Make sure serializing / deserializing through bitcode works
-; RUN: opt < %t/memprof_max_cold_threshold.ll -memprof-min-percent-max-cold-size=75 -passes='memprof-use<profile-filename=%t/memprof_max_cold_threshold.memprofdata>' -o %t/out.bc
-; RUN: llvm-dis %t/out.bc -o - | FileCheck %s --check-prefixes=ALL,THRESH75
-
-;--- memprof_max_cold_threshold.yaml
----
-HeapProfileRecords:
-  - GUID:            _Z3foov
-    AllocSites:
-      - Callstack:
-          - { Function: _Z3foov, LineOffset: 0, Column: 22, IsInlineFrame: false }
-          - { Function: main, LineOffset: 2, Column: 5, IsInlineFrame: false }
-        MemInfoBlock:
-	  # Smallest cold, 25% of largest cold size
-          TotalSize:                  100
-          AllocCount:                 1
-          TotalLifetimeAccessDensity: 1
-          TotalLifetime:              1000000
-      - Callstack:
-          - { Function: _Z3foov, LineOffset: 0, Column: 22, IsInlineFrame: false }
-          - { Function: main, LineOffset: 3, Column: 5, IsInlineFrame: false }
-        MemInfoBlock:
-	  # Largest cold
-          TotalSize:                  400
-          AllocCount:                 1
-          TotalLifetimeAccessDensity: 1
-          TotalLifetime:              1000000
-      - Callstack:
-          - { Function: _Z3foov, LineOffset: 0, Column: 22, IsInlineFrame: false }
-          - { Function: main, LineOffset: 4, Column: 5, IsInlineFrame: false }
-        MemInfoBlock:
-	  # Second largest cold, 75% of largest cold size
-          TotalSize:                  300
-          AllocCount:                 1
-          TotalLifetimeAccessDensity: 1
-          TotalLifetime:              1000000
-      - Callstack:
-          - { Function: _Z3foov, LineOffset: 0, Column: 22, IsInlineFrame: false }
-          - { Function: main, LineOffset: 5, Column: 5, IsInlineFrame: false }
-        MemInfoBlock:
-	  # Second smallest cold, 50% of largest cold size
-          TotalSize:                  200
-          AllocCount:                 1
-          TotalLifetimeAccessDensity: 1
-          TotalLifetime:              1000000
-      - Callstack:
-          - { Function: _Z3foov, LineOffset: 0, Column: 22, IsInlineFrame: false }
-          - { Function: main, LineOffset: 6, Column: 5, IsInlineFrame: false }
-        MemInfoBlock:
-	  # Largest context, which is non-cold (due to short lifetime)
-          TotalSize:                  500
-          AllocCount:                 1
-          TotalLifetimeAccessDensity: 1
-          TotalLifetime:              1
-    CallSites:       []
-...
-;--- memprof_max_cold_threshold.ll
-define dso_local ptr @_Z3foov() !dbg !4 {
-entry:
-  %call = call ptr @_Znam(i64 4) #0, !dbg !5
-; ALL: call ptr @_Znam(i64 4) {{.*}} !memprof ![[M1:[0-9]+]]
-  ret ptr %call
-}
-
-;; No MIBs get context size info without option.
-; NONE: ![[M1]] = !{![[M2:[0-9]+]], ![[M3:[0-9]+]], ![[M4:[0-9]+]], ![[M5:[0-9]+]], ![[M6:[0-9]+]]}
-; NONE: ![[M2]] = !{![[C2:[0-9]+]], !"cold"}
-; NONE: ![[C2]] = !{i64 590523745590780990, i64 720385627691022109}
-; NONE: ![[M3]] = !{![[C3:[0-9]+]], !"cold"}
-; NONE: ![[C3]] = !{i64 590523745590780990, i64 8256520048276991898}
-; NONE: ![[M4]] = !{![[C4:[0-9]+]], !"cold"}
-; NONE: ![[C4]] = !{i64 590523745590780990, i64 -6953100768213558995}
-; NONE: ![[M5]] = !{![[C5:[0-9]+]], !"cold"}
-; NONE: ![[C5]] = !{i64 590523745590780990, i64 -6435117705372285425}
-; NONE: ![[M6]] = !{![[C6:[0-9]+]], !"notcold"}
-; NONE: ![[C6]] = !{i64 590523745590780990, i64 -2847840206325626610}
-
-; THRESH99: ![[M1]] = !{![[M2:[0-9]+]], ![[M3:[0-9]+]], ![[M4:[0-9]+]], ![[M5:[0-9]+]], ![[M6:[0-9]+]]}
-; THRESH99: ![[M2]] = !{![[C2:[0-9]+]], !"cold"}
-; THRESH99: ![[C2]] = !{i64 590523745590780990, i64 720385627691022109}
-;; MIB with size 400 is now included with threshold 99%
-; THRESH99: ![[M3]] = !{![[C3:[0-9]+]], !"cold", ![[S3:[0-9]+]]}
-; THRESH99: ![[C3]] = !{i64 590523745590780990, i64 8256520048276991898}
-; THRESH99: ![[S3]] = !{i64 6509573709067523871, i64 400}
-; THRESH99: ![[M4]] = !{![[C4:[0-9]+]], !"cold"}
-; THRESH99: ![[C4]] = !{i64 590523745590780990, i64 -6953100768213558995}
-; THRESH99: ![[M5]] = !{![[C5:[0-9]+]], !"cold"}
-; THRESH99: ![[C5]] = !{i64 590523745590780990, i64 -6435117705372285425}
-; THRESH99: ![[M6]] = !{![[C6:[0-9]+]], !"notcold"}
-; THRESH99: ![[C6]] = !{i64 590523745590780990, i64 -2847840206325626610}
-
-; THRESH75: ![[M1]] = !{![[M2:[0-9]+]], ![[M3:[0-9]+]], ![[M4:[0-9]+]], ![[M5:[0-9]+]], ![[M6:[0-9]+]]}
-; THRESH75: ![[M2]] = !{![[C2:[0-9]+]], !"cold"}
-; THRESH75: ![[C2]] = !{i64 590523745590780990, i64 720385627691022109}
-; THRESH75: ![[M3]] = !{![[C3:[0-9]+]], !"cold", ![[S3:[0-9]+]]}
-; THRESH75: ![[C3]] = !{i64 590523745590780990, i64 8256520048276991898}
-; THRESH75: ![[S3]] = !{i64 6509573709067523871, i64 400}
-; THRESH75: ![[M4]] = !{![[C4:[0-9]+]], !"cold"}
-; THRESH75: ![[C4]] = !{i64 590523745590780990, i64 -6953100768213558995}
-;; MIB with size 300 is now included with threshold 75%
-; THRESH75: ![[M5]] = !{![[C5:[0-9]+]], !"cold", ![[S5:[0-9]+]]}
-; THRESH75: ![[C5]] = !{i64 590523745590780990, i64 -6435117705372285425}
-; THRESH75: ![[S5]] = !{i64 86248815258696712, i64 300}
-; THRESH75: ![[M6]] = !{![[C6:[0-9]+]], !"notcold"}
-; THRESH75: ![[C6]] = !{i64 590523745590780990, i64 -2847840206325626610}
-
-; THRESH50: ![[M1]] = !{![[M2:[0-9]+]], ![[M3:[0-9]+]], ![[M4:[0-9]+]], ![[M5:[0-9]+]], ![[M6:[0-9]+]]}
-;; The smallest never gets context size info.
-; THRESH50: ![[M2]] = !{![[C2:[0-9]+]], !"cold"}
-; THRESH50: ![[C2]] = !{i64 590523745590780990, i64 720385627691022109}
-; THRESH50: ![[M3]] = !{![[C3:[0-9]+]], !"cold", ![[S3:[0-9]+]]}
-; THRESH50: ![[C3]] = !{i64 590523745590780990, i64 8256520048276991898}
-; THRESH50: ![[S3]] = !{i64 6509573709067523871, i64 400}
-;; MIB with size 200 is now included with threshold 50%
-; THRESH50: ![[M4]] = !{![[C4:[0-9]+]], !"cold", ![[S4:[0-9]+]]}
-; THRESH50: ![[C4]] = !{i64 590523745590780990, i64 -6953100768213558995}
-; THRESH50: ![[S4]] = !{i64 -2629930016428010893, i64 200}
-; THRESH50: ![[M5]] = !{![[C5:[0-9]+]], !"cold", ![[S5:[0-9]+]]}
-; THRESH50: ![[C5]] = !{i64 590523745590780990, i64 -6435117705372285425}
-; THRESH50: ![[S5]] = !{i64 86248815258696712, i64 300}
-;; Non cold context never gets context size info
-; THRESH50: ![[M6]] = !{![[C6:[0-9]+]], !"notcold"}
-; THRESH50: ![[C6]] = !{i64 590523745590780990, i64 -2847840206325626610}
-
-declare ptr @_Znam(i64)
-
-attributes #0 = { builtin allocsize(0) }
-
-!llvm.module.flags = !{!2, !3}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1)
-!1 = !DIFile(filename: "t", directory: "/")
-!2 = !{i32 7, !"Dwarf Version", i32 5}
-!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 1, unit: !0)
-!5 = !DILocation(line: 1, column: 22, scope: !4)
-!6 = !DILocation(line: 2, column: 22, scope: !4)
-!7 = !DILocation(line: 3, column: 22, scope: !4)
-!8 = !DILocation(line: 4, column: 22, scope: !4)


        


More information about the llvm-branch-commits mailing list