-
Notifications
You must be signed in to change notification settings - Fork 14.7k
[NFCI]Remove EntryCount from FunctionSummary and clean up surrounding synthetic count passes. #107471
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
✅ With the latest revision this PR passed the C/C++ code formatter. |
@llvm/pr-subscribers-lto @llvm/pr-subscribers-clang Author: Mingming Liu (minglotus-6) ChangesThe primary motivation is to remove While I'm at it, this PR clean up {SummaryBasedOptimizations, SyntheticCountsPropagation} since they were not used and there are no plans to further invest on them. With this patch, bitcode writer writes a placeholder 0 at the byte offset of Patch is 37.45 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/107471.diff 26 Files Affected:
diff --git a/clang/docs/tools/clang-formatted-files.txt b/clang/docs/tools/clang-formatted-files.txt
index fc07357986d989..48ded9c7545547 100644
--- a/clang/docs/tools/clang-formatted-files.txt
+++ b/clang/docs/tools/clang-formatted-files.txt
@@ -5349,7 +5349,6 @@ llvm/include/llvm/IR/SSAContext.h
llvm/include/llvm/IR/StructuralHash.h
llvm/include/llvm/IR/TrackingMDRef.h
llvm/include/llvm/IR/UseListOrder.h
-llvm/include/llvm/LTO/SummaryBasedOptimizations.h
llvm/include/llvm/MC/MCAsmInfoCOFF.h
llvm/include/llvm/MC/MCAsmInfoDarwin.h
llvm/include/llvm/MC/MCAsmInfoELF.h
@@ -5586,7 +5585,6 @@ llvm/include/llvm/Transforms/IPO/SampleProfile.h
llvm/include/llvm/Transforms/IPO/SampleProfileProbe.h
llvm/include/llvm/Transforms/IPO/SCCP.h
llvm/include/llvm/Transforms/IPO/StripSymbols.h
-llvm/include/llvm/Transforms/IPO/SyntheticCountsPropagation.h
llvm/include/llvm/Transforms/IPO/ThinLTOBitcodeWriter.h
llvm/include/llvm/Transforms/IPO/WholeProgramDevirt.h
llvm/include/llvm/Transforms/Scalar/ADCE.h
@@ -6070,7 +6068,6 @@ llvm/lib/IR/SSAContext.cpp
llvm/lib/IR/Statepoint.cpp
llvm/lib/IR/StructuralHash.cpp
llvm/lib/IR/ValueSymbolTable.cpp
-llvm/lib/LTO/SummaryBasedOptimizations.cpp
llvm/lib/MC/MCAsmInfoCOFF.cpp
llvm/lib/MC/MCAsmInfoELF.cpp
llvm/lib/MC/MCAsmInfoGOFF.cpp
@@ -6861,7 +6858,6 @@ llvm/lib/Transforms/IPO/OpenMPOpt.cpp
llvm/lib/Transforms/IPO/SampleContextTracker.cpp
llvm/lib/Transforms/IPO/SampleProfileProbe.cpp
llvm/lib/Transforms/IPO/StripDeadPrototypes.cpp
-llvm/lib/Transforms/IPO/SyntheticCountsPropagation.cpp
llvm/lib/Transforms/ObjCARC/BlotMapVector.h
llvm/lib/Transforms/ObjCARC/ObjCARCExpand.cpp
llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h
diff --git a/llvm/include/llvm/IR/ModuleSummaryIndex.h b/llvm/include/llvm/IR/ModuleSummaryIndex.h
index 6d39150a03bfd5..eae04f4eadcccd 100644
--- a/llvm/include/llvm/IR/ModuleSummaryIndex.h
+++ b/llvm/include/llvm/IR/ModuleSummaryIndex.h
@@ -856,9 +856,8 @@ class FunctionSummary : public GlobalValueSummary {
GlobalValue::DefaultVisibility,
/*NotEligibleToImport=*/true, /*Live=*/true, /*IsLocal=*/false,
/*CanAutoHide=*/false, GlobalValueSummary::ImportKind::Definition),
- /*NumInsts=*/0, FunctionSummary::FFlags{}, /*EntryCount=*/0,
- std::vector<ValueInfo>(), std::move(Edges),
- std::vector<GlobalValue::GUID>(),
+ /*NumInsts=*/0, FunctionSummary::FFlags{}, std::vector<ValueInfo>(),
+ std::move(Edges), std::vector<GlobalValue::GUID>(),
std::vector<FunctionSummary::VFuncId>(),
std::vector<FunctionSummary::VFuncId>(),
std::vector<FunctionSummary::ConstVCall>(),
@@ -878,11 +877,6 @@ class FunctionSummary : public GlobalValueSummary {
/// Function summary specific flags.
FFlags FunFlags;
- /// The synthesized entry count of the function.
- /// This is only populated during ThinLink phase and remains unused while
- /// generating per-module summaries.
- uint64_t EntryCount = 0;
-
/// List of <CalleeValueInfo, CalleeInfo> call edge pairs from this function.
std::vector<EdgeTy> CallGraphEdgeList;
@@ -913,8 +907,7 @@ class FunctionSummary : public GlobalValueSummary {
public:
FunctionSummary(GVFlags Flags, unsigned NumInsts, FFlags FunFlags,
- uint64_t EntryCount, std::vector<ValueInfo> Refs,
- std::vector<EdgeTy> CGEdges,
+ std::vector<ValueInfo> Refs, std::vector<EdgeTy> CGEdges,
std::vector<GlobalValue::GUID> TypeTests,
std::vector<VFuncId> TypeTestAssumeVCalls,
std::vector<VFuncId> TypeCheckedLoadVCalls,
@@ -923,7 +916,7 @@ class FunctionSummary : public GlobalValueSummary {
std::vector<ParamAccess> Params, CallsitesTy CallsiteList,
AllocsTy AllocList)
: GlobalValueSummary(FunctionKind, Flags, std::move(Refs)),
- InstCount(NumInsts), FunFlags(FunFlags), EntryCount(EntryCount),
+ InstCount(NumInsts), FunFlags(FunFlags),
CallGraphEdgeList(std::move(CGEdges)) {
if (!TypeTests.empty() || !TypeTestAssumeVCalls.empty() ||
!TypeCheckedLoadVCalls.empty() || !TypeTestAssumeConstVCalls.empty() ||
@@ -958,12 +951,6 @@ class FunctionSummary : public GlobalValueSummary {
/// Get the instruction count recorded for this function.
unsigned instCount() const { return InstCount; }
- /// Get the synthetic entry count for this function.
- uint64_t entryCount() const { return EntryCount; }
-
- /// Set the synthetic entry count for this function.
- void setEntryCount(uint64_t EC) { EntryCount = EC; }
-
/// Return the list of <CalleeValueInfo, CalleeInfo> pairs.
ArrayRef<EdgeTy> calls() const { return CallGraphEdgeList; }
@@ -1585,9 +1572,6 @@ class ModuleSummaryIndex {
return WithAttributePropagation && GVS->maybeWriteOnly();
}
- bool hasSyntheticEntryCounts() const { return HasSyntheticEntryCounts; }
- void setHasSyntheticEntryCounts() { HasSyntheticEntryCounts = true; }
-
bool withSupportsHotColdNew() const { return WithSupportsHotColdNew; }
void setWithSupportsHotColdNew() { WithSupportsHotColdNew = true; }
diff --git a/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h b/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
index 6cc533f043a517..3ce929afdb1ea6 100644
--- a/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
+++ b/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
@@ -229,7 +229,7 @@ template <> struct CustomMappingTraits<GlobalValueSummaryMapTy> {
FSum.NotEligibleToImport, FSum.Live, FSum.IsLocal,
FSum.CanAutoHide,
static_cast<GlobalValueSummary::ImportKind>(FSum.ImportType)),
- /*NumInsts=*/0, FunctionSummary::FFlags{}, /*EntryCount=*/0, Refs,
+ /*NumInsts=*/0, FunctionSummary::FFlags{}, Refs,
ArrayRef<FunctionSummary::EdgeTy>{}, std::move(FSum.TypeTests),
std::move(FSum.TypeTestAssumeVCalls),
std::move(FSum.TypeCheckedLoadVCalls),
diff --git a/llvm/include/llvm/LTO/SummaryBasedOptimizations.h b/llvm/include/llvm/LTO/SummaryBasedOptimizations.h
deleted file mode 100644
index 508ab2587ac56a..00000000000000
--- a/llvm/include/llvm/LTO/SummaryBasedOptimizations.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//=- llvm/LTO/SummaryBasedOptimizations.h -Link time optimizations-*- C++ -*-=//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LTO_SUMMARYBASEDOPTIMIZATIONS_H
-#define LLVM_LTO_SUMMARYBASEDOPTIMIZATIONS_H
-namespace llvm {
-class ModuleSummaryIndex;
-
-/// Compute synthetic function entry counts.
-void computeSyntheticCounts(ModuleSummaryIndex &Index);
-
-} // namespace llvm
-#endif
diff --git a/llvm/include/llvm/Transforms/IPO/SyntheticCountsPropagation.h b/llvm/include/llvm/Transforms/IPO/SyntheticCountsPropagation.h
deleted file mode 100644
index 5338ac9b0ebc57..00000000000000
--- a/llvm/include/llvm/Transforms/IPO/SyntheticCountsPropagation.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//=- SyntheticCountsPropagation.h - Propagate function counts -----*- C++ -*-=//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TRANSFORMS_IPO_SYNTHETICCOUNTSPROPAGATION_H
-#define LLVM_TRANSFORMS_IPO_SYNTHETICCOUNTSPROPAGATION_H
-
-#include "llvm/IR/PassManager.h"
-
-namespace llvm {
-class Module;
-
-class SyntheticCountsPropagation
- : public PassInfoMixin<SyntheticCountsPropagation> {
-public:
- PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
-};
-} // namespace llvm
-#endif
diff --git a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
index e9490ccba82157..bd232572dac86c 100644
--- a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
+++ b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
@@ -671,9 +671,9 @@ static void computeFunctionSummary(
if (auto *SSI = GetSSICallback(F))
ParamAccesses = SSI->getParamAccesses(Index);
auto FuncSummary = std::make_unique<FunctionSummary>(
- Flags, NumInsts, FunFlags, /*EntryCount=*/0, std::move(Refs),
- CallGraphEdges.takeVector(), TypeTests.takeVector(),
- TypeTestAssumeVCalls.takeVector(), TypeCheckedLoadVCalls.takeVector(),
+ Flags, NumInsts, FunFlags, std::move(Refs), CallGraphEdges.takeVector(),
+ TypeTests.takeVector(), TypeTestAssumeVCalls.takeVector(),
+ TypeCheckedLoadVCalls.takeVector(),
TypeTestAssumeConstVCalls.takeVector(),
TypeCheckedLoadConstVCalls.takeVector(), std::move(ParamAccesses),
std::move(Callsites), std::move(Allocs));
@@ -961,8 +961,7 @@ ModuleSummaryIndex llvm::buildModuleSummaryIndex(
/* MayThrow */ true,
/* HasUnknownCall */ true,
/* MustBeUnreachable */ false},
- /*EntryCount=*/0, ArrayRef<ValueInfo>{},
- ArrayRef<FunctionSummary::EdgeTy>{},
+ ArrayRef<ValueInfo>{}, ArrayRef<FunctionSummary::EdgeTy>{},
ArrayRef<GlobalValue::GUID>{},
ArrayRef<FunctionSummary::VFuncId>{},
ArrayRef<FunctionSummary::VFuncId>{},
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 93dc2bd241581b..4a3d052149a56e 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -9447,8 +9447,8 @@ bool LLParser::parseFunctionSummary(std::string Name, GlobalValue::GUID GUID,
return true;
auto FS = std::make_unique<FunctionSummary>(
- GVFlags, InstCount, FFlags, /*EntryCount=*/0, std::move(Refs),
- std::move(Calls), std::move(TypeIdInfo.TypeTests),
+ GVFlags, InstCount, FFlags, std::move(Refs), std::move(Calls),
+ std::move(TypeIdInfo.TypeTests),
std::move(TypeIdInfo.TypeTestAssumeVCalls),
std::move(TypeIdInfo.TypeCheckedLoadVCalls),
std::move(TypeIdInfo.TypeTestAssumeConstVCalls),
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 1cd9ec6b8fca20..2b53ee5698127b 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -7682,8 +7682,8 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
PendingAllocs.clear();
}
auto FS = std::make_unique<FunctionSummary>(
- Flags, InstCount, getDecodedFFlags(RawFunFlags), /*EntryCount=*/0,
- std::move(Refs), std::move(Calls), std::move(PendingTypeTests),
+ Flags, InstCount, getDecodedFFlags(RawFunFlags), std::move(Refs),
+ std::move(Calls), std::move(PendingTypeTests),
std::move(PendingTypeTestAssumeVCalls),
std::move(PendingTypeCheckedLoadVCalls),
std::move(PendingTypeTestAssumeConstVCalls),
@@ -7828,8 +7828,8 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
setSpecialRefs(Refs, NumRORefs, NumWORefs);
auto FS = std::make_unique<FunctionSummary>(
- Flags, InstCount, getDecodedFFlags(RawFunFlags), EntryCount,
- std::move(Refs), std::move(Edges), std::move(PendingTypeTests),
+ Flags, InstCount, getDecodedFFlags(RawFunFlags), std::move(Refs),
+ std::move(Edges), std::move(PendingTypeTests),
std::move(PendingTypeTestAssumeVCalls),
std::move(PendingTypeCheckedLoadVCalls),
std::move(PendingTypeTestAssumeConstVCalls),
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index 26fd02b3e1a043..9b630de2ef11e3 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -4736,7 +4736,8 @@ void IndexBitcodeWriter::writeCombinedGlobalValueSummary() {
getEncodedGVSummaryFlags(FS->flags(), shouldImportValueAsDecl(FS)));
NameVals.push_back(FS->instCount());
NameVals.push_back(getEncodedFFlags(FS->fflags()));
- NameVals.push_back(FS->entryCount());
+ // TODO: Stop writing entry count and bump bitcode version.
+ NameVals.push_back(0 /* EntryCount */);
// Fill in below
NameVals.push_back(0); // numrefs
diff --git a/llvm/lib/IR/ModuleSummaryIndex.cpp b/llvm/lib/IR/ModuleSummaryIndex.cpp
index 6713d32fb787ce..a788e63d95a117 100644
--- a/llvm/lib/IR/ModuleSummaryIndex.cpp
+++ b/llvm/lib/IR/ModuleSummaryIndex.cpp
@@ -91,12 +91,11 @@ constexpr uint64_t ModuleSummaryIndex::BitcodeSummaryVersion;
uint64_t ModuleSummaryIndex::getFlags() const {
uint64_t Flags = 0;
+ // Flags & 0x4 is reserved. DO NOT REUSE.
if (withGlobalValueDeadStripping())
Flags |= 0x1;
if (skipModuleByDistributedBackend())
Flags |= 0x2;
- if (hasSyntheticEntryCounts())
- Flags |= 0x4;
if (enableSplitLTOUnit())
Flags |= 0x8;
if (partiallySplitLTOUnits())
@@ -124,10 +123,7 @@ void ModuleSummaryIndex::setFlags(uint64_t Flags) {
// Set on combined index only.
if (Flags & 0x2)
setSkipModuleByDistributedBackend();
- // 1 bit: HasSyntheticEntryCounts flag.
- // Set on combined index only.
- if (Flags & 0x4)
- setHasSyntheticEntryCounts();
+ // Flags & 0x4 is reserved. DO NOT REUSE.
// 1 bit: DisableSplitLTOUnit flag.
// Set on per module indexes. It is up to the client to validate
// the consistency of this flag across modules being linked.
diff --git a/llvm/lib/LTO/CMakeLists.txt b/llvm/lib/LTO/CMakeLists.txt
index 9ba7698bc9954b..69ff08e1f374c4 100644
--- a/llvm/lib/LTO/CMakeLists.txt
+++ b/llvm/lib/LTO/CMakeLists.txt
@@ -3,7 +3,6 @@ add_llvm_component_library(LLVMLTO
LTOBackend.cpp
LTOModule.cpp
LTOCodeGenerator.cpp
- SummaryBasedOptimizations.cpp
UpdateCompilerUsed.cpp
ThinLTOCodeGenerator.cpp
diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp
index b1aa89ac978134..68072563cb33d6 100644
--- a/llvm/lib/LTO/LTO.cpp
+++ b/llvm/lib/LTO/LTO.cpp
@@ -32,7 +32,6 @@
#include "llvm/IR/Metadata.h"
#include "llvm/IR/RuntimeLibcalls.h"
#include "llvm/LTO/LTOBackend.h"
-#include "llvm/LTO/SummaryBasedOptimizations.h"
#include "llvm/Linker/IRMover.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/IRObjectFile.h"
@@ -1693,9 +1692,6 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
if (!ModuleToDefinedGVSummaries.count(Mod.first))
ModuleToDefinedGVSummaries.try_emplace(Mod.first);
- // Synthesize entry counts for functions in the CombinedIndex.
- computeSyntheticCounts(ThinLTO.CombinedIndex);
-
FunctionImporter::ImportListsTy ImportLists(ThinLTO.ModuleMap.size());
DenseMap<StringRef, FunctionImporter::ExportSetTy> ExportLists(
ThinLTO.ModuleMap.size());
diff --git a/llvm/lib/LTO/SummaryBasedOptimizations.cpp b/llvm/lib/LTO/SummaryBasedOptimizations.cpp
deleted file mode 100644
index bd3565771c293c..00000000000000
--- a/llvm/lib/LTO/SummaryBasedOptimizations.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-//==-SummaryBasedOptimizations.cpp - Optimizations based on ThinLTO summary-==//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements optimizations that are based on the module summaries.
-// These optimizations are performed during the thinlink phase of the
-// compilation.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/LTO/SummaryBasedOptimizations.h"
-#include "llvm/Analysis/SyntheticCountsUtils.h"
-#include "llvm/IR/ModuleSummaryIndex.h"
-#include "llvm/Support/CommandLine.h"
-
-using namespace llvm;
-
-static cl::opt<bool> ThinLTOSynthesizeEntryCounts(
- "thinlto-synthesize-entry-counts", cl::init(false), cl::Hidden,
- cl::desc("Synthesize entry counts based on the summary"));
-
-namespace llvm {
-extern cl::opt<int> InitialSyntheticCount;
-}
-
-static void initializeCounts(ModuleSummaryIndex &Index) {
- auto Root = Index.calculateCallGraphRoot();
- // Root is a fake node. All its successors are the actual roots of the
- // callgraph.
- // FIXME: This initializes the entry counts of only the root nodes. This makes
- // sense when compiling a binary with ThinLTO, but for libraries any of the
- // non-root nodes could be called from outside.
- for (auto &C : Root.calls()) {
- auto &V = C.first;
- for (auto &GVS : V.getSummaryList()) {
- auto S = GVS.get()->getBaseObject();
- auto *F = cast<FunctionSummary>(S);
- F->setEntryCount(InitialSyntheticCount);
- }
- }
-}
-
-void llvm::computeSyntheticCounts(ModuleSummaryIndex &Index) {
- if (!ThinLTOSynthesizeEntryCounts)
- return;
-
- using Scaled64 = ScaledNumber<uint64_t>;
- initializeCounts(Index);
- auto GetCallSiteRelFreq = [](FunctionSummary::EdgeTy &Edge) {
- return Scaled64(Edge.second.RelBlockFreq, -CalleeInfo::ScaleShift);
- };
- auto GetEntryCount = [](ValueInfo V) {
- if (V.getSummaryList().size()) {
- auto S = V.getSummaryList().front()->getBaseObject();
- auto *F = cast<FunctionSummary>(S);
- return F->entryCount();
- } else {
- return UINT64_C(0);
- }
- };
- auto AddToEntryCount = [](ValueInfo V, Scaled64 New) {
- if (!V.getSummaryList().size())
- return;
- for (auto &GVS : V.getSummaryList()) {
- auto S = GVS.get()->getBaseObject();
- auto *F = cast<FunctionSummary>(S);
- F->setEntryCount(
- SaturatingAdd(F->entryCount(), New.template toInt<uint64_t>()));
- }
- };
-
- auto GetProfileCount = [&](ValueInfo V, FunctionSummary::EdgeTy &Edge) {
- auto RelFreq = GetCallSiteRelFreq(Edge);
- Scaled64 EC(GetEntryCount(V), 0);
- return RelFreq * EC;
- };
- // After initializing the counts in initializeCounts above, the counts have to
- // be propagated across the combined callgraph.
- // SyntheticCountsUtils::propagate takes care of this propagation on any
- // callgraph that specialized GraphTraits.
- SyntheticCountsUtils<ModuleSummaryIndex *>::propagate(&Index, GetProfileCount,
- AddToEntryCount);
- Index.setHasSyntheticEntryCounts();
-}
diff --git a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
index 9d5a62fe10c8d7..7454b30bea2cb6 100644
--- a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
+++ b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
@@ -35,7 +35,6 @@
#include "llvm/IR/Verifier.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/LTO/LTO.h"
-#include "llvm/LTO/SummaryBasedOptimizations.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/IRObjectFile.h"
#include "llvm/Passes/PassBuilder.h"
@@ -1042,9 +1041,6 @@ void ThinLTOCodeGenerator::run() {
// Compute "dead" symbols, we don't want to import/export these!
computeDeadSymbolsInIndex(*Index, GUIDPreservedSymbols);
- // Synthesize entry counts for functions in the combined index.
- computeSyntheticCounts(*Index);
-
// Currently there is no support for enabling whole program visibility via a
// linker option in the old LTO API, but this call allows it to be specified
// via the internal option. Must be done before WPD below.
diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp
index 1fd7ef929c87d5..f344afc9b87922 100644
--- a/llvm/lib/Passes/PassBuilderPipelines.cpp
+++ b/llvm/lib/Passes/PassBuilderPipelines.cpp
@@ -154,11 +154,6 @@ static cl::opt<InliningAdvisorMode> UseInlineAdvisor(
clEnumValN(InliningAdvisorMode::Release, "release",
"Use release mode (AOT-compiled model)")));
-static cl::opt<bool> EnableSyntheticCounts(
- "enable-npm-synthetic-counts", cl::Hidden,
- cl::desc("Run synthetic function entry count generation "
- "pass"));
-
/// Flag to enable inline deferral during PGO.
static cl::...
[truncated]
|
@llvm/pr-subscribers-llvm-transforms Author: Mingming Liu (minglotus-6) ChangesThe primary motivation is to remove While I'm at it, this PR clean up {SummaryBasedOptimizations, SyntheticCountsPropagation} since they were not used and there are no plans to further invest on them. With this patch, bitcode writer writes a placeholder 0 at the byte offset of Patch is 37.45 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/107471.diff 26 Files Affected:
diff --git a/clang/docs/tools/clang-formatted-files.txt b/clang/docs/tools/clang-formatted-files.txt
index fc07357986d989..48ded9c7545547 100644
--- a/clang/docs/tools/clang-formatted-files.txt
+++ b/clang/docs/tools/clang-formatted-files.txt
@@ -5349,7 +5349,6 @@ llvm/include/llvm/IR/SSAContext.h
llvm/include/llvm/IR/StructuralHash.h
llvm/include/llvm/IR/TrackingMDRef.h
llvm/include/llvm/IR/UseListOrder.h
-llvm/include/llvm/LTO/SummaryBasedOptimizations.h
llvm/include/llvm/MC/MCAsmInfoCOFF.h
llvm/include/llvm/MC/MCAsmInfoDarwin.h
llvm/include/llvm/MC/MCAsmInfoELF.h
@@ -5586,7 +5585,6 @@ llvm/include/llvm/Transforms/IPO/SampleProfile.h
llvm/include/llvm/Transforms/IPO/SampleProfileProbe.h
llvm/include/llvm/Transforms/IPO/SCCP.h
llvm/include/llvm/Transforms/IPO/StripSymbols.h
-llvm/include/llvm/Transforms/IPO/SyntheticCountsPropagation.h
llvm/include/llvm/Transforms/IPO/ThinLTOBitcodeWriter.h
llvm/include/llvm/Transforms/IPO/WholeProgramDevirt.h
llvm/include/llvm/Transforms/Scalar/ADCE.h
@@ -6070,7 +6068,6 @@ llvm/lib/IR/SSAContext.cpp
llvm/lib/IR/Statepoint.cpp
llvm/lib/IR/StructuralHash.cpp
llvm/lib/IR/ValueSymbolTable.cpp
-llvm/lib/LTO/SummaryBasedOptimizations.cpp
llvm/lib/MC/MCAsmInfoCOFF.cpp
llvm/lib/MC/MCAsmInfoELF.cpp
llvm/lib/MC/MCAsmInfoGOFF.cpp
@@ -6861,7 +6858,6 @@ llvm/lib/Transforms/IPO/OpenMPOpt.cpp
llvm/lib/Transforms/IPO/SampleContextTracker.cpp
llvm/lib/Transforms/IPO/SampleProfileProbe.cpp
llvm/lib/Transforms/IPO/StripDeadPrototypes.cpp
-llvm/lib/Transforms/IPO/SyntheticCountsPropagation.cpp
llvm/lib/Transforms/ObjCARC/BlotMapVector.h
llvm/lib/Transforms/ObjCARC/ObjCARCExpand.cpp
llvm/lib/Transforms/ObjCARC/ProvenanceAnalysis.h
diff --git a/llvm/include/llvm/IR/ModuleSummaryIndex.h b/llvm/include/llvm/IR/ModuleSummaryIndex.h
index 6d39150a03bfd5..eae04f4eadcccd 100644
--- a/llvm/include/llvm/IR/ModuleSummaryIndex.h
+++ b/llvm/include/llvm/IR/ModuleSummaryIndex.h
@@ -856,9 +856,8 @@ class FunctionSummary : public GlobalValueSummary {
GlobalValue::DefaultVisibility,
/*NotEligibleToImport=*/true, /*Live=*/true, /*IsLocal=*/false,
/*CanAutoHide=*/false, GlobalValueSummary::ImportKind::Definition),
- /*NumInsts=*/0, FunctionSummary::FFlags{}, /*EntryCount=*/0,
- std::vector<ValueInfo>(), std::move(Edges),
- std::vector<GlobalValue::GUID>(),
+ /*NumInsts=*/0, FunctionSummary::FFlags{}, std::vector<ValueInfo>(),
+ std::move(Edges), std::vector<GlobalValue::GUID>(),
std::vector<FunctionSummary::VFuncId>(),
std::vector<FunctionSummary::VFuncId>(),
std::vector<FunctionSummary::ConstVCall>(),
@@ -878,11 +877,6 @@ class FunctionSummary : public GlobalValueSummary {
/// Function summary specific flags.
FFlags FunFlags;
- /// The synthesized entry count of the function.
- /// This is only populated during ThinLink phase and remains unused while
- /// generating per-module summaries.
- uint64_t EntryCount = 0;
-
/// List of <CalleeValueInfo, CalleeInfo> call edge pairs from this function.
std::vector<EdgeTy> CallGraphEdgeList;
@@ -913,8 +907,7 @@ class FunctionSummary : public GlobalValueSummary {
public:
FunctionSummary(GVFlags Flags, unsigned NumInsts, FFlags FunFlags,
- uint64_t EntryCount, std::vector<ValueInfo> Refs,
- std::vector<EdgeTy> CGEdges,
+ std::vector<ValueInfo> Refs, std::vector<EdgeTy> CGEdges,
std::vector<GlobalValue::GUID> TypeTests,
std::vector<VFuncId> TypeTestAssumeVCalls,
std::vector<VFuncId> TypeCheckedLoadVCalls,
@@ -923,7 +916,7 @@ class FunctionSummary : public GlobalValueSummary {
std::vector<ParamAccess> Params, CallsitesTy CallsiteList,
AllocsTy AllocList)
: GlobalValueSummary(FunctionKind, Flags, std::move(Refs)),
- InstCount(NumInsts), FunFlags(FunFlags), EntryCount(EntryCount),
+ InstCount(NumInsts), FunFlags(FunFlags),
CallGraphEdgeList(std::move(CGEdges)) {
if (!TypeTests.empty() || !TypeTestAssumeVCalls.empty() ||
!TypeCheckedLoadVCalls.empty() || !TypeTestAssumeConstVCalls.empty() ||
@@ -958,12 +951,6 @@ class FunctionSummary : public GlobalValueSummary {
/// Get the instruction count recorded for this function.
unsigned instCount() const { return InstCount; }
- /// Get the synthetic entry count for this function.
- uint64_t entryCount() const { return EntryCount; }
-
- /// Set the synthetic entry count for this function.
- void setEntryCount(uint64_t EC) { EntryCount = EC; }
-
/// Return the list of <CalleeValueInfo, CalleeInfo> pairs.
ArrayRef<EdgeTy> calls() const { return CallGraphEdgeList; }
@@ -1585,9 +1572,6 @@ class ModuleSummaryIndex {
return WithAttributePropagation && GVS->maybeWriteOnly();
}
- bool hasSyntheticEntryCounts() const { return HasSyntheticEntryCounts; }
- void setHasSyntheticEntryCounts() { HasSyntheticEntryCounts = true; }
-
bool withSupportsHotColdNew() const { return WithSupportsHotColdNew; }
void setWithSupportsHotColdNew() { WithSupportsHotColdNew = true; }
diff --git a/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h b/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
index 6cc533f043a517..3ce929afdb1ea6 100644
--- a/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
+++ b/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h
@@ -229,7 +229,7 @@ template <> struct CustomMappingTraits<GlobalValueSummaryMapTy> {
FSum.NotEligibleToImport, FSum.Live, FSum.IsLocal,
FSum.CanAutoHide,
static_cast<GlobalValueSummary::ImportKind>(FSum.ImportType)),
- /*NumInsts=*/0, FunctionSummary::FFlags{}, /*EntryCount=*/0, Refs,
+ /*NumInsts=*/0, FunctionSummary::FFlags{}, Refs,
ArrayRef<FunctionSummary::EdgeTy>{}, std::move(FSum.TypeTests),
std::move(FSum.TypeTestAssumeVCalls),
std::move(FSum.TypeCheckedLoadVCalls),
diff --git a/llvm/include/llvm/LTO/SummaryBasedOptimizations.h b/llvm/include/llvm/LTO/SummaryBasedOptimizations.h
deleted file mode 100644
index 508ab2587ac56a..00000000000000
--- a/llvm/include/llvm/LTO/SummaryBasedOptimizations.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//=- llvm/LTO/SummaryBasedOptimizations.h -Link time optimizations-*- C++ -*-=//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LTO_SUMMARYBASEDOPTIMIZATIONS_H
-#define LLVM_LTO_SUMMARYBASEDOPTIMIZATIONS_H
-namespace llvm {
-class ModuleSummaryIndex;
-
-/// Compute synthetic function entry counts.
-void computeSyntheticCounts(ModuleSummaryIndex &Index);
-
-} // namespace llvm
-#endif
diff --git a/llvm/include/llvm/Transforms/IPO/SyntheticCountsPropagation.h b/llvm/include/llvm/Transforms/IPO/SyntheticCountsPropagation.h
deleted file mode 100644
index 5338ac9b0ebc57..00000000000000
--- a/llvm/include/llvm/Transforms/IPO/SyntheticCountsPropagation.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//=- SyntheticCountsPropagation.h - Propagate function counts -----*- C++ -*-=//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TRANSFORMS_IPO_SYNTHETICCOUNTSPROPAGATION_H
-#define LLVM_TRANSFORMS_IPO_SYNTHETICCOUNTSPROPAGATION_H
-
-#include "llvm/IR/PassManager.h"
-
-namespace llvm {
-class Module;
-
-class SyntheticCountsPropagation
- : public PassInfoMixin<SyntheticCountsPropagation> {
-public:
- PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
-};
-} // namespace llvm
-#endif
diff --git a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
index e9490ccba82157..bd232572dac86c 100644
--- a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
+++ b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
@@ -671,9 +671,9 @@ static void computeFunctionSummary(
if (auto *SSI = GetSSICallback(F))
ParamAccesses = SSI->getParamAccesses(Index);
auto FuncSummary = std::make_unique<FunctionSummary>(
- Flags, NumInsts, FunFlags, /*EntryCount=*/0, std::move(Refs),
- CallGraphEdges.takeVector(), TypeTests.takeVector(),
- TypeTestAssumeVCalls.takeVector(), TypeCheckedLoadVCalls.takeVector(),
+ Flags, NumInsts, FunFlags, std::move(Refs), CallGraphEdges.takeVector(),
+ TypeTests.takeVector(), TypeTestAssumeVCalls.takeVector(),
+ TypeCheckedLoadVCalls.takeVector(),
TypeTestAssumeConstVCalls.takeVector(),
TypeCheckedLoadConstVCalls.takeVector(), std::move(ParamAccesses),
std::move(Callsites), std::move(Allocs));
@@ -961,8 +961,7 @@ ModuleSummaryIndex llvm::buildModuleSummaryIndex(
/* MayThrow */ true,
/* HasUnknownCall */ true,
/* MustBeUnreachable */ false},
- /*EntryCount=*/0, ArrayRef<ValueInfo>{},
- ArrayRef<FunctionSummary::EdgeTy>{},
+ ArrayRef<ValueInfo>{}, ArrayRef<FunctionSummary::EdgeTy>{},
ArrayRef<GlobalValue::GUID>{},
ArrayRef<FunctionSummary::VFuncId>{},
ArrayRef<FunctionSummary::VFuncId>{},
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 93dc2bd241581b..4a3d052149a56e 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -9447,8 +9447,8 @@ bool LLParser::parseFunctionSummary(std::string Name, GlobalValue::GUID GUID,
return true;
auto FS = std::make_unique<FunctionSummary>(
- GVFlags, InstCount, FFlags, /*EntryCount=*/0, std::move(Refs),
- std::move(Calls), std::move(TypeIdInfo.TypeTests),
+ GVFlags, InstCount, FFlags, std::move(Refs), std::move(Calls),
+ std::move(TypeIdInfo.TypeTests),
std::move(TypeIdInfo.TypeTestAssumeVCalls),
std::move(TypeIdInfo.TypeCheckedLoadVCalls),
std::move(TypeIdInfo.TypeTestAssumeConstVCalls),
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 1cd9ec6b8fca20..2b53ee5698127b 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -7682,8 +7682,8 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
PendingAllocs.clear();
}
auto FS = std::make_unique<FunctionSummary>(
- Flags, InstCount, getDecodedFFlags(RawFunFlags), /*EntryCount=*/0,
- std::move(Refs), std::move(Calls), std::move(PendingTypeTests),
+ Flags, InstCount, getDecodedFFlags(RawFunFlags), std::move(Refs),
+ std::move(Calls), std::move(PendingTypeTests),
std::move(PendingTypeTestAssumeVCalls),
std::move(PendingTypeCheckedLoadVCalls),
std::move(PendingTypeTestAssumeConstVCalls),
@@ -7828,8 +7828,8 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary(unsigned ID) {
ValueInfo VI = std::get<0>(getValueInfoFromValueId(ValueID));
setSpecialRefs(Refs, NumRORefs, NumWORefs);
auto FS = std::make_unique<FunctionSummary>(
- Flags, InstCount, getDecodedFFlags(RawFunFlags), EntryCount,
- std::move(Refs), std::move(Edges), std::move(PendingTypeTests),
+ Flags, InstCount, getDecodedFFlags(RawFunFlags), std::move(Refs),
+ std::move(Edges), std::move(PendingTypeTests),
std::move(PendingTypeTestAssumeVCalls),
std::move(PendingTypeCheckedLoadVCalls),
std::move(PendingTypeTestAssumeConstVCalls),
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index 26fd02b3e1a043..9b630de2ef11e3 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -4736,7 +4736,8 @@ void IndexBitcodeWriter::writeCombinedGlobalValueSummary() {
getEncodedGVSummaryFlags(FS->flags(), shouldImportValueAsDecl(FS)));
NameVals.push_back(FS->instCount());
NameVals.push_back(getEncodedFFlags(FS->fflags()));
- NameVals.push_back(FS->entryCount());
+ // TODO: Stop writing entry count and bump bitcode version.
+ NameVals.push_back(0 /* EntryCount */);
// Fill in below
NameVals.push_back(0); // numrefs
diff --git a/llvm/lib/IR/ModuleSummaryIndex.cpp b/llvm/lib/IR/ModuleSummaryIndex.cpp
index 6713d32fb787ce..a788e63d95a117 100644
--- a/llvm/lib/IR/ModuleSummaryIndex.cpp
+++ b/llvm/lib/IR/ModuleSummaryIndex.cpp
@@ -91,12 +91,11 @@ constexpr uint64_t ModuleSummaryIndex::BitcodeSummaryVersion;
uint64_t ModuleSummaryIndex::getFlags() const {
uint64_t Flags = 0;
+ // Flags & 0x4 is reserved. DO NOT REUSE.
if (withGlobalValueDeadStripping())
Flags |= 0x1;
if (skipModuleByDistributedBackend())
Flags |= 0x2;
- if (hasSyntheticEntryCounts())
- Flags |= 0x4;
if (enableSplitLTOUnit())
Flags |= 0x8;
if (partiallySplitLTOUnits())
@@ -124,10 +123,7 @@ void ModuleSummaryIndex::setFlags(uint64_t Flags) {
// Set on combined index only.
if (Flags & 0x2)
setSkipModuleByDistributedBackend();
- // 1 bit: HasSyntheticEntryCounts flag.
- // Set on combined index only.
- if (Flags & 0x4)
- setHasSyntheticEntryCounts();
+ // Flags & 0x4 is reserved. DO NOT REUSE.
// 1 bit: DisableSplitLTOUnit flag.
// Set on per module indexes. It is up to the client to validate
// the consistency of this flag across modules being linked.
diff --git a/llvm/lib/LTO/CMakeLists.txt b/llvm/lib/LTO/CMakeLists.txt
index 9ba7698bc9954b..69ff08e1f374c4 100644
--- a/llvm/lib/LTO/CMakeLists.txt
+++ b/llvm/lib/LTO/CMakeLists.txt
@@ -3,7 +3,6 @@ add_llvm_component_library(LLVMLTO
LTOBackend.cpp
LTOModule.cpp
LTOCodeGenerator.cpp
- SummaryBasedOptimizations.cpp
UpdateCompilerUsed.cpp
ThinLTOCodeGenerator.cpp
diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp
index b1aa89ac978134..68072563cb33d6 100644
--- a/llvm/lib/LTO/LTO.cpp
+++ b/llvm/lib/LTO/LTO.cpp
@@ -32,7 +32,6 @@
#include "llvm/IR/Metadata.h"
#include "llvm/IR/RuntimeLibcalls.h"
#include "llvm/LTO/LTOBackend.h"
-#include "llvm/LTO/SummaryBasedOptimizations.h"
#include "llvm/Linker/IRMover.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/IRObjectFile.h"
@@ -1693,9 +1692,6 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
if (!ModuleToDefinedGVSummaries.count(Mod.first))
ModuleToDefinedGVSummaries.try_emplace(Mod.first);
- // Synthesize entry counts for functions in the CombinedIndex.
- computeSyntheticCounts(ThinLTO.CombinedIndex);
-
FunctionImporter::ImportListsTy ImportLists(ThinLTO.ModuleMap.size());
DenseMap<StringRef, FunctionImporter::ExportSetTy> ExportLists(
ThinLTO.ModuleMap.size());
diff --git a/llvm/lib/LTO/SummaryBasedOptimizations.cpp b/llvm/lib/LTO/SummaryBasedOptimizations.cpp
deleted file mode 100644
index bd3565771c293c..00000000000000
--- a/llvm/lib/LTO/SummaryBasedOptimizations.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-//==-SummaryBasedOptimizations.cpp - Optimizations based on ThinLTO summary-==//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements optimizations that are based on the module summaries.
-// These optimizations are performed during the thinlink phase of the
-// compilation.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/LTO/SummaryBasedOptimizations.h"
-#include "llvm/Analysis/SyntheticCountsUtils.h"
-#include "llvm/IR/ModuleSummaryIndex.h"
-#include "llvm/Support/CommandLine.h"
-
-using namespace llvm;
-
-static cl::opt<bool> ThinLTOSynthesizeEntryCounts(
- "thinlto-synthesize-entry-counts", cl::init(false), cl::Hidden,
- cl::desc("Synthesize entry counts based on the summary"));
-
-namespace llvm {
-extern cl::opt<int> InitialSyntheticCount;
-}
-
-static void initializeCounts(ModuleSummaryIndex &Index) {
- auto Root = Index.calculateCallGraphRoot();
- // Root is a fake node. All its successors are the actual roots of the
- // callgraph.
- // FIXME: This initializes the entry counts of only the root nodes. This makes
- // sense when compiling a binary with ThinLTO, but for libraries any of the
- // non-root nodes could be called from outside.
- for (auto &C : Root.calls()) {
- auto &V = C.first;
- for (auto &GVS : V.getSummaryList()) {
- auto S = GVS.get()->getBaseObject();
- auto *F = cast<FunctionSummary>(S);
- F->setEntryCount(InitialSyntheticCount);
- }
- }
-}
-
-void llvm::computeSyntheticCounts(ModuleSummaryIndex &Index) {
- if (!ThinLTOSynthesizeEntryCounts)
- return;
-
- using Scaled64 = ScaledNumber<uint64_t>;
- initializeCounts(Index);
- auto GetCallSiteRelFreq = [](FunctionSummary::EdgeTy &Edge) {
- return Scaled64(Edge.second.RelBlockFreq, -CalleeInfo::ScaleShift);
- };
- auto GetEntryCount = [](ValueInfo V) {
- if (V.getSummaryList().size()) {
- auto S = V.getSummaryList().front()->getBaseObject();
- auto *F = cast<FunctionSummary>(S);
- return F->entryCount();
- } else {
- return UINT64_C(0);
- }
- };
- auto AddToEntryCount = [](ValueInfo V, Scaled64 New) {
- if (!V.getSummaryList().size())
- return;
- for (auto &GVS : V.getSummaryList()) {
- auto S = GVS.get()->getBaseObject();
- auto *F = cast<FunctionSummary>(S);
- F->setEntryCount(
- SaturatingAdd(F->entryCount(), New.template toInt<uint64_t>()));
- }
- };
-
- auto GetProfileCount = [&](ValueInfo V, FunctionSummary::EdgeTy &Edge) {
- auto RelFreq = GetCallSiteRelFreq(Edge);
- Scaled64 EC(GetEntryCount(V), 0);
- return RelFreq * EC;
- };
- // After initializing the counts in initializeCounts above, the counts have to
- // be propagated across the combined callgraph.
- // SyntheticCountsUtils::propagate takes care of this propagation on any
- // callgraph that specialized GraphTraits.
- SyntheticCountsUtils<ModuleSummaryIndex *>::propagate(&Index, GetProfileCount,
- AddToEntryCount);
- Index.setHasSyntheticEntryCounts();
-}
diff --git a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
index 9d5a62fe10c8d7..7454b30bea2cb6 100644
--- a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
+++ b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
@@ -35,7 +35,6 @@
#include "llvm/IR/Verifier.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/LTO/LTO.h"
-#include "llvm/LTO/SummaryBasedOptimizations.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/IRObjectFile.h"
#include "llvm/Passes/PassBuilder.h"
@@ -1042,9 +1041,6 @@ void ThinLTOCodeGenerator::run() {
// Compute "dead" symbols, we don't want to import/export these!
computeDeadSymbolsInIndex(*Index, GUIDPreservedSymbols);
- // Synthesize entry counts for functions in the combined index.
- computeSyntheticCounts(*Index);
-
// Currently there is no support for enabling whole program visibility via a
// linker option in the old LTO API, but this call allows it to be specified
// via the internal option. Must be done before WPD below.
diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp
index 1fd7ef929c87d5..f344afc9b87922 100644
--- a/llvm/lib/Passes/PassBuilderPipelines.cpp
+++ b/llvm/lib/Passes/PassBuilderPipelines.cpp
@@ -154,11 +154,6 @@ static cl::opt<InliningAdvisorMode> UseInlineAdvisor(
clEnumValN(InliningAdvisorMode::Release, "release",
"Use release mode (AOT-compiled model)")));
-static cl::opt<bool> EnableSyntheticCounts(
- "enable-npm-synthetic-counts", cl::Hidden,
- cl::desc("Run synthetic function entry count generation "
- "pass"));
-
/// Flag to enable inline deferral during PGO.
static cl::...
[truncated]
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the cleanup.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thanks!
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/168/builds/3029 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/51/builds/3481 Here is the relevant piece of the build log for the reference
|
The unused variable error is fixed in a7f152f |
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/186/builds/2103 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/72/builds/3042 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/145/builds/1671 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/146/builds/1093 Here is the relevant piece of the build log for the reference
|
The primary motivation is to remove
EntryCount
fromFunctionSummary
. This frees 8 bytes out ofsizeof(FunctionSummary)
(136 bytes as of 64498c5).While I'm at it, this PR clean up {SummaryBasedOptimizations, SyntheticCountsPropagation} since they were not used and there are no plans to further invest on them.
With this patch, bitcode writer writes a placeholder 0 at the byte offset of
EntryCount
and bitcode reader can parse the function entry count at the correct byte offset. Added a TODO to stop writingEntryCount
and bump bitcode version