llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-modules Author: Kazu Hirata (kazutakahirata) <details> <summary>Changes</summary> Now readNext defaults to unaligned accesses. This patch drops unaligned to improve readability. --- Patch is 30.09 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/88842.diff 4 Files Affected: - (modified) clang/lib/APINotes/APINotesReader.cpp (+55-82) - (modified) clang/lib/Serialization/ASTReader.cpp (+37-50) - (modified) clang/lib/Serialization/GlobalModuleIndex.cpp (+4-8) - (modified) clang/lib/Serialization/MultiOnDiskHashTable.h (+2-2) ``````````diff diff --git a/clang/lib/APINotes/APINotesReader.cpp b/clang/lib/APINotes/APINotesReader.cpp index fbbe9c32ce1258..dfc3beb6fa13ee 100644 --- a/clang/lib/APINotes/APINotesReader.cpp +++ b/clang/lib/APINotes/APINotesReader.cpp @@ -30,23 +30,20 @@ namespace { llvm::VersionTuple ReadVersionTuple(const uint8_t *&Data) { uint8_t NumVersions = (*Data++) & 0x03; - unsigned Major = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + unsigned Major = endian::readNext<uint32_t, llvm::endianness::little>(Data); if (NumVersions == 0) return llvm::VersionTuple(Major); - unsigned Minor = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + unsigned Minor = endian::readNext<uint32_t, llvm::endianness::little>(Data); if (NumVersions == 1) return llvm::VersionTuple(Major, Minor); unsigned Subminor = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint32_t, llvm::endianness::little>(Data); if (NumVersions == 2) return llvm::VersionTuple(Major, Minor, Subminor); - unsigned Build = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + unsigned Build = endian::readNext<uint32_t, llvm::endianness::little>(Data); return llvm::VersionTuple(Major, Minor, Subminor, Build); } @@ -71,16 +68,16 @@ class VersionedTableInfo { static std::pair<unsigned, unsigned> ReadKeyDataLength(const uint8_t *&Data) { unsigned KeyLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); unsigned DataLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); return {KeyLength, DataLength}; } static data_type ReadData(internal_key_type Key, const uint8_t *Data, unsigned Length) { unsigned NumElements = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); data_type Result; Result.reserve(NumElements); for (unsigned i = 0; i != NumElements; ++i) { @@ -105,14 +102,14 @@ void ReadCommonEntityInfo(const uint8_t *&Data, CommonEntityInfo &Info) { Info.setSwiftPrivate(static_cast<bool>((UnavailableBits >> 3) & 0x01)); unsigned MsgLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); Info.UnavailableMsg = std::string(reinterpret_cast<const char *>(Data), reinterpret_cast<const char *>(Data) + MsgLength); Data += MsgLength; unsigned SwiftNameLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); Info.SwiftName = std::string(reinterpret_cast<const char *>(Data), reinterpret_cast<const char *>(Data) + SwiftNameLength); @@ -124,7 +121,7 @@ void ReadCommonTypeInfo(const uint8_t *&Data, CommonTypeInfo &Info) { ReadCommonEntityInfo(Data, Info); unsigned SwiftBridgeLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); if (SwiftBridgeLength > 0) { Info.setSwiftBridge(std::string(reinterpret_cast<const char *>(Data), SwiftBridgeLength - 1)); @@ -132,7 +129,7 @@ void ReadCommonTypeInfo(const uint8_t *&Data, CommonTypeInfo &Info) { } unsigned ErrorDomainLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); if (ErrorDomainLength > 0) { Info.setNSErrorDomain(std::optional<std::string>(std::string( reinterpret_cast<const char *>(Data), ErrorDomainLength - 1))); @@ -163,9 +160,9 @@ class IdentifierTableInfo { static std::pair<unsigned, unsigned> ReadKeyDataLength(const uint8_t *&Data) { unsigned KeyLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); unsigned DataLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); return {KeyLength, DataLength}; } @@ -175,8 +172,7 @@ class IdentifierTableInfo { static data_type ReadData(internal_key_type key, const uint8_t *Data, unsigned Length) { - return endian::readNext<uint32_t, llvm::endianness::little, unaligned>( - Data); + return endian::readNext<uint32_t, llvm::endianness::little>(Data); } }; @@ -203,26 +199,24 @@ class ObjCContextIDTableInfo { static std::pair<unsigned, unsigned> ReadKeyDataLength(const uint8_t *&Data) { unsigned KeyLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); unsigned DataLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); return {KeyLength, DataLength}; } static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { auto ParentCtxID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint32_t, llvm::endianness::little>(Data); auto ContextKind = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); - auto NameID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint8_t, llvm::endianness::little>(Data); + auto NameID = endian::readNext<uint32_t, llvm::endianness::little>(Data); return {ParentCtxID, ContextKind, NameID}; } static data_type ReadData(internal_key_type Key, const uint8_t *Data, unsigned Length) { - return endian::readNext<uint32_t, llvm::endianness::little, unaligned>( - Data); + return endian::readNext<uint32_t, llvm::endianness::little>(Data); } }; @@ -232,8 +226,7 @@ class ObjCContextInfoTableInfo ObjCContextInfo> { public: static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { - return endian::readNext<uint32_t, llvm::endianness::little, unaligned>( - Data); + return endian::readNext<uint32_t, llvm::endianness::little>(Data); } hash_value_type ComputeHash(internal_key_type Key) { @@ -273,8 +266,7 @@ void ReadVariableInfo(const uint8_t *&Data, VariableInfo &Info) { } ++Data; - auto TypeLen = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + auto TypeLen = endian::readNext<uint16_t, llvm::endianness::little>(Data); Info.setType(std::string(Data, Data + TypeLen)); Data += TypeLen; } @@ -286,12 +278,9 @@ class ObjCPropertyTableInfo ObjCPropertyInfo> { public: static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { - auto ClassID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); - auto NameID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); - char IsInstance = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); + auto ClassID = endian::readNext<uint32_t, llvm::endianness::little>(Data); + auto NameID = endian::readNext<uint32_t, llvm::endianness::little>(Data); + char IsInstance = endian::readNext<uint8_t, llvm::endianness::little>(Data); return {ClassID, NameID, IsInstance}; } @@ -314,8 +303,7 @@ class ObjCPropertyTableInfo void ReadParamInfo(const uint8_t *&Data, ParamInfo &Info) { ReadVariableInfo(Data, Info); - uint8_t Payload = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); + uint8_t Payload = endian::readNext<uint8_t, llvm::endianness::little>(Data); if (auto RawConvention = Payload & 0x7) { auto Convention = static_cast<RetainCountConventionKind>(RawConvention - 1); Info.setRetainCountConvention(Convention); @@ -331,8 +319,7 @@ void ReadParamInfo(const uint8_t *&Data, ParamInfo &Info) { void ReadFunctionInfo(const uint8_t *&Data, FunctionInfo &Info) { ReadCommonEntityInfo(Data, Info); - uint8_t Payload = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); + uint8_t Payload = endian::readNext<uint8_t, llvm::endianness::little>(Data); if (auto RawConvention = Payload & 0x7) { auto Convention = static_cast<RetainCountConventionKind>(RawConvention - 1); Info.setRetainCountConvention(Convention); @@ -343,12 +330,12 @@ void ReadFunctionInfo(const uint8_t *&Data, FunctionInfo &Info) { assert(Payload == 0 && "Bad API notes"); Info.NumAdjustedNullable = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint8_t, llvm::endianness::little>(Data); Info.NullabilityPayload = - endian::readNext<uint64_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint64_t, llvm::endianness::little>(Data); unsigned NumParams = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); while (NumParams > 0) { ParamInfo pi; ReadParamInfo(Data, pi); @@ -357,7 +344,7 @@ void ReadFunctionInfo(const uint8_t *&Data, FunctionInfo &Info) { } unsigned ResultTypeLen = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); Info.ResultType = std::string(Data, Data + ResultTypeLen); Data += ResultTypeLen; } @@ -369,12 +356,10 @@ class ObjCMethodTableInfo ObjCMethodInfo> { public: static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { - auto ClassID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + auto ClassID = endian::readNext<uint32_t, llvm::endianness::little>(Data); auto SelectorID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); - auto IsInstance = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint32_t, llvm::endianness::little>(Data); + auto IsInstance = endian::readNext<uint8_t, llvm::endianness::little>(Data); return {ClassID, SelectorID, IsInstance}; } @@ -419,29 +404,26 @@ class ObjCSelectorTableInfo { static std::pair<unsigned, unsigned> ReadKeyDataLength(const uint8_t *&Data) { unsigned KeyLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); unsigned DataLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); return {KeyLength, DataLength}; } static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { internal_key_type Key; - Key.NumArgs = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + Key.NumArgs = endian::readNext<uint16_t, llvm::endianness::little>(Data); unsigned NumIdents = (Length - sizeof(uint16_t)) / sizeof(uint32_t); for (unsigned i = 0; i != NumIdents; ++i) { Key.Identifiers.push_back( - endian::readNext<uint32_t, llvm::endianness::little, unaligned>( - Data)); + endian::readNext<uint32_t, llvm::endianness::little>(Data)); } return Key; } static data_type ReadData(internal_key_type Key, const uint8_t *Data, unsigned Length) { - return endian::readNext<uint32_t, llvm::endianness::little, unaligned>( - Data); + return endian::readNext<uint32_t, llvm::endianness::little>(Data); } }; @@ -451,12 +433,10 @@ class GlobalVariableTableInfo GlobalVariableInfo> { public: static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { - auto CtxID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + auto CtxID = endian::readNext<uint32_t, llvm::endianness::little>(Data); auto ContextKind = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); - auto NameID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint8_t, llvm::endianness::little>(Data); + auto NameID = endian::readNext<uint32_t, llvm::endianness::little>(Data); return {CtxID, ContextKind, NameID}; } @@ -478,12 +458,10 @@ class GlobalFunctionTableInfo GlobalFunctionInfo> { public: static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { - auto CtxID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + auto CtxID = endian::readNext<uint32_t, llvm::endianness::little>(Data); auto ContextKind = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); - auto NameID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint8_t, llvm::endianness::little>(Data); + auto NameID = endian::readNext<uint32_t, llvm::endianness::little>(Data); return {CtxID, ContextKind, NameID}; } @@ -505,8 +483,7 @@ class EnumConstantTableInfo EnumConstantInfo> { public: static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { - auto NameID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + auto NameID = endian::readNext<uint32_t, llvm::endianness::little>(Data); return NameID; } @@ -527,13 +504,11 @@ class TagTableInfo : public VersionedTableInfo<TagTableInfo, ContextTableKey, TagInfo> { public: static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { - auto CtxID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + auto CtxID = endian::readNext<uint32_t, llvm::endianness::little>(Data); auto ContextKind = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint8_t, llvm::endianness::little>(Data); auto NameID = - endian::readNext<IdentifierID, llvm::endianness::little, unaligned>( - Data); + endian::readNext<IdentifierID, llvm::endianness::little>(Data); return {CtxID, ContextKind, NameID}; } @@ -553,21 +528,21 @@ class TagTableInfo static_cast<EnumExtensibilityKind>((Payload & 0x3) - 1); unsigned ImportAsLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); if (ImportAsLength > 0) { Info.SwiftImportAs = std::string(reinterpret_cast<const char *>(Data), ImportAsLength - 1); Data += ImportAsLength - 1; } unsigned RetainOpLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); if (RetainOpLength > 0) { Info.SwiftRetainOp = std::string(reinterpret_cast<const char *>(Data), RetainOpLength - 1); Data += RetainOpLength - 1; } unsigned ReleaseOpLength = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint16_t, llvm::endianness::little>(Data); if (ReleaseOpLength > 0) { Info.SwiftReleaseOp = std::string(reinterpret_cast<const char *>(Data), ReleaseOpLength - 1); @@ -585,13 +560,11 @@ class TypedefTableInfo TypedefInfo> { public: static internal_key_type ReadKey(const uint8_t *Data, unsigned Length) { - auto CtxID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(Data); + auto CtxID = endian::readNext<uint32_t, llvm::endianness::little>(Data); auto ContextKind = - endian::readNext<uint8_t, llvm::endianness::little, unaligned>(Data); + endian::readNext<uint8_t, llvm::endianness::little>(Data); auto nameID = - endian::readNext<IdentifierID, llvm::endianness::little, unaligned>( - Data); + endian::readNext<IdentifierID, llvm::endianness::little>(Data); return {CtxID, ContextKind, nameID}; } diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 8c4b460970ad2b..feb60bc54413a5 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -915,10 +915,9 @@ ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) { using namespace llvm::support; SelectorTable &SelTable = Reader.getContext().Selectors; - unsigned N = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(d); + unsigned N = endian::readNext<uint16_t, llvm::endianness::little>(d); const IdentifierInfo *FirstII = Reader.getLocalIdentifier( - F, endian::readNext<uint32_t, llvm::endianness::little, unaligned>(d)); + F, endian::readNext<uint32_t, llvm::endianness::little>(d)); if (N == 0) return SelTable.getNullarySelector(FirstII); else if (N == 1) @@ -928,7 +927,7 @@ ASTSelectorLookupTrait::ReadKey(const unsigned char* d, unsigned) { Args.push_back(FirstII); for (unsigned I = 1; I != N; ++I) Args.push_back(Reader.getLocalIdentifier( - F, endian::readNext<uint32_t, llvm::endianness::little, unaligned>(d))); + F, endian::readNext<uint32_t, llvm::endianness::little>(d))); return SelTable.getSelector(N, Args.data()); } @@ -941,11 +940,11 @@ ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d, data_type Result; Result.ID = Reader.getGlobalSelectorID( - F, endian::readNext<uint32_t, llvm::endianness::little, unaligned>(d)); + F, endian::readNext<uint32_t, llvm::endianness::little>(d)); unsigned FullInstanceBits = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(d); + endian::readNext<uint16_t, llvm::endianness::little>(d); unsigned FullFactoryBits = - endian::readNext<uint16_t, llvm::endianness::little, unaligned>(d); + endian::readNext<uint16_t, llvm::endianness::little>(d); Result.InstanceBits = FullInstanceBits & 0x3; Result.InstanceHasMoreThanOneDecl = (FullInstanceBits >> 2) & 0x1; Result.FactoryBits = FullFactoryBits & 0x3; @@ -956,16 +955,14 @@ ASTSelectorLookupTrait::ReadData(Selector, const unsigned char* d, // Load instance methods for (unsigned I = 0; I != NumInstanceMethods; ++I) { if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>( - F, - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(d))) + F, endian::readNext<uint32_t, llvm::endianness::little>(d))) Result.Instance.push_back(Method); } // Load factory methods for (unsigned I = 0; I != NumFactoryMethods; ++I) { if (ObjCMethodDecl *Method = Reader.GetLocalDeclAs<ObjCMethodDecl>( - F, - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(d))) + F, endian::readNext<uint32_t, llvm::endianness::little>(d))) Result.Factory.push_back(Method); } @@ -1009,8 +1006,7 @@ static bool readBit(unsigned &Bits) { IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) { using namespace llvm::support; - unsigned RawID = - endian::readNext<uint32_t, llvm::endianness::little, unaligned>(d); + unsigned RawID = endian::readNext<uint32_t, llvm::endianness::little>(d); return Reader.getGlobalIdentifierID(F, RawID >> 1); } @@ -1028,8 +1024,7 @@ IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k, unsigned DataL... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/88842 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits