Skip to content

Commit 19121fb

Browse files
authored
Merge branch 'main' into x86-commute-avx512-predicate-zero
2 parents ed61fb2 + 7255c3a commit 19121fb

File tree

622 files changed

+21662
-11162
lines changed

Some content is hidden

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

622 files changed

+21662
-11162
lines changed

.github/new-prs-labeler.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,10 @@ llvm:instcombine:
632632
- llvm/test/Transforms/InstCombine/**
633633
- llvm/test/Transforms/InstSimplify/**
634634

635+
llvm:vectorcombine:
636+
- llvm/lib/Transforms/Vectorize/VectorCombine.cpp
637+
- llvm/test/Transforms/VectorCombine/**
638+
635639
clangd:
636640
- clang-tools-extra/clangd/**
637641

bolt/lib/Rewrite/RewriteInstance.cpp

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,9 @@ Error RewriteInstance::discoverStorage() {
626626
NextAvailableAddress += BC->PageAlign;
627627
}
628628

629+
NewTextSegmentAddress = NextAvailableAddress;
630+
NewTextSegmentOffset = NextAvailableOffset;
631+
629632
if (!opts::UseGnuStack && !BC->IsLinuxKernel) {
630633
// This is where the black magic happens. Creating PHDR table in a segment
631634
// other than that containing ELF header is tricky. Some loaders and/or
@@ -652,6 +655,8 @@ Error RewriteInstance::discoverStorage() {
652655

653656
PHDRTableAddress = NextAvailableAddress;
654657
PHDRTableOffset = NextAvailableOffset;
658+
NewTextSegmentAddress = NextAvailableAddress;
659+
NewTextSegmentOffset = NextAvailableOffset;
655660

656661
// Reserve space for 3 extra pheaders.
657662
unsigned Phnum = Obj.getHeader().e_phnum;
@@ -664,14 +669,12 @@ Error RewriteInstance::discoverStorage() {
664669

665670
NextAvailableAddress += Phnum * sizeof(ELF64LEPhdrTy);
666671
NextAvailableOffset += Phnum * sizeof(ELF64LEPhdrTy);
667-
}
668672

669-
// Align at cache line.
670-
NextAvailableAddress = alignTo(NextAvailableAddress, 64);
671-
NextAvailableOffset = alignTo(NextAvailableOffset, 64);
673+
// Align at cache line.
674+
NextAvailableAddress = alignTo(NextAvailableAddress, 64);
675+
NextAvailableOffset = alignTo(NextAvailableOffset, 64);
676+
}
672677

673-
NewTextSegmentAddress = NextAvailableAddress;
674-
NewTextSegmentOffset = NextAvailableOffset;
675678
BC->LayoutStartAddress = NextAvailableAddress;
676679

677680
// Tools such as objcopy can strip section contents but leave header
@@ -4133,13 +4136,8 @@ void RewriteInstance::mapAllocatableSections(
41334136
}
41344137

41354138
if (SType == ST_READONLY) {
4136-
if (PHDRTableAddress) {
4137-
// Segment size includes the size of the PHDR area.
4138-
NewTextSegmentSize = NextAvailableAddress - PHDRTableAddress;
4139-
} else if (NewTextSegmentAddress) {
4140-
// Existing PHDR table would be updated.
4139+
if (NewTextSegmentAddress)
41414140
NewTextSegmentSize = NextAvailableAddress - NewTextSegmentAddress;
4142-
}
41434141
} else if (SType == ST_READWRITE) {
41444142
NewWritableSegmentSize = NextAvailableAddress - NewWritableSegmentAddress;
41454143
// Restore NextAvailableAddress if no new writable sections
@@ -4186,9 +4184,7 @@ void RewriteInstance::patchELFPHDRTable() {
41864184
// NOTE Currently .eh_frame_hdr appends to the last segment, recalculate
41874185
// last segments size based on the NextAvailableAddress variable.
41884186
if (!NewWritableSegmentSize) {
4189-
if (PHDRTableAddress)
4190-
NewTextSegmentSize = NextAvailableAddress - PHDRTableAddress;
4191-
else if (NewTextSegmentAddress)
4187+
if (NewTextSegmentAddress)
41924188
NewTextSegmentSize = NextAvailableAddress - NewTextSegmentAddress;
41934189
} else {
41944190
NewWritableSegmentSize = NextAvailableAddress - NewWritableSegmentAddress;
@@ -4201,15 +4197,9 @@ void RewriteInstance::patchELFPHDRTable() {
42014197
SmallVector<ELF64LEPhdrTy, 3> NewPhdrs;
42024198
ELF64LEPhdrTy NewPhdr;
42034199
NewPhdr.p_type = ELF::PT_LOAD;
4204-
if (PHDRTableAddress) {
4205-
NewPhdr.p_offset = PHDRTableOffset;
4206-
NewPhdr.p_vaddr = PHDRTableAddress;
4207-
NewPhdr.p_paddr = PHDRTableAddress;
4208-
} else {
4209-
NewPhdr.p_offset = NewTextSegmentOffset;
4210-
NewPhdr.p_vaddr = NewTextSegmentAddress;
4211-
NewPhdr.p_paddr = NewTextSegmentAddress;
4212-
}
4200+
NewPhdr.p_offset = NewTextSegmentOffset;
4201+
NewPhdr.p_vaddr = NewTextSegmentAddress;
4202+
NewPhdr.p_paddr = NewTextSegmentAddress;
42134203
NewPhdr.p_filesz = NewTextSegmentSize;
42144204
NewPhdr.p_memsz = NewTextSegmentSize;
42154205
NewPhdr.p_flags = ELF::PF_X | ELF::PF_R;
@@ -4270,7 +4260,7 @@ void RewriteInstance::patchELFPHDRTable() {
42704260
};
42714261

42724262
auto writeNewSegmentPhdrs = [&]() {
4273-
if (PHDRTableAddress || NewTextSegmentSize) {
4263+
if (NewTextSegmentSize) {
42744264
SmallVector<ELF64LE::Phdr, 3> NewPhdrs = createNewPhdrs();
42754265
OS.write(reinterpret_cast<const char *>(NewPhdrs.data()),
42764266
sizeof(ELF64LE::Phdr) * NewPhdrs.size());

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

Lines changed: 56 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -800,11 +800,39 @@ llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) {
800800
}
801801
}
802802

803-
// TODO: Create a helper that can receive a function to reduce repetition for
804-
// most blocks.
803+
// TODO: fix inconsistentent returning of errors in add callbacks.
804+
// Once that's fixed, we only need one handleSubBlock.
805+
template <typename InfoType, typename T, typename Callback>
806+
llvm::Error ClangDocBitcodeReader::handleSubBlock(unsigned ID, T Parent,
807+
Callback Function) {
808+
InfoType Info;
809+
if (auto Err = readBlock(ID, &Info))
810+
return Err;
811+
Function(Parent, std::move(Info));
812+
return llvm::Error::success();
813+
}
814+
815+
template <typename InfoType, typename T, typename Callback>
816+
llvm::Error ClangDocBitcodeReader::handleTypeSubBlock(unsigned ID, T Parent,
817+
Callback Function) {
818+
InfoType Info;
819+
if (auto Err = readBlock(ID, &Info))
820+
return Err;
821+
if (auto Err = Function(Parent, std::move(Info)))
822+
return Err;
823+
return llvm::Error::success();
824+
}
825+
805826
template <typename T>
806827
llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
807828
llvm::TimeTraceScope("Reducing infos", "readSubBlock");
829+
830+
static auto CreateAddFunc = [](auto AddFunc) {
831+
return [AddFunc](auto Parent, auto Child) {
832+
return AddFunc(Parent, std::move(Child));
833+
};
834+
};
835+
808836
switch (ID) {
809837
// Blocks can only have certain types of sub blocks.
810838
case BI_COMMENT_BLOCK_ID: {
@@ -816,28 +844,16 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
816844
return llvm::Error::success();
817845
}
818846
case BI_TYPE_BLOCK_ID: {
819-
TypeInfo TI;
820-
if (auto Err = readBlock(ID, &TI))
821-
return Err;
822-
if (auto Err = addTypeInfo(I, std::move(TI)))
823-
return Err;
824-
return llvm::Error::success();
847+
return handleTypeSubBlock<TypeInfo>(
848+
ID, I, CreateAddFunc(addTypeInfo<T, TypeInfo>));
825849
}
826850
case BI_FIELD_TYPE_BLOCK_ID: {
827-
FieldTypeInfo TI;
828-
if (auto Err = readBlock(ID, &TI))
829-
return Err;
830-
if (auto Err = addTypeInfo(I, std::move(TI)))
831-
return Err;
832-
return llvm::Error::success();
851+
return handleTypeSubBlock<FieldTypeInfo>(
852+
ID, I, CreateAddFunc(addTypeInfo<T, FieldTypeInfo>));
833853
}
834854
case BI_MEMBER_TYPE_BLOCK_ID: {
835-
MemberTypeInfo TI;
836-
if (auto Err = readBlock(ID, &TI))
837-
return Err;
838-
if (auto Err = addTypeInfo(I, std::move(TI)))
839-
return Err;
840-
return llvm::Error::success();
855+
return handleTypeSubBlock<MemberTypeInfo>(
856+
ID, I, CreateAddFunc(addTypeInfo<T, MemberTypeInfo>));
841857
}
842858
case BI_REFERENCE_BLOCK_ID: {
843859
Reference R;
@@ -848,81 +864,46 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
848864
return llvm::Error::success();
849865
}
850866
case BI_FUNCTION_BLOCK_ID: {
851-
FunctionInfo F;
852-
if (auto Err = readBlock(ID, &F))
853-
return Err;
854-
addChild(I, std::move(F));
855-
return llvm::Error::success();
867+
return handleSubBlock<FunctionInfo>(
868+
ID, I, CreateAddFunc(addChild<T, FunctionInfo>));
856869
}
857870
case BI_BASE_RECORD_BLOCK_ID: {
858-
BaseRecordInfo BR;
859-
if (auto Err = readBlock(ID, &BR))
860-
return Err;
861-
addChild(I, std::move(BR));
862-
return llvm::Error::success();
871+
return handleSubBlock<BaseRecordInfo>(
872+
ID, I, CreateAddFunc(addChild<T, BaseRecordInfo>));
863873
}
864874
case BI_ENUM_BLOCK_ID: {
865-
EnumInfo E;
866-
if (auto Err = readBlock(ID, &E))
867-
return Err;
868-
addChild(I, std::move(E));
869-
return llvm::Error::success();
875+
return handleSubBlock<EnumInfo>(ID, I,
876+
CreateAddFunc(addChild<T, EnumInfo>));
870877
}
871878
case BI_ENUM_VALUE_BLOCK_ID: {
872-
EnumValueInfo EV;
873-
if (auto Err = readBlock(ID, &EV))
874-
return Err;
875-
addChild(I, std::move(EV));
876-
return llvm::Error::success();
879+
return handleSubBlock<EnumValueInfo>(
880+
ID, I, CreateAddFunc(addChild<T, EnumValueInfo>));
877881
}
878882
case BI_TEMPLATE_BLOCK_ID: {
879-
TemplateInfo TI;
880-
if (auto Err = readBlock(ID, &TI))
881-
return Err;
882-
addTemplate(I, std::move(TI));
883-
return llvm::Error::success();
883+
return handleSubBlock<TemplateInfo>(ID, I, CreateAddFunc(addTemplate<T>));
884884
}
885885
case BI_TEMPLATE_SPECIALIZATION_BLOCK_ID: {
886-
TemplateSpecializationInfo TSI;
887-
if (auto Err = readBlock(ID, &TSI))
888-
return Err;
889-
addTemplateSpecialization(I, std::move(TSI));
890-
return llvm::Error::success();
886+
return handleSubBlock<TemplateSpecializationInfo>(
887+
ID, I, CreateAddFunc(addTemplateSpecialization<T>));
891888
}
892889
case BI_TEMPLATE_PARAM_BLOCK_ID: {
893-
TemplateParamInfo TPI;
894-
if (auto Err = readBlock(ID, &TPI))
895-
return Err;
896-
addTemplateParam(I, std::move(TPI));
897-
return llvm::Error::success();
890+
return handleSubBlock<TemplateParamInfo>(
891+
ID, I, CreateAddFunc(addTemplateParam<T>));
898892
}
899893
case BI_TYPEDEF_BLOCK_ID: {
900-
TypedefInfo TI;
901-
if (auto Err = readBlock(ID, &TI))
902-
return Err;
903-
addChild(I, std::move(TI));
904-
return llvm::Error::success();
894+
return handleSubBlock<TypedefInfo>(ID, I,
895+
CreateAddFunc(addChild<T, TypedefInfo>));
905896
}
906897
case BI_CONSTRAINT_BLOCK_ID: {
907-
ConstraintInfo CI;
908-
if (auto Err = readBlock(ID, &CI))
909-
return Err;
910-
addConstraint(I, std::move(CI));
911-
return llvm::Error::success();
898+
return handleSubBlock<ConstraintInfo>(ID, I,
899+
CreateAddFunc(addConstraint<T>));
912900
}
913901
case BI_CONCEPT_BLOCK_ID: {
914-
ConceptInfo CI;
915-
if (auto Err = readBlock(ID, &CI))
916-
return Err;
917-
addChild(I, std::move(CI));
918-
return llvm::Error::success();
902+
return handleSubBlock<ConceptInfo>(ID, I,
903+
CreateAddFunc(addChild<T, ConceptInfo>));
919904
}
920905
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();
906+
return handleSubBlock<VarInfo>(ID, I, CreateAddFunc(addChild<T, VarInfo>));
926907
}
927908
default:
928909
return llvm::createStringError(llvm::inconvertibleErrorCode(),

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ class ClangDocBitcodeReader {
6464
// Helper function to set up the appropriate type of Info.
6565
llvm::Expected<std::unique_ptr<Info>> readBlockToInfo(unsigned ID);
6666

67+
template <typename InfoType, typename T, typename CallbackFunction>
68+
llvm::Error handleSubBlock(unsigned ID, T Parent, CallbackFunction Function);
69+
70+
template <typename InfoType, typename T, typename CallbackFunction>
71+
llvm::Error handleTypeSubBlock(unsigned ID, T Parent,
72+
CallbackFunction Function);
73+
6774
llvm::BitstreamCursor &Stream;
6875
std::optional<llvm::BitstreamBlockInfo> BlockInfo;
6976
FieldId CurrentReferenceField;

0 commit comments

Comments
 (0)