Skip to content

Commit 7cefdb8

Browse files
author
Easwaran Raman
committedMay 19, 2016
Remove specializations of ProfileSummary
This removes the subclasses of ProfileSummary, moves the members of the derived classes to the base class. Differential Revision: http://reviews.llvm.org/D20390 llvm-svn: 270143
1 parent 476c0af commit 7cefdb8

14 files changed

+94
-213
lines changed
 

‎llvm/include/llvm/IR/ProfileSummary.h

+12-57
Original file line numberDiff line numberDiff line change
@@ -50,79 +50,34 @@ class ProfileSummary {
5050
private:
5151
const Kind PSK;
5252
static const char *KindStr[2];
53-
54-
protected:
5553
SummaryEntryVector DetailedSummary;
56-
uint64_t TotalCount, MaxCount, MaxFunctionCount;
54+
uint64_t TotalCount, MaxCount, MaxInternalCount, MaxFunctionCount;
5755
uint32_t NumCounts, NumFunctions;
58-
ProfileSummary(Kind K, SummaryEntryVector DetailedSummary,
59-
uint64_t TotalCount, uint64_t MaxCount,
60-
uint64_t MaxFunctionCount, uint32_t NumCounts,
61-
uint32_t NumFunctions)
62-
: PSK(K), DetailedSummary(DetailedSummary), TotalCount(TotalCount),
63-
MaxCount(MaxCount), MaxFunctionCount(MaxFunctionCount),
64-
NumCounts(NumCounts), NumFunctions(NumFunctions) {}
65-
~ProfileSummary() = default;
66-
/// \brief Return metadata specific to the profile format.
67-
/// Derived classes implement this method to return a vector of Metadata.
68-
virtual std::vector<Metadata *> getFormatSpecificMD(LLVMContext &Context) = 0;
6956
/// \brief Return detailed summary as metadata.
7057
Metadata *getDetailedSummaryMD(LLVMContext &Context);
7158

7259
public:
7360
static const int Scale = 1000000;
61+
ProfileSummary(Kind K, SummaryEntryVector DetailedSummary,
62+
uint64_t TotalCount, uint64_t MaxCount,
63+
uint64_t MaxInternalCount, uint64_t MaxFunctionCount,
64+
uint32_t NumCounts, uint32_t NumFunctions)
65+
: PSK(K), DetailedSummary(DetailedSummary), TotalCount(TotalCount),
66+
MaxCount(MaxCount), MaxInternalCount(MaxInternalCount),
67+
MaxFunctionCount(MaxFunctionCount), NumCounts(NumCounts),
68+
NumFunctions(NumFunctions) {}
7469
Kind getKind() const { return PSK; }
75-
const char *getKindStr() const { return KindStr[PSK]; }
7670
/// \brief Return summary information as metadata.
7771
Metadata *getMD(LLVMContext &Context);
7872
/// \brief Construct profile summary from metdata.
7973
static ProfileSummary *getFromMD(Metadata *MD);
8074
SummaryEntryVector &getDetailedSummary() { return DetailedSummary; }
8175
uint32_t getNumFunctions() { return NumFunctions; }
8276
uint64_t getMaxFunctionCount() { return MaxFunctionCount; }
83-
};
84-
85-
class InstrProfSummary final : public ProfileSummary {
86-
uint64_t MaxInternalBlockCount;
87-
88-
protected:
89-
std::vector<Metadata *> getFormatSpecificMD(LLVMContext &Context) override;
90-
91-
public:
92-
InstrProfSummary(uint64_t TotalCount, uint64_t MaxBlockCount,
93-
uint64_t MaxInternalBlockCount, uint64_t MaxFunctionCount,
94-
uint32_t NumBlocks, uint32_t NumFunctions,
95-
SummaryEntryVector Summary)
96-
: ProfileSummary(PSK_Instr, Summary, TotalCount, MaxBlockCount,
97-
MaxFunctionCount, NumBlocks, NumFunctions),
98-
MaxInternalBlockCount(MaxInternalBlockCount) {}
99-
static bool classof(const ProfileSummary *PS) {
100-
return PS->getKind() == PSK_Instr;
101-
}
102-
uint32_t getNumBlocks() { return NumCounts; }
77+
uint32_t getNumCounts() { return NumCounts; }
10378
uint64_t getTotalCount() { return TotalCount; }
104-
uint64_t getMaxBlockCount() { return MaxCount; }
105-
uint64_t getMaxInternalBlockCount() { return MaxInternalBlockCount; }
106-
};
107-
108-
class SampleProfileSummary final : public ProfileSummary {
109-
protected:
110-
std::vector<Metadata *> getFormatSpecificMD(LLVMContext &Context) override;
111-
112-
public:
113-
uint32_t getNumLinesWithSamples() { return NumCounts; }
114-
uint64_t getTotalSamples() { return TotalCount; }
115-
uint64_t getMaxSamplesPerLine() { return MaxCount; }
116-
SampleProfileSummary(uint64_t TotalSamples, uint64_t MaxSamplesPerLine,
117-
uint64_t MaxFunctionCount, int32_t NumLinesWithSamples,
118-
uint32_t NumFunctions,
119-
SummaryEntryVector DetailedSummary)
120-
: ProfileSummary(PSK_Sample, DetailedSummary, TotalSamples,
121-
MaxSamplesPerLine, MaxFunctionCount, NumLinesWithSamples,
122-
NumFunctions) {}
123-
static bool classof(const ProfileSummary *PS) {
124-
return PS->getKind() == PSK_Sample;
125-
}
79+
uint64_t getMaxCount() { return MaxCount; }
80+
uint64_t getMaxInternalCount() { return MaxInternalCount; }
12681
};
12782

12883
} // end namespace llvm

‎llvm/include/llvm/ProfileData/InstrProfReader.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ class IndexedInstrProfReader : public InstrProfReader {
364364
/// The index into the profile data.
365365
std::unique_ptr<InstrProfReaderIndexBase> Index;
366366
/// Profile summary data.
367-
std::unique_ptr<InstrProfSummary> Summary;
367+
std::unique_ptr<ProfileSummary> Summary;
368368

369369
IndexedInstrProfReader(const IndexedInstrProfReader &) = delete;
370370
IndexedInstrProfReader &operator=(const IndexedInstrProfReader &) = delete;
@@ -417,7 +417,7 @@ class IndexedInstrProfReader : public InstrProfReader {
417417
// to be used by llvm-profdata (for dumping). Avoid using this when
418418
// the client is the compiler.
419419
InstrProfSymtab &getSymtab() override;
420-
InstrProfSummary &getSummary() { return *(Summary.get()); }
420+
ProfileSummary &getSummary() { return *(Summary.get()); }
421421
};
422422

423423
} // end namespace llvm

‎llvm/include/llvm/ProfileData/ProfileCommon.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class InstrProfSummaryBuilder final : public ProfileSummaryBuilder {
7474
InstrProfSummaryBuilder(std::vector<uint32_t> Cutoffs)
7575
: ProfileSummaryBuilder(Cutoffs), MaxInternalBlockCount(0) {}
7676
void addRecord(const InstrProfRecord &);
77-
InstrProfSummary *getSummary();
77+
ProfileSummary *getSummary();
7878
};
7979

8080
class SampleProfileSummaryBuilder final : public ProfileSummaryBuilder {
@@ -83,7 +83,7 @@ class SampleProfileSummaryBuilder final : public ProfileSummaryBuilder {
8383
void addRecord(const sampleprof::FunctionSamples &FS);
8484
SampleProfileSummaryBuilder(std::vector<uint32_t> Cutoffs)
8585
: ProfileSummaryBuilder(Cutoffs) {}
86-
SampleProfileSummary *getSummary();
86+
ProfileSummary *getSummary();
8787
};
8888

8989
// This is called when a count is seen in the profile.

‎llvm/include/llvm/ProfileData/SampleProfReader.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ class SampleProfileReader {
296296
create(std::unique_ptr<MemoryBuffer> &B, LLVMContext &C);
297297

298298
/// \brief Return the profile summary.
299-
SampleProfileSummary &getSummary() { return *(Summary.get()); }
299+
ProfileSummary &getSummary() { return *(Summary.get()); }
300300

301301
protected:
302302
/// \brief Map every function to its associated profile.
@@ -313,7 +313,7 @@ class SampleProfileReader {
313313
std::unique_ptr<MemoryBuffer> Buffer;
314314

315315
/// \brief Profile summary information.
316-
std::unique_ptr<SampleProfileSummary> Summary;
316+
std::unique_ptr<ProfileSummary> Summary;
317317

318318
/// \brief Compute summary for this profile.
319319
void computeSummary();

‎llvm/include/llvm/ProfileData/SampleProfWriter.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class SampleProfileWriter {
7676
std::unique_ptr<raw_ostream> OutputStream;
7777

7878
/// \brief Profile summary.
79-
std::unique_ptr<SampleProfileSummary> Summary;
79+
std::unique_ptr<ProfileSummary> Summary;
8080

8181
/// \brief Compute summary for this profile.
8282
void computeSummary(const StringMap<FunctionSamples> &ProfileMap);

‎llvm/lib/IR/ProfileSummary.cpp

+30-98
Original file line numberDiff line numberDiff line change
@@ -70,50 +70,18 @@ Metadata *ProfileSummary::getDetailedSummaryMD(LLVMContext &Context) {
7070
// to the kind of profile summary as returned by getFormatSpecificMD.
7171
Metadata *ProfileSummary::getMD(LLVMContext &Context) {
7272
std::vector<Metadata *> Components;
73-
Components.push_back(getKeyValMD(Context, "ProfileFormat", getKindStr()));
74-
std::vector<Metadata *> Res = getFormatSpecificMD(Context);
75-
Components.insert(Components.end(), Res.begin(), Res.end());
76-
return MDTuple::get(Context, Components);
77-
}
78-
79-
// Returns a vector of MDTuples specific to InstrProfSummary. The first six
80-
// elements of this vector are (Key, Val) pairs of the six scalar fields of
81-
// InstrProfSummary (TotalCount, MaxBlockCount, MaxInternalBlockCount,
82-
// MaxFunctionCount, NumBlocks, NumFunctions). The last element of this vector
83-
// is an MDTuple returned by getDetailedSummaryMD.
84-
std::vector<Metadata *>
85-
InstrProfSummary::getFormatSpecificMD(LLVMContext &Context) {
86-
std::vector<Metadata *> Components;
73+
Components.push_back(getKeyValMD(Context, "ProfileFormat", KindStr[PSK]));
8774

8875
Components.push_back(getKeyValMD(Context, "TotalCount", getTotalCount()));
76+
Components.push_back(getKeyValMD(Context, "MaxCount", getMaxCount()));
8977
Components.push_back(
90-
getKeyValMD(Context, "MaxBlockCount", getMaxBlockCount()));
91-
Components.push_back(getKeyValMD(Context, "MaxInternalBlockCount",
92-
getMaxInternalBlockCount()));
78+
getKeyValMD(Context, "MaxInternalCount", getMaxInternalCount()));
9379
Components.push_back(
9480
getKeyValMD(Context, "MaxFunctionCount", getMaxFunctionCount()));
95-
Components.push_back(getKeyValMD(Context, "NumBlocks", getNumBlocks()));
81+
Components.push_back(getKeyValMD(Context, "NumCounts", getNumCounts()));
9682
Components.push_back(getKeyValMD(Context, "NumFunctions", getNumFunctions()));
97-
98-
Components.push_back(getDetailedSummaryMD(Context));
99-
return Components;
100-
}
101-
102-
std::vector<Metadata *>
103-
SampleProfileSummary::getFormatSpecificMD(LLVMContext &Context) {
104-
std::vector<Metadata *> Components;
105-
106-
Components.push_back(getKeyValMD(Context, "TotalSamples", getTotalSamples()));
107-
Components.push_back(
108-
getKeyValMD(Context, "MaxSamplesPerLine", getMaxSamplesPerLine()));
109-
Components.push_back(
110-
getKeyValMD(Context, "MaxFunctionCount", getMaxFunctionCount()));
111-
Components.push_back(
112-
getKeyValMD(Context, "NumLinesWithSamples", getNumLinesWithSamples()));
113-
Components.push_back(getKeyValMD(Context, "NumFunctions", NumFunctions));
114-
11583
Components.push_back(getDetailedSummaryMD(Context));
116-
return Components;
84+
return MDTuple::get(Context, Components);
11785
}
11886

11987
// Parse an MDTuple representing (Key, Val) pair.
@@ -175,83 +143,47 @@ static bool getSummaryFromMD(MDTuple *MD, SummaryEntryVector &Summary) {
175143
return true;
176144
}
177145

178-
// Parse an MDTuple representing an InstrProfSummary object.
179-
static ProfileSummary *getInstrProfSummaryFromMD(MDTuple *Tuple) {
180-
uint64_t NumBlocks, TotalCount, NumFunctions, MaxFunctionCount, MaxBlockCount,
181-
MaxInternalBlockCount;
182-
SummaryEntryVector Summary;
183-
146+
ProfileSummary *ProfileSummary::getFromMD(Metadata *MD) {
147+
if (!isa<MDTuple>(MD))
148+
return nullptr;
149+
MDTuple *Tuple = cast<MDTuple>(MD);
184150
if (Tuple->getNumOperands() != 8)
185151
return nullptr;
186152

187-
// Skip operand 0 which has been already parsed in the caller
153+
auto &FormatMD = Tuple->getOperand(0);
154+
ProfileSummary::Kind SummaryKind;
155+
if (isKeyValuePair(dyn_cast_or_null<MDTuple>(FormatMD), "ProfileFormat",
156+
"SampleProfile"))
157+
SummaryKind = PSK_Sample;
158+
else if (isKeyValuePair(dyn_cast_or_null<MDTuple>(FormatMD), "ProfileFormat",
159+
"InstrProf"))
160+
SummaryKind = PSK_Instr;
161+
else
162+
return nullptr;
163+
164+
uint64_t NumCounts, TotalCount, NumFunctions, MaxFunctionCount, MaxCount,
165+
MaxInternalCount;
188166
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(1)), "TotalCount",
189167
TotalCount))
190168
return nullptr;
191-
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(2)), "MaxBlockCount",
192-
MaxBlockCount))
169+
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(2)), "MaxCount", MaxCount))
193170
return nullptr;
194-
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(3)), "MaxInternalBlockCount",
195-
MaxInternalBlockCount))
171+
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(3)), "MaxInternalCount",
172+
MaxInternalCount))
196173
return nullptr;
197174
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(4)), "MaxFunctionCount",
198175
MaxFunctionCount))
199176
return nullptr;
200-
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(5)), "NumBlocks", NumBlocks))
177+
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(5)), "NumCounts", NumCounts))
201178
return nullptr;
202179
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(6)), "NumFunctions",
203180
NumFunctions))
204181
return nullptr;
205-
if (!getSummaryFromMD(dyn_cast<MDTuple>(Tuple->getOperand(7)), Summary))
206-
return nullptr;
207-
return new InstrProfSummary(TotalCount, MaxBlockCount, MaxInternalBlockCount,
208-
MaxFunctionCount, NumBlocks, NumFunctions,
209-
Summary);
210-
}
211182

212-
// Parse an MDTuple representing a SampleProfileSummary object.
213-
static ProfileSummary *getSampleProfileSummaryFromMD(MDTuple *Tuple) {
214-
uint64_t TotalSamples, MaxSamplesPerLine, MaxFunctionCount,
215-
NumLinesWithSamples, NumFunctions;
216183
SummaryEntryVector Summary;
217-
218-
if (Tuple->getNumOperands() != 7)
219-
return nullptr;
220-
221-
// Skip operand 0 which has been already parsed in the caller
222-
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(1)), "TotalSamples",
223-
TotalSamples))
224-
return nullptr;
225-
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(2)), "MaxSamplesPerLine",
226-
MaxSamplesPerLine))
227-
return nullptr;
228-
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(3)), "MaxFunctionCount",
229-
MaxFunctionCount))
230-
return nullptr;
231-
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(4)), "NumLinesWithSamples",
232-
NumLinesWithSamples))
233-
return nullptr;
234-
if (!getVal(dyn_cast<MDTuple>(Tuple->getOperand(5)), "NumFunctions",
235-
NumFunctions))
236-
return nullptr;
237-
if (!getSummaryFromMD(dyn_cast<MDTuple>(Tuple->getOperand(6)), Summary))
238-
return nullptr;
239-
return new SampleProfileSummary(TotalSamples, MaxSamplesPerLine,
240-
MaxFunctionCount, NumLinesWithSamples,
241-
NumFunctions, Summary);
242-
}
243-
244-
ProfileSummary *ProfileSummary::getFromMD(Metadata *MD) {
245-
if (!isa<MDTuple>(MD))
246-
return nullptr;
247-
MDTuple *Tuple = cast<MDTuple>(MD);
248-
auto &FormatMD = Tuple->getOperand(0);
249-
if (isKeyValuePair(dyn_cast_or_null<MDTuple>(FormatMD), "ProfileFormat",
250-
"SampleProfile"))
251-
return getSampleProfileSummaryFromMD(Tuple);
252-
else if (isKeyValuePair(dyn_cast_or_null<MDTuple>(FormatMD), "ProfileFormat",
253-
"InstrProf"))
254-
return getInstrProfSummaryFromMD(Tuple);
255-
else
184+
if (!getSummaryFromMD(dyn_cast<MDTuple>(Tuple->getOperand(7)), Summary))
256185
return nullptr;
186+
return new ProfileSummary(SummaryKind, Summary, TotalCount, MaxCount,
187+
MaxInternalCount, MaxFunctionCount, NumCounts,
188+
NumFunctions);
257189
}

‎llvm/lib/ProfileData/InstrProfReader.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -602,13 +602,14 @@ IndexedInstrProfReader::readSummary(IndexedInstrProf::ProfVersion Version,
602602
Ent.NumBlocks);
603603
}
604604
// initialize InstrProfSummary using the SummaryData from disk.
605-
this->Summary = llvm::make_unique<InstrProfSummary>(
605+
this->Summary = llvm::make_unique<ProfileSummary>(
606+
ProfileSummary::PSK_Instr, DetailedSummary,
606607
SummaryData->get(Summary::TotalBlockCount),
607608
SummaryData->get(Summary::MaxBlockCount),
608609
SummaryData->get(Summary::MaxInternalBlockCount),
609610
SummaryData->get(Summary::MaxFunctionCount),
610611
SummaryData->get(Summary::TotalNumBlocks),
611-
SummaryData->get(Summary::TotalNumFunctions), DetailedSummary);
612+
SummaryData->get(Summary::TotalNumFunctions));
612613
return Cur + SummarySize;
613614
} else {
614615
// For older version of profile data, we need to compute on the fly:

‎llvm/lib/ProfileData/InstrProfWriter.cpp

+6-7
Original file line numberDiff line numberDiff line change
@@ -195,17 +195,16 @@ bool InstrProfWriter::shouldEncodeData(const ProfilingData &PD) {
195195
}
196196

197197
static void setSummary(IndexedInstrProf::Summary *TheSummary,
198-
InstrProfSummary &PS) {
198+
ProfileSummary &PS) {
199199
using namespace IndexedInstrProf;
200200
std::vector<ProfileSummaryEntry> &Res = PS.getDetailedSummary();
201201
TheSummary->NumSummaryFields = Summary::NumKinds;
202202
TheSummary->NumCutoffEntries = Res.size();
203203
TheSummary->set(Summary::MaxFunctionCount, PS.getMaxFunctionCount());
204-
TheSummary->set(Summary::MaxBlockCount, PS.getMaxBlockCount());
205-
TheSummary->set(Summary::MaxInternalBlockCount,
206-
PS.getMaxInternalBlockCount());
204+
TheSummary->set(Summary::MaxBlockCount, PS.getMaxCount());
205+
TheSummary->set(Summary::MaxInternalBlockCount, PS.getMaxInternalCount());
207206
TheSummary->set(Summary::TotalBlockCount, PS.getTotalCount());
208-
TheSummary->set(Summary::TotalNumBlocks, PS.getNumBlocks());
207+
TheSummary->set(Summary::TotalNumBlocks, PS.getNumCounts());
209208
TheSummary->set(Summary::TotalNumFunctions, PS.getNumFunctions());
210209
for (unsigned I = 0; I < Res.size(); I++)
211210
TheSummary->setEntry(I, Res[I]);
@@ -260,8 +259,8 @@ void InstrProfWriter::writeImpl(ProfOStream &OS) {
260259
IndexedInstrProf::allocSummary(SummarySize);
261260
// Compute the Summary and copy the data to the data
262261
// structure to be serialized out (to disk or buffer).
263-
InstrProfSummary *IPS = ISB.getSummary();
264-
setSummary(TheSummary.get(), *IPS);
262+
ProfileSummary *PS = ISB.getSummary();
263+
setSummary(TheSummary.get(), *PS);
265264
InfoObj->SummaryBuilder = 0;
266265

267266
// Now do the final patch:

‎llvm/lib/ProfileData/ProfileSummaryBuilder.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,18 @@ void ProfileSummaryBuilder::computeDetailedSummary() {
8686
}
8787
}
8888

89-
SampleProfileSummary *SampleProfileSummaryBuilder::getSummary() {
89+
ProfileSummary *SampleProfileSummaryBuilder::getSummary() {
9090
computeDetailedSummary();
91-
return new SampleProfileSummary(TotalCount, MaxCount, MaxFunctionCount,
92-
NumCounts, NumFunctions, DetailedSummary);
91+
return new ProfileSummary(ProfileSummary::PSK_Sample, DetailedSummary,
92+
TotalCount, MaxCount, 0, MaxFunctionCount,
93+
NumCounts, NumFunctions);
9394
}
9495

95-
InstrProfSummary *InstrProfSummaryBuilder::getSummary() {
96+
ProfileSummary *InstrProfSummaryBuilder::getSummary() {
9697
computeDetailedSummary();
97-
return new InstrProfSummary(TotalCount, MaxCount, MaxInternalBlockCount,
98-
MaxFunctionCount, NumCounts, NumFunctions,
99-
DetailedSummary);
98+
return new ProfileSummary(ProfileSummary::PSK_Instr, DetailedSummary,
99+
TotalCount, MaxCount, MaxInternalBlockCount,
100+
MaxFunctionCount, NumCounts, NumFunctions);
100101
}
101102

102103
void InstrProfSummaryBuilder::addEntryCount(uint64_t Count) {

0 commit comments

Comments
 (0)
Please sign in to comment.