Skip to content

Commit aba7cd1

Browse files
authored
merge main into amd-staging (llvm#2542)
2 parents 115064c + 0932ce7 commit aba7cd1

File tree

244 files changed

+4037
-2534
lines changed

Some content is hidden

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

244 files changed

+4037
-2534
lines changed

bolt/include/bolt/Core/MCPlusBuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ class MCPlusBuilder {
405405

406406
bool equals(const MCExpr &A, const MCExpr &B, CompFuncTy Comp) const;
407407

408-
virtual bool equals(const MCTargetExpr &A, const MCTargetExpr &B,
408+
virtual bool equals(const MCSpecifierExpr &A, const MCSpecifierExpr &B,
409409
CompFuncTy Comp) const;
410410

411411
virtual bool isBranch(const MCInst &Inst) const {

bolt/lib/Core/HashUtilities.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ std::string hashExpr(BinaryContext &BC, const MCExpr &Expr) {
6767
.append(hashInteger(BinaryExpr.getOpcode()))
6868
.append(hashExpr(BC, *BinaryExpr.getRHS()));
6969
}
70+
case MCExpr::Specifier:
7071
case MCExpr::Target:
7172
return std::string();
7273
}

bolt/lib/Core/MCPlusBuilder.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,17 +114,19 @@ bool MCPlusBuilder::equals(const MCExpr &A, const MCExpr &B,
114114
equals(*BinaryA.getRHS(), *BinaryB.getRHS(), Comp);
115115
}
116116

117-
case MCExpr::Target: {
118-
const auto &TargetExprA = cast<MCTargetExpr>(A);
119-
const auto &TargetExprB = cast<MCTargetExpr>(B);
117+
case MCExpr::Specifier: {
118+
const auto &TargetExprA = cast<MCSpecifierExpr>(A);
119+
const auto &TargetExprB = cast<MCSpecifierExpr>(B);
120120
return equals(TargetExprA, TargetExprB, Comp);
121121
}
122+
case MCExpr::Target:
123+
llvm_unreachable("Not implemented");
122124
}
123125

124126
llvm_unreachable("Invalid expression kind!");
125127
}
126128

127-
bool MCPlusBuilder::equals(const MCTargetExpr &A, const MCTargetExpr &B,
129+
bool MCPlusBuilder::equals(const MCSpecifierExpr &A, const MCSpecifierExpr &B,
128130
CompFuncTy Comp) const {
129131
llvm_unreachable("target-specific expressions are unsupported");
130132
}

bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
177177
return true;
178178
}
179179

180-
bool equals(const MCTargetExpr &A, const MCTargetExpr &B,
180+
bool equals(const MCSpecifierExpr &A, const MCSpecifierExpr &B,
181181
CompFuncTy Comp) const override {
182182
const auto &AArch64ExprA = cast<AArch64MCExpr>(A);
183183
const auto &AArch64ExprB = cast<AArch64MCExpr>(B);

bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
3131
public:
3232
using MCPlusBuilder::MCPlusBuilder;
3333

34-
bool equals(const MCTargetExpr &A, const MCTargetExpr &B,
34+
bool equals(const MCSpecifierExpr &A, const MCSpecifierExpr &B,
3535
CompFuncTy Comp) const override {
3636
const auto &RISCVExprA = cast<RISCVMCExpr>(A);
3737
const auto &RISCVExprB = cast<RISCVMCExpr>(B);

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,9 +315,13 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
315315

316316
static llvm::Error parseRecord(const Record &R, unsigned ID,
317317
llvm::StringRef Blob, CommentInfo *I) {
318+
llvm::SmallString<16> KindStr;
318319
switch (ID) {
319320
case COMMENT_KIND:
320-
return decodeRecord(R, I->Kind, Blob);
321+
if (llvm::Error Err = decodeRecord(R, KindStr, Blob))
322+
return Err;
323+
I->Kind = stringToCommentKind(KindStr);
324+
return llvm::Error::success();
321325
case COMMENT_TEXT:
322326
return decodeRecord(R, I->Text, Blob);
323327
case COMMENT_NAME:

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,8 +484,9 @@ void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
484484

485485
void ClangDocBitcodeWriter::emitBlock(const CommentInfo &I) {
486486
StreamSubBlockGuard Block(Stream, BI_COMMENT_BLOCK_ID);
487+
// Handle Kind (enum) separately, since it is not a string.
488+
emitRecord(commentKindToString(I.Kind), COMMENT_KIND);
487489
for (const auto &L : std::vector<std::pair<llvm::StringRef, RecordId>>{
488-
{I.Kind, COMMENT_KIND},
489490
{I.Text, COMMENT_TEXT},
490491
{I.Name, COMMENT_NAME},
491492
{I.Direction, COMMENT_DIRECTION},

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,8 @@ genHTML(const Index &Index, StringRef InfoPath, bool IsOutermostList) {
635635
}
636636

637637
static std::unique_ptr<HTMLNode> genHTML(const CommentInfo &I) {
638-
if (I.Kind == "FullComment") {
638+
switch (I.Kind) {
639+
case CommentKind::CK_FullComment: {
639640
auto FullComment = std::make_unique<TagNode>(HTMLTag::TAG_DIV);
640641
for (const auto &Child : I.Children) {
641642
std::unique_ptr<HTMLNode> Node = genHTML(*Child);
@@ -645,7 +646,7 @@ static std::unique_ptr<HTMLNode> genHTML(const CommentInfo &I) {
645646
return std::move(FullComment);
646647
}
647648

648-
if (I.Kind == "ParagraphComment") {
649+
case CommentKind::CK_ParagraphComment: {
649650
auto ParagraphComment = std::make_unique<TagNode>(HTMLTag::TAG_P);
650651
for (const auto &Child : I.Children) {
651652
std::unique_ptr<HTMLNode> Node = genHTML(*Child);
@@ -657,7 +658,7 @@ static std::unique_ptr<HTMLNode> genHTML(const CommentInfo &I) {
657658
return std::move(ParagraphComment);
658659
}
659660

660-
if (I.Kind == "BlockCommandComment") {
661+
case CommentKind::CK_BlockCommandComment: {
661662
auto BlockComment = std::make_unique<TagNode>(HTMLTag::TAG_DIV);
662663
BlockComment->Children.emplace_back(
663664
std::make_unique<TagNode>(HTMLTag::TAG_DIV, I.Name));
@@ -670,12 +671,26 @@ static std::unique_ptr<HTMLNode> genHTML(const CommentInfo &I) {
670671
return nullptr;
671672
return std::move(BlockComment);
672673
}
673-
if (I.Kind == "TextComment") {
674-
if (I.Text == "")
674+
675+
case CommentKind::CK_TextComment: {
676+
if (I.Text.empty())
675677
return nullptr;
676678
return std::make_unique<TextNode>(I.Text);
677679
}
678-
return nullptr;
680+
681+
// For now, return nullptr for unsupported comment kinds
682+
case CommentKind::CK_InlineCommandComment:
683+
case CommentKind::CK_HTMLStartTagComment:
684+
case CommentKind::CK_HTMLEndTagComment:
685+
case CommentKind::CK_ParamCommandComment:
686+
case CommentKind::CK_TParamCommandComment:
687+
case CommentKind::CK_VerbatimBlockComment:
688+
case CommentKind::CK_VerbatimBlockLineComment:
689+
case CommentKind::CK_VerbatimLineComment:
690+
case CommentKind::CK_Unknown:
691+
return nullptr;
692+
}
693+
llvm_unreachable("Unhandled CommentKind");
679694
}
680695

681696
static std::unique_ptr<TagNode> genHTML(const std::vector<CommentInfo> &C) {

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

Lines changed: 117 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -208,37 +208,110 @@ static json::Value extractValue(const TypedefInfo &I) {
208208
}
209209

210210
static json::Value extractValue(const CommentInfo &I) {
211-
assert((I.Kind == "BlockCommandComment" || I.Kind == "FullComment" ||
212-
I.Kind == "ParagraphComment" || I.Kind == "TextComment") &&
213-
"Unknown Comment type in CommentInfo.");
214-
215211
Object Obj = Object();
216-
json::Value Child = Object();
217212

218-
// TextComment has no children, so return it.
219-
if (I.Kind == "TextComment") {
220-
Obj.insert({"TextComment", I.Text});
221-
return Obj;
222-
}
213+
json::Value ChildVal = Object();
214+
Object &Child = *ChildVal.getAsObject();
223215

224-
// BlockCommandComment needs to generate a Command key.
225-
if (I.Kind == "BlockCommandComment")
226-
Child.getAsObject()->insert({"Command", I.Name});
227-
228-
// Use the same handling for everything else.
229-
// Only valid for:
230-
// - BlockCommandComment
231-
// - FullComment
232-
// - ParagraphComment
233216
json::Value ChildArr = Array();
234217
auto &CARef = *ChildArr.getAsArray();
235218
CARef.reserve(I.Children.size());
236219
for (const auto &C : I.Children)
237220
CARef.emplace_back(extractValue(*C));
238-
Child.getAsObject()->insert({"Children", ChildArr});
239-
Obj.insert({I.Kind, Child});
240221

241-
return Obj;
222+
switch (I.Kind) {
223+
case CommentKind::CK_TextComment: {
224+
Obj.insert({commentKindToString(I.Kind), I.Text});
225+
return Obj;
226+
}
227+
228+
case CommentKind::CK_BlockCommandComment: {
229+
Child.insert({"Command", I.Name});
230+
Child.insert({"Children", ChildArr});
231+
Obj.insert({commentKindToString(I.Kind), ChildVal});
232+
return Obj;
233+
}
234+
235+
case CommentKind::CK_InlineCommandComment: {
236+
json::Value ArgsArr = Array();
237+
auto &ARef = *ArgsArr.getAsArray();
238+
ARef.reserve(I.Args.size());
239+
for (const auto &Arg : I.Args)
240+
ARef.emplace_back(Arg);
241+
Child.insert({"Command", I.Name});
242+
Child.insert({"Args", ArgsArr});
243+
Child.insert({"Children", ChildArr});
244+
Obj.insert({commentKindToString(I.Kind), ChildVal});
245+
return Obj;
246+
}
247+
248+
case CommentKind::CK_ParamCommandComment:
249+
case CommentKind::CK_TParamCommandComment: {
250+
Child.insert({"ParamName", I.ParamName});
251+
Child.insert({"Direction", I.Direction});
252+
Child.insert({"Explicit", I.Explicit});
253+
Child.insert({"Children", ChildArr});
254+
Obj.insert({commentKindToString(I.Kind), ChildVal});
255+
return Obj;
256+
}
257+
258+
case CommentKind::CK_VerbatimBlockComment: {
259+
Child.insert({"Text", I.Text});
260+
if (!I.CloseName.empty())
261+
Child.insert({"CloseName", I.CloseName});
262+
Child.insert({"Children", ChildArr});
263+
Obj.insert({commentKindToString(I.Kind), ChildVal});
264+
return Obj;
265+
}
266+
267+
case CommentKind::CK_VerbatimBlockLineComment:
268+
case CommentKind::CK_VerbatimLineComment: {
269+
Child.insert({"Text", I.Text});
270+
Child.insert({"Children", ChildArr});
271+
Obj.insert({commentKindToString(I.Kind), ChildVal});
272+
return Obj;
273+
}
274+
275+
case CommentKind::CK_HTMLStartTagComment: {
276+
json::Value AttrKeysArray = json::Array();
277+
json::Value AttrValuesArray = json::Array();
278+
auto &KeyArr = *AttrKeysArray.getAsArray();
279+
auto &ValArr = *AttrValuesArray.getAsArray();
280+
KeyArr.reserve(I.AttrKeys.size());
281+
ValArr.reserve(I.AttrValues.size());
282+
for (const auto &K : I.AttrKeys)
283+
KeyArr.emplace_back(K);
284+
for (const auto &V : I.AttrValues)
285+
ValArr.emplace_back(V);
286+
Child.insert({"Name", I.Name});
287+
Child.insert({"SelfClosing", I.SelfClosing});
288+
Child.insert({"AttrKeys", AttrKeysArray});
289+
Child.insert({"AttrValues", AttrValuesArray});
290+
Child.insert({"Children", ChildArr});
291+
Obj.insert({commentKindToString(I.Kind), ChildVal});
292+
return Obj;
293+
}
294+
295+
case CommentKind::CK_HTMLEndTagComment: {
296+
Child.insert({"Name", I.Name});
297+
Child.insert({"Children", ChildArr});
298+
Obj.insert({commentKindToString(I.Kind), ChildVal});
299+
return Obj;
300+
}
301+
302+
case CommentKind::CK_FullComment:
303+
case CommentKind::CK_ParagraphComment: {
304+
Child.insert({"Children", ChildArr});
305+
Obj.insert({commentKindToString(I.Kind), ChildVal});
306+
return Obj;
307+
}
308+
309+
case CommentKind::CK_Unknown: {
310+
Obj.insert({commentKindToString(I.Kind), I.Text});
311+
return Obj;
312+
}
313+
}
314+
llvm_unreachable("Unknown comment kind encountered.");
242315
}
243316

244317
static void maybeInsertLocation(std::optional<Location> Loc,
@@ -255,6 +328,7 @@ static void extractDescriptionFromInfo(ArrayRef<CommentInfo> Descriptions,
255328
return;
256329
json::Value DescArr = Array();
257330
json::Array &DescARef = *DescArr.getAsArray();
331+
DescARef.reserve(Descriptions.size());
258332
for (const CommentInfo &Child : Descriptions)
259333
DescARef.emplace_back(extractValue(Child));
260334
EnumValObj.insert({"EnumValueComments", DescArr});
@@ -270,6 +344,7 @@ static json::Value extractValue(const FunctionInfo &I, StringRef ParentInfoDir,
270344

271345
json::Value ParamArr = Array();
272346
json::Array &ParamARef = *ParamArr.getAsArray();
347+
ParamARef.reserve(I.Params.size());
273348
for (const auto Val : enumerate(I.Params)) {
274349
json::Value V = Object();
275350
auto &VRef = *V.getAsObject();
@@ -289,14 +364,14 @@ static json::Value extractValue(const EnumInfo &I,
289364
Object Obj = Object();
290365
std::string EnumType = I.Scoped ? "enum class " : "enum ";
291366
EnumType += I.Name;
292-
bool HasComment = std::any_of(
293-
I.Members.begin(), I.Members.end(),
294-
[](const EnumValueInfo &M) { return !M.Description.empty(); });
367+
bool HasComment = llvm::any_of(
368+
I.Members, [](const EnumValueInfo &M) { return !M.Description.empty(); });
295369
Obj.insert({"EnumName", EnumType});
296370
Obj.insert({"HasComment", HasComment});
297371
Obj.insert({"ID", toHex(toStringRef(I.USR))});
298372
json::Value EnumArr = Array();
299373
json::Array &EnumARef = *EnumArr.getAsArray();
374+
EnumARef.reserve(I.Members.size());
300375
for (const EnumValueInfo &M : I.Members) {
301376
json::Value EnumValue = Object();
302377
auto &EnumValObj = *EnumValue.getAsObject();
@@ -322,6 +397,7 @@ static void extractScopeChildren(const ScopeChildren &S, Object &Obj,
322397
const ClangDocContext &CDCtx) {
323398
json::Value NamespaceArr = Array();
324399
json::Array &NamespaceARef = *NamespaceArr.getAsArray();
400+
NamespaceARef.reserve(S.Namespaces.size());
325401
for (const Reference &Child : S.Namespaces)
326402
NamespaceARef.emplace_back(extractValue(Child, ParentInfoDir));
327403

@@ -330,6 +406,7 @@ static void extractScopeChildren(const ScopeChildren &S, Object &Obj,
330406

331407
json::Value RecordArr = Array();
332408
json::Array &RecordARef = *RecordArr.getAsArray();
409+
RecordARef.reserve(S.Records.size());
333410
for (const Reference &Child : S.Records)
334411
RecordARef.emplace_back(extractValue(Child, ParentInfoDir));
335412

@@ -338,12 +415,15 @@ static void extractScopeChildren(const ScopeChildren &S, Object &Obj,
338415

339416
json::Value FunctionArr = Array();
340417
json::Array &FunctionARef = *FunctionArr.getAsArray();
418+
FunctionARef.reserve(S.Functions.size());
341419

342420
json::Value PublicFunctionArr = Array();
343421
json::Array &PublicFunctionARef = *PublicFunctionArr.getAsArray();
422+
PublicFunctionARef.reserve(S.Functions.size());
344423

345424
json::Value ProtectedFunctionArr = Array();
346425
json::Array &ProtectedFunctionARef = *ProtectedFunctionArr.getAsArray();
426+
ProtectedFunctionARef.reserve(S.Functions.size());
347427

348428
for (const FunctionInfo &Child : S.Functions) {
349429
json::Value F = extractValue(Child, ParentInfoDir, CDCtx);
@@ -367,6 +447,7 @@ static void extractScopeChildren(const ScopeChildren &S, Object &Obj,
367447

368448
json::Value EnumArr = Array();
369449
auto &EnumARef = *EnumArr.getAsArray();
450+
EnumARef.reserve(S.Enums.size());
370451
for (const EnumInfo &Child : S.Enums)
371452
EnumARef.emplace_back(extractValue(Child, CDCtx));
372453

@@ -375,6 +456,7 @@ static void extractScopeChildren(const ScopeChildren &S, Object &Obj,
375456

376457
json::Value TypedefArr = Array();
377458
auto &TypedefARef = *TypedefArr.getAsArray();
459+
TypedefARef.reserve(S.Typedefs.size());
378460
for (const TypedefInfo &Child : S.Typedefs)
379461
TypedefARef.emplace_back(extractValue(Child));
380462

@@ -411,10 +493,13 @@ static json::Value extractValue(const RecordInfo &I,
411493
extractScopeChildren(I.Children, RecordValue, BasePath, CDCtx);
412494
json::Value PublicMembers = Array();
413495
json::Array &PubMemberRef = *PublicMembers.getAsArray();
496+
PubMemberRef.reserve(I.Members.size());
414497
json::Value ProtectedMembers = Array();
415498
json::Array &ProtMemberRef = *ProtectedMembers.getAsArray();
499+
ProtMemberRef.reserve(I.Members.size());
416500
json::Value PrivateMembers = Array();
417501
json::Array &PrivMemberRef = *PrivateMembers.getAsArray();
502+
PrivMemberRef.reserve(I.Members.size());
418503
for (const MemberTypeInfo &Member : I.Members) {
419504
json::Value MemberValue = Object();
420505
auto &MVRef = *MemberValue.getAsObject();
@@ -446,20 +531,25 @@ static Error setupTemplateValue(const ClangDocContext &CDCtx, json::Value &V,
446531
auto InfoPath = I->getRelativeFilePath("");
447532
SmallString<128> RelativePath = computeRelativePath("", InfoPath);
448533
sys::path::native(RelativePath, sys::path::Style::posix);
534+
535+
auto *SSA = StylesheetArr.getAsArray();
536+
SSA->reserve(CDCtx.UserStylesheets.size());
449537
for (const auto &FilePath : CDCtx.UserStylesheets) {
450538
SmallString<128> StylesheetPath = RelativePath;
451539
sys::path::append(StylesheetPath, sys::path::Style::posix,
452540
sys::path::filename(FilePath));
453-
StylesheetArr.getAsArray()->emplace_back(StylesheetPath);
541+
SSA->emplace_back(StylesheetPath);
454542
}
455543
V.getAsObject()->insert({"Stylesheets", StylesheetArr});
456544

457545
json::Value ScriptArr = Array();
546+
auto *SCA = ScriptArr.getAsArray();
547+
SCA->reserve(CDCtx.JsScripts.size());
458548
for (auto Script : CDCtx.JsScripts) {
459549
SmallString<128> JsPath = RelativePath;
460550
sys::path::append(JsPath, sys::path::Style::posix,
461551
sys::path::filename(Script));
462-
ScriptArr.getAsArray()->emplace_back(JsPath);
552+
SCA->emplace_back(JsPath);
463553
}
464554
V.getAsObject()->insert({"Scripts", ScriptArr});
465555
return Error::success();

0 commit comments

Comments
 (0)