@@ -23,11 +23,22 @@ saveStringToMap(MapVector<StringRef, uint64_t> &Map,
2323 return Iter;
2424}
2525
26+ // Returns the canonical name or error.
27+ static Expected<StringRef> getCanonicalName (StringRef Name) {
28+ if (Name.empty ())
29+ return make_error<StringError>(" Empty symbol name" ,
30+ llvm::errc::invalid_argument);
31+ return InstrProfSymtab::getCanonicalName (Name);
32+ }
33+
2634const DataAccessProfRecord *
27- DataAccessProfData::getProfileRecord (const SymbolID SymbolID) const {
35+ DataAccessProfData::getProfileRecord (const SymbolHandle SymbolID) const {
2836 auto Key = SymbolID;
29- if (std::holds_alternative<StringRef>(SymbolID))
30- Key = InstrProfSymtab::getCanonicalName (std::get<StringRef>(SymbolID));
37+ if (std::holds_alternative<StringRef>(SymbolID)) {
38+ StringRef Name = std::get<StringRef>(SymbolID);
39+ assert (!Name.empty () && " Empty symbol name" );
40+ Key = InstrProfSymtab::getCanonicalName (Name);
41+ }
3142
3243 auto It = Records.find (Key);
3344 if (It != Records.end ())
@@ -36,30 +47,27 @@ DataAccessProfData::getProfileRecord(const SymbolID SymbolID) const {
3647 return nullptr ;
3748}
3849
39- bool DataAccessProfData::isKnownColdSymbol (const SymbolID SymID) const {
50+ bool DataAccessProfData::isKnownColdSymbol (const SymbolHandle SymID) const {
4051 if (std::holds_alternative<uint64_t >(SymID))
4152 return KnownColdHashes.contains (std::get<uint64_t >(SymID));
4253 return KnownColdSymbols.contains (std::get<StringRef>(SymID));
4354}
4455
45- Error DataAccessProfData::setDataAccessProfile (SymbolID Symbol,
56+ Error DataAccessProfData::setDataAccessProfile (SymbolHandle Symbol,
4657 uint64_t AccessCount) {
4758 uint64_t RecordID = -1 ;
4859 bool IsStringLiteral = false ;
49- SymbolID Key;
60+ SymbolHandle Key;
5061 if (std::holds_alternative<uint64_t >(Symbol)) {
5162 RecordID = std::get<uint64_t >(Symbol);
5263 Key = RecordID;
5364 IsStringLiteral = true ;
5465 } else {
55- StringRef SymbolName = std::get<StringRef>(Symbol);
56- if (SymbolName.empty ())
57- return make_error<StringError>(" Empty symbol name" ,
58- llvm::errc::invalid_argument);
59-
60- StringRef CanonicalName = InstrProfSymtab::getCanonicalName (SymbolName);
61- Key = CanonicalName;
62- RecordID = saveStringToMap (StrToIndexMap, Saver, CanonicalName)->second ;
66+ auto CanonicalName = getCanonicalName (std::get<StringRef>(Symbol));
67+ if (!CanonicalName)
68+ return CanonicalName.takeError ();
69+ std::tie (Key, RecordID) =
70+ *saveStringToMap (StrToIndexMap, Saver, *CanonicalName);
6371 IsStringLiteral = false ;
6472 }
6573
@@ -75,8 +83,8 @@ Error DataAccessProfData::setDataAccessProfile(SymbolID Symbol,
7583}
7684
7785Error DataAccessProfData::setDataAccessProfile (
78- SymbolID SymbolID, uint64_t AccessCount,
79- const llvm::SmallVector <DataLocation> & Locations) {
86+ SymbolHandle SymbolID, uint64_t AccessCount,
87+ ArrayRef <DataLocation> Locations) {
8088 if (Error E = setDataAccessProfile (SymbolID, AccessCount))
8189 return E;
8290
@@ -89,17 +97,15 @@ Error DataAccessProfData::setDataAccessProfile(
8997 return Error::success ();
9098}
9199
92- Error DataAccessProfData::addKnownSymbolWithoutSamples (SymbolID SymbolID) {
100+ Error DataAccessProfData::addKnownSymbolWithoutSamples (SymbolHandle SymbolID) {
93101 if (std::holds_alternative<uint64_t >(SymbolID)) {
94102 KnownColdHashes.insert (std::get<uint64_t >(SymbolID));
95103 return Error::success ();
96104 }
97- StringRef SymbolName = std::get<StringRef>(SymbolID);
98- if (SymbolName.empty ())
99- return make_error<StringError>(" Empty symbol name" ,
100- llvm::errc::invalid_argument);
101- StringRef CanonicalSymName = InstrProfSymtab::getCanonicalName (SymbolName);
102- KnownColdSymbols.insert (CanonicalSymName);
105+ auto CanonicalName = getCanonicalName (std::get<StringRef>(SymbolID));
106+ if (!CanonicalName)
107+ return CanonicalName.takeError ();
108+ KnownColdSymbols.insert (*CanonicalName);
103109 return Error::success ();
104110}
105111
@@ -142,7 +148,7 @@ Error DataAccessProfData::serializeSymbolsAndFilenames(ProfOStream &OS) const {
142148 OS.write (CompressedStringLen);
143149 // Write the chars in compressed strings.
144150 for (char C : CompressedStrings)
145- OS.writeByte (static_cast <uint8_t >(c ));
151+ OS.writeByte (static_cast <uint8_t >(C ));
146152 // Pad up to a multiple of 8.
147153 // InstrProfReader could read bytes according to 'CompressedStringLen'.
148154 const uint64_t PaddedLength = alignTo (CompressedStringLen, 8 );
@@ -151,11 +157,15 @@ Error DataAccessProfData::serializeSymbolsAndFilenames(ProfOStream &OS) const {
151157 return Error::success ();
152158}
153159
154- uint64_t DataAccessProfData::getEncodedIndex (const SymbolID SymbolID) const {
160+ uint64_t
161+ DataAccessProfData::getEncodedIndex (const SymbolHandle SymbolID) const {
155162 if (std::holds_alternative<uint64_t >(SymbolID))
156163 return std::get<uint64_t >(SymbolID);
157164
158- return StrToIndexMap.find (std::get<StringRef>(SymbolID))->second ;
165+ auto Iter = StrToIndexMap.find (std::get<StringRef>(SymbolID));
166+ assert (Iter != StrToIndexMap.end () &&
167+ " String literals not found in StrToIndexMap" );
168+ return Iter->second ;
159169}
160170
161171Error DataAccessProfData::serialize (ProfOStream &OS) const {
@@ -179,13 +189,13 @@ Error DataAccessProfData::serialize(ProfOStream &OS) const {
179189}
180190
181191Error DataAccessProfData::deserializeSymbolsAndFilenames (
182- const unsigned char *&Ptr, uint64_t NumSampledSymbols,
183- uint64_t NumColdKnownSymbols) {
192+ const unsigned char *&Ptr, const uint64_t NumSampledSymbols,
193+ const uint64_t NumColdKnownSymbols) {
184194 uint64_t Len =
185195 support::endian::readNext<uint64_t , llvm::endianness::little>(Ptr);
186196
187- // With M= NumSampledSymbols and N=NumColdKnownSymbols, the first M strings are
188- // symbols with samples, and next N strings are known cold symbols.
197+ // The first NumSampledSymbols strings are symbols with samples, and next
198+ // NumColdKnownSymbols strings are known cold symbols.
189199 uint64_t StringCnt = 0 ;
190200 std::function<Error (StringRef)> addName = [&](StringRef Name) {
191201 if (StringCnt < NumSampledSymbols)
@@ -219,7 +229,7 @@ Error DataAccessProfData::deserializeRecords(const unsigned char *&Ptr) {
219229 uint64_t AccessCount =
220230 support::endian::readNext<uint64_t , llvm::endianness::little>(Ptr);
221231
222- SymbolID SymbolID;
232+ SymbolHandle SymbolID;
223233 if (IsStringLiteral)
224234 SymbolID = ID;
225235 else
0 commit comments