Skip to content

Commit 630b101

Browse files
committed
Merge branch 'main' into vector_extract_strided_slice_distribution
2 parents 478811f + 5eb5f0d commit 630b101

File tree

865 files changed

+35879
-30285
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

865 files changed

+35879
-30285
lines changed

bolt/include/bolt/Profile/DataAggregator.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,9 @@ class DataAggregator : public DataReader {
374374
/// Parse a single pair of binary full path and associated build-id
375375
std::optional<std::pair<StringRef, StringRef>> parseNameBuildIDPair();
376376

377+
/// Coordinate reading and parsing of perf.data file
378+
void parsePerfData(BinaryContext &BC);
379+
377380
/// Coordinate reading and parsing of pre-aggregated file
378381
///
379382
/// The regular perf2bolt aggregation job is to read perf output directly.

bolt/lib/Profile/DataAggregator.cpp

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -466,9 +466,7 @@ int DataAggregator::prepareToParse(StringRef Name, PerfProcessInfo &Process,
466466
return PI.ReturnCode;
467467
}
468468

469-
Error DataAggregator::preprocessProfile(BinaryContext &BC) {
470-
this->BC = &BC;
471-
469+
void DataAggregator::parsePerfData(BinaryContext &BC) {
472470
auto ErrorCallback = [](int ReturnCode, StringRef ErrBuf) {
473471
errs() << "PERF-ERROR: return code " << ReturnCode << "\n" << ErrBuf;
474472
exit(1);
@@ -481,11 +479,6 @@ Error DataAggregator::preprocessProfile(BinaryContext &BC) {
481479
ErrorCallback(ReturnCode, ErrBuf);
482480
};
483481

484-
if (opts::ReadPreAggregated) {
485-
parsePreAggregated();
486-
goto heatmap;
487-
}
488-
489482
if (std::optional<StringRef> FileBuildID = BC.getFileBuildID()) {
490483
outs() << "BOLT-INFO: binary build-id is: " << *FileBuildID << "\n";
491484
processFileBuildID(*FileBuildID);
@@ -534,22 +527,28 @@ Error DataAggregator::preprocessProfile(BinaryContext &BC) {
534527
<< '\n';
535528

536529
deleteTempFiles();
530+
}
537531

538-
heatmap:
539-
// Sort parsed traces for faster processing.
540-
llvm::sort(Traces, llvm::less_first());
532+
Error DataAggregator::preprocessProfile(BinaryContext &BC) {
533+
this->BC = &BC;
541534

542-
if (!opts::HeatmapMode)
543-
return Error::success();
535+
if (opts::ReadPreAggregated) {
536+
parsePreAggregated();
537+
} else {
538+
parsePerfData(BC);
539+
}
544540

545-
if (std::error_code EC = printLBRHeatMap())
546-
return errorCodeToError(EC);
541+
// Sort parsed traces for faster processing.
542+
llvm::sort(Traces, llvm::less_first());
547543

548-
if (opts::HeatmapMode == opts::HeatmapModeKind::HM_Optional)
549-
return Error::success();
544+
if (opts::HeatmapMode) {
545+
if (std::error_code EC = printLBRHeatMap())
546+
return errorCodeToError(EC);
547+
if (opts::HeatmapMode == opts::HeatmapModeKind::HM_Exclusive)
548+
exit(0);
549+
}
550550

551-
assert(opts::HeatmapMode == opts::HeatmapModeKind::HM_Exclusive);
552-
exit(0);
551+
return Error::success();
553552
}
554553

555554
Error DataAggregator::readProfile(BinaryContext &BC) {

bolt/test/perf2bolt/X86/perf2bolt-spe.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ RUN: %clang %cflags %p/../../Inputs/asm_foo.s %p/../../Inputs/asm_main.c -o %t.e
66
RUN: touch %t.empty.perf.data
77
RUN: not perf2bolt -p %t.empty.perf.data -o %t.perf.boltdata --spe --pa %t.exe 2>&1 | FileCheck %s
88

9-
CHECK: perf2bolt{{.*}} -spe is available only on AArch64.
9+
CHECK: -spe is available only on AArch64.

bolt/unittests/Profile/PerfSpeEvents.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ struct PerfSpeEventsTestHelper : public testing::Test {
6565
BC = cantFail(BinaryContext::createBinaryContext(
6666
ObjFile->makeTriple(), std::make_shared<orc::SymbolStringPool>(),
6767
ObjFile->getFileName(), nullptr, /*IsPIC*/ false,
68-
DWARFContext::create(*ObjFile.get()), {llvm::outs(), llvm::errs()}));
68+
DWARFContext::create(*ObjFile), {llvm::outs(), llvm::errs()}));
6969
ASSERT_FALSE(!BC);
7070
}
7171

clang-tools-extra/clang-doc/BitcodeReader.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ static llvm::Error decodeRecord(const Record &R, InfoType &Field,
9393
case InfoType::IT_enum:
9494
case InfoType::IT_typedef:
9595
case InfoType::IT_concept:
96+
case InfoType::IT_variable:
9697
Field = IT;
9798
return llvm::Error::success();
9899
}
@@ -416,6 +417,23 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
416417
"invalid field for ConstraintInfo");
417418
}
418419

420+
static llvm::Error parseRecord(const Record &R, unsigned ID,
421+
llvm::StringRef Blob, VarInfo *I) {
422+
switch (ID) {
423+
case VAR_USR:
424+
return decodeRecord(R, I->USR, Blob);
425+
case VAR_NAME:
426+
return decodeRecord(R, I->Name, Blob);
427+
case VAR_DEFLOCATION:
428+
return decodeRecord(R, I->DefLoc, Blob);
429+
case VAR_IS_STATIC:
430+
return decodeRecord(R, I->IsStatic, Blob);
431+
default:
432+
return llvm::createStringError(llvm::inconvertibleErrorCode(),
433+
"invalid field for VarInfo");
434+
}
435+
}
436+
419437
template <typename T> static llvm::Expected<CommentInfo *> getCommentInfo(T I) {
420438
return llvm::createStringError(llvm::inconvertibleErrorCode(),
421439
"invalid type cannot contain CommentInfo");
@@ -458,6 +476,10 @@ template <> llvm::Expected<CommentInfo *> getCommentInfo(ConceptInfo *I) {
458476
return &I->Description.emplace_back();
459477
}
460478

479+
template <> Expected<CommentInfo *> getCommentInfo(VarInfo *I) {
480+
return &I->Description.emplace_back();
481+
}
482+
461483
// When readSubBlock encounters a TypeInfo sub-block, it calls addTypeInfo on
462484
// the parent block to set it. The template specializations define what to do
463485
// for each supported parent block.
@@ -497,6 +519,11 @@ template <> llvm::Error addTypeInfo(TypedefInfo *I, TypeInfo &&T) {
497519
return llvm::Error::success();
498520
}
499521

522+
template <> llvm::Error addTypeInfo(VarInfo *I, TypeInfo &&T) {
523+
I->Type = std::move(T);
524+
return llvm::Error::success();
525+
}
526+
500527
template <typename T>
501528
static llvm::Error addReference(T I, Reference &&R, FieldId F) {
502529
return llvm::createStringError(llvm::inconvertibleErrorCode(),
@@ -643,6 +670,9 @@ template <> void addChild(NamespaceInfo *I, TypedefInfo &&R) {
643670
template <> void addChild(NamespaceInfo *I, ConceptInfo &&R) {
644671
I->Children.Concepts.emplace_back(std::move(R));
645672
}
673+
template <> void addChild(NamespaceInfo *I, VarInfo &&R) {
674+
I->Children.Variables.emplace_back(std::move(R));
675+
}
646676

647677
// Record children:
648678
template <> void addChild(RecordInfo *I, FunctionInfo &&R) {
@@ -887,6 +917,13 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
887917
addChild(I, std::move(CI));
888918
return llvm::Error::success();
889919
}
920+
case BI_VAR_BLOCK_ID: {
921+
VarInfo VI;
922+
if (auto Err = readBlock(ID, &VI))
923+
return Err;
924+
addChild(I, std::move(VI));
925+
return llvm::Error::success();
926+
}
890927
default:
891928
return llvm::createStringError(llvm::inconvertibleErrorCode(),
892929
"invalid subblock type");
@@ -996,6 +1033,8 @@ ClangDocBitcodeReader::readBlockToInfo(unsigned ID) {
9961033
return createInfo<ConceptInfo>(ID);
9971034
case BI_FUNCTION_BLOCK_ID:
9981035
return createInfo<FunctionInfo>(ID);
1036+
case BI_VAR_BLOCK_ID:
1037+
return createInfo<VarInfo>(ID);
9991038
default:
10001039
return llvm::createStringError(llvm::inconvertibleErrorCode(),
10011040
"cannot create info");
@@ -1035,6 +1074,7 @@ ClangDocBitcodeReader::readBitcode() {
10351074
case BI_ENUM_BLOCK_ID:
10361075
case BI_TYPEDEF_BLOCK_ID:
10371076
case BI_CONCEPT_BLOCK_ID:
1077+
case BI_VAR_BLOCK_ID:
10381078
case BI_FUNCTION_BLOCK_ID: {
10391079
auto InfoOrErr = readBlockToInfo(ID);
10401080
if (!InfoOrErr)

clang-tools-extra/clang-doc/BitcodeWriter.cpp

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ static const llvm::IndexedMap<llvm::StringRef, BlockIdToIndexFunctor>
130130
{BI_TEMPLATE_SPECIALIZATION_BLOCK_ID, "TemplateSpecializationBlock"},
131131
{BI_TEMPLATE_PARAM_BLOCK_ID, "TemplateParamBlock"},
132132
{BI_CONSTRAINT_BLOCK_ID, "ConstraintBlock"},
133-
{BI_CONCEPT_BLOCK_ID, "ConceptBlock"}};
133+
{BI_CONCEPT_BLOCK_ID, "ConceptBlock"},
134+
{BI_VAR_BLOCK_ID, "VarBlock"}};
134135
assert(Inits.size() == BlockIdCount);
135136
for (const auto &Init : Inits)
136137
BlockIdNameMap[Init.first] = Init.second;
@@ -213,7 +214,12 @@ static const llvm::IndexedMap<RecordIdDsc, RecordIdToIndexFunctor>
213214
{CONCEPT_IS_TYPE, {"IsType", &genBoolAbbrev}},
214215
{CONCEPT_CONSTRAINT_EXPRESSION,
215216
{"ConstraintExpression", &genStringAbbrev}},
216-
{CONSTRAINT_EXPRESSION, {"Expression", &genStringAbbrev}}};
217+
{CONSTRAINT_EXPRESSION, {"Expression", &genStringAbbrev}},
218+
{VAR_USR, {"USR", &genSymbolIdAbbrev}},
219+
{VAR_NAME, {"Name", &genStringAbbrev}},
220+
{VAR_DEFLOCATION, {"DefLocation", &genLocationAbbrev}},
221+
{VAR_IS_STATIC, {"IsStatic", &genBoolAbbrev}}};
222+
217223
assert(Inits.size() == RecordIdCount);
218224
for (const auto &Init : Inits) {
219225
RecordIdNameMap[Init.first] = Init.second;
@@ -277,7 +283,8 @@ static const std::vector<std::pair<BlockId, std::vector<RecordId>>>
277283
{CONCEPT_USR, CONCEPT_NAME, CONCEPT_IS_TYPE,
278284
CONCEPT_CONSTRAINT_EXPRESSION}},
279285
// Constraint Block
280-
{BI_CONSTRAINT_BLOCK_ID, {CONSTRAINT_EXPRESSION}}};
286+
{BI_CONSTRAINT_BLOCK_ID, {CONSTRAINT_EXPRESSION}},
287+
{BI_VAR_BLOCK_ID, {VAR_NAME, VAR_USR, VAR_DEFLOCATION, VAR_IS_STATIC}}};
281288

282289
// AbbreviationMap
283290

@@ -540,6 +547,8 @@ void ClangDocBitcodeWriter::emitBlock(const NamespaceInfo &I) {
540547
emitBlock(C);
541548
for (const auto &C : I.Children.Concepts)
542549
emitBlock(C);
550+
for (const auto &C : I.Children.Variables)
551+
emitBlock(C);
543552
}
544553

545554
void ClangDocBitcodeWriter::emitBlock(const EnumInfo &I) {
@@ -682,6 +691,20 @@ void ClangDocBitcodeWriter::emitBlock(const ConstraintInfo &C) {
682691
emitBlock(C.ConceptRef, FieldId::F_concept);
683692
}
684693

694+
void ClangDocBitcodeWriter::emitBlock(const VarInfo &I) {
695+
StreamSubBlockGuard Block(Stream, BI_VAR_BLOCK_ID);
696+
emitRecord(I.USR, VAR_USR);
697+
emitRecord(I.Name, VAR_NAME);
698+
for (const auto &N : I.Namespace)
699+
emitBlock(N, FieldId::F_namespace);
700+
for (const auto &CI : I.Description)
701+
emitBlock(CI);
702+
if (I.DefLoc)
703+
emitRecord(*I.DefLoc, VAR_DEFLOCATION);
704+
emitRecord(I.IsStatic, VAR_IS_STATIC);
705+
emitBlock(I.Type);
706+
}
707+
685708
bool ClangDocBitcodeWriter::dispatchInfoForWrite(Info *I) {
686709
switch (I->IT) {
687710
case InfoType::IT_namespace:
@@ -702,6 +725,9 @@ bool ClangDocBitcodeWriter::dispatchInfoForWrite(Info *I) {
702725
case InfoType::IT_concept:
703726
emitBlock(*static_cast<clang::doc::ConceptInfo *>(I));
704727
break;
728+
case InfoType::IT_variable:
729+
emitBlock(*static_cast<VarInfo *>(I));
730+
break;
705731
case InfoType::IT_default:
706732
llvm::errs() << "Unexpected info, unable to write.\n";
707733
return true;

clang-tools-extra/clang-doc/BitcodeWriter.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ enum BlockId {
6969
BI_CONSTRAINT_BLOCK_ID,
7070
BI_TYPEDEF_BLOCK_ID,
7171
BI_CONCEPT_BLOCK_ID,
72+
BI_VAR_BLOCK_ID,
7273
BI_LAST,
7374
BI_FIRST = BI_VERSION_BLOCK_ID
7475
};
@@ -142,6 +143,10 @@ enum RecordId {
142143
CONCEPT_IS_TYPE,
143144
CONCEPT_CONSTRAINT_EXPRESSION,
144145
CONSTRAINT_EXPRESSION,
146+
VAR_USR,
147+
VAR_NAME,
148+
VAR_DEFLOCATION,
149+
VAR_IS_STATIC,
145150
RI_LAST,
146151
RI_FIRST = VERSION
147152
};
@@ -190,6 +195,7 @@ class ClangDocBitcodeWriter {
190195
void emitBlock(const ConceptInfo &T);
191196
void emitBlock(const ConstraintInfo &T);
192197
void emitBlock(const Reference &B, FieldId F);
198+
void emitBlock(const VarInfo &B);
193199

194200
private:
195201
class AbbreviationMap {

clang-tools-extra/clang-doc/HTMLGenerator.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,7 @@ llvm::Error HTMLGenerator::generateDocForInfo(Info *I, llvm::raw_ostream &OS,
986986
genHTML(*static_cast<clang::doc::TypedefInfo *>(I), CDCtx, InfoTitle);
987987
break;
988988
case InfoType::IT_concept:
989+
case InfoType::IT_variable:
989990
break;
990991
case InfoType::IT_default:
991992
return llvm::createStringError(llvm::inconvertibleErrorCode(),
@@ -1015,6 +1016,8 @@ static std::string getRefType(InfoType IT) {
10151016
return "typedef";
10161017
case InfoType::IT_concept:
10171018
return "concept";
1019+
case InfoType::IT_variable:
1020+
return "variable";
10181021
}
10191022
llvm_unreachable("Unknown InfoType");
10201023
}

clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,8 @@ Error MustacheHTMLGenerator::generateDocForInfo(Info *I, raw_ostream &OS,
587587
break;
588588
case InfoType::IT_concept:
589589
break;
590+
case InfoType::IT_variable:
591+
break;
590592
case InfoType::IT_default:
591593
return createStringError(inconvertibleErrorCode(), "unexpected InfoType");
592594
}

clang-tools-extra/clang-doc/JSONGenerator.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,15 @@ static void serializeInfo(const RecordInfo &I, json::Object &Obj,
482482
serializeCommonChildren(I.Children, Obj, RepositoryUrl);
483483
}
484484

485+
static void serializeInfo(const VarInfo &I, json::Object &Obj,
486+
std::optional<StringRef> RepositoryUrl) {
487+
serializeCommonAttributes(I, Obj, RepositoryUrl);
488+
Obj["IsStatic"] = I.IsStatic;
489+
auto TypeObj = Object();
490+
serializeInfo(I.Type, TypeObj);
491+
Obj["Type"] = std::move(TypeObj);
492+
}
493+
485494
static void serializeInfo(const NamespaceInfo &I, json::Object &Obj,
486495
std::optional<StringRef> RepositoryUrl) {
487496
serializeCommonAttributes(I, Obj, RepositoryUrl);
@@ -519,6 +528,10 @@ static void serializeInfo(const NamespaceInfo &I, json::Object &Obj,
519528
if (!I.Children.Concepts.empty())
520529
serializeArray(I.Children.Concepts, Obj, "Concepts", SerializeInfo);
521530

531+
if (!I.Children.Variables.empty()) {
532+
serializeArray(I.Children.Variables, Obj, "Variables", SerializeInfo);
533+
}
534+
522535
serializeCommonChildren(I.Children, Obj, RepositoryUrl);
523536
}
524537

@@ -573,6 +586,7 @@ Error JSONGenerator::generateDocForInfo(Info *I, raw_ostream &OS,
573586
case InfoType::IT_enum:
574587
case InfoType::IT_function:
575588
case InfoType::IT_typedef:
589+
case InfoType::IT_variable:
576590
break;
577591
case InfoType::IT_default:
578592
return createStringError(inconvertibleErrorCode(), "unexpected info type");

0 commit comments

Comments
 (0)